物理方式下怎樣建立oracle data guard,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
10多年的漳浦網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整漳浦建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“漳浦網(wǎng)站設(shè)計”,“漳浦網(wǎng)站推廣”以來,每個客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
物理方式下建立oracle data guard(一):前奏
前后折騰了一個星期左右時間,把物理方式下建立ORACLE data guard配好了,同事幫了不少忙,在此表示感謝。在這個過程中遇到了很多問題,有的問題很淺顯,一下就解決了;有的問題是因?yàn)榇中囊鸬?,比如說在服務(wù)器參數(shù)文件里面少寫了一點(diǎn),結(jié)果花很長時間來排錯;有的問題第一次碰到,解決了之后很興奮,因?yàn)橛址e累了經(jīng)驗(yàn),就像上次配置HP MC雙機(jī)的時候碰到的那個問題,之前從未碰到過,這樣折騰一下倒還認(rèn)識了kcmodule這么樣一個命令,附帶一些不同的內(nèi)核參數(shù)。
在這之前也嘗試配置過data guard,參考過一些文檔書籍,最后以失敗告終,倒在主、備節(jié)點(diǎn)日志文件不能同步這個問題上再也回不得頭來。經(jīng)過這一次,我發(fā)現(xiàn)網(wǎng)上很多參考文檔甚至業(yè)已出版的技術(shù)類書籍都是寫得含含糊糊不太完整的,很多應(yīng)該特別指出的地方被他們給忽略了;很多可以省略的地方又花了大量的篇幅來解釋,這顯得沒有必要。
“RAC的原有參數(shù)不變,添加下列參數(shù):
*.service.name=wxxr_rac“這一句里面的“service.name”應(yīng)該是“service.names”才對,少寫了一個“s”,有時候就是這樣的,失之毫厘謬以千里,涉及到參數(shù)的地方更應(yīng)該嚴(yán)謹(jǐn)一些。這樣的錯誤在實(shí)驗(yàn)過程中我也碰到過一次,把整個人搞得很崩潰,所幸后來找到問題所在。
除此之外,主備節(jié)點(diǎn)切換的過程也寫得比較粗糙,有點(diǎn)一筆帶過的感覺,其實(shí)這部分恰恰是比較重要的。
在我看來,配置data guard過程中涉及比較重要的文件分別是:服務(wù)器參數(shù)文件、密碼文件、listener.ora文件以及tnsnames.ora文件,其中尤以服務(wù)器參數(shù)文件以及l(fā)istener.ora最為重要,因?yàn)樵谶@里要采取靜態(tài)方式來配置listener.ora文件,以往那種動態(tài)方式是行不通的,因?yàn)橐WC備節(jié)點(diǎn)在mount方式下也能注冊到數(shù)據(jù)庫,動態(tài)方式下做不到這一點(diǎn)。
ORACLE data guard和ORACLE RAC都是當(dāng)紅巨星,越發(fā)受人待見,在銀行、企業(yè)、政府機(jī)構(gòu)等等中扮演著重要的角色。在
“RAC的強(qiáng)項(xiàng)在于解決單點(diǎn)故障和負(fù)載均衡,因此RAC方案常見于24*7的核心系統(tǒng)。但RAC方案中數(shù)據(jù)只有一份,盡管通過RAID等機(jī)制可以避免存儲故障,但是數(shù)據(jù)本身是沒有冗余的,容易形成單點(diǎn)故障。而Data Guard是通過冗余數(shù)據(jù)來提供數(shù)據(jù)保護(hù)的。通過日志同步機(jī)制保證冗余數(shù)據(jù)和主數(shù)據(jù)庫之間的同步,這種同步可以是實(shí)時、延時、同步、異步多種形式。常用于異地容災(zāi)和小企業(yè)的高可用性方案。"
ORACLE data guard有兩種實(shí)現(xiàn)方式,一種是物理方式下的data guard,也就是我實(shí)驗(yàn)中用到的,通過在備節(jié)點(diǎn)上同步主節(jié)點(diǎn)上的redo日志來實(shí)現(xiàn);還有一種是邏輯方式下的data guard,通過在備節(jié)點(diǎn)上應(yīng)用主節(jié)點(diǎn)上redo日志轉(zhuǎn)化而來的SQL語句實(shí)現(xiàn)日志同步。因?yàn)檫@種方法沒有物理方式使用普遍,所以我暫時先做物理方式下的data guard實(shí)驗(yàn),邏輯的以后再說。
下面進(jìn)入正題。
物理方式下建立oracle data guard(二):環(huán)境
首先,操作系統(tǒng),這里用到的HP rx8640服務(wù)器上的兩個分區(qū),并分別創(chuàng)建“/dev/vg00/lv_oracle”文件系統(tǒng)并掛載到“/home/db/oracle"目錄下,接著創(chuàng)建“/dev/vg00/lv_arch”文件系統(tǒng)并掛載到“/arch”目錄下,作為歸檔日志存放的地方。創(chuàng)建完畢之后記得給目錄賦予正確的屬主(oracle:dba)以及權(quán)限,否則會有很大問題。
ORACLE版本這里用到的是10.2.0.1,之前第一次做實(shí)驗(yàn)的時候沒有注意,挑選的兩個分區(qū)oracle版本不一致,一個節(jié)點(diǎn)的版本是10.2.0.1的,另一個節(jié)點(diǎn)的版本是10.2.0.3的。起初用RMAN進(jìn)行備份還原到備節(jié)點(diǎn)的時候系統(tǒng)突然提醒數(shù)據(jù)需要升級,搞得我一愣一愣的,仔細(xì)檢查了一下才發(fā)現(xiàn)是數(shù)據(jù)庫版本不一致。雖說版本不一致也能做,情況好點(diǎn)就是這種情況,主節(jié)點(diǎn)oracle版本比備節(jié)點(diǎn)低,如果主節(jié)點(diǎn)oracle版本比備節(jié)點(diǎn)高就比較麻煩了。
再有一個是SID的問題,主、備節(jié)點(diǎn)我都把實(shí)例的SID設(shè)為ora,這樣做是為了方便,也可以兩邊實(shí)例名設(shè)為不一致。設(shè)為一致的好處是修改服務(wù)器參數(shù)文件的時候沒有那么麻煩,可修改之處變少,工作量變少,錯誤自然也變少了。
下面再次進(jìn)入正題,首先在主、備節(jié)點(diǎn)的正確路徑分別安裝oracle10.2.0.1版本數(shù)據(jù)庫軟件(備節(jié)點(diǎn)不需要通過圖形界面單獨(dú)建立數(shù)據(jù)庫,通過從主節(jié)點(diǎn)恢復(fù)過來即可),然后通過圖形界面的dbca方式在主節(jié)點(diǎn)建庫。為了圖方便,滿足實(shí)驗(yàn)效果,這里既不使用裸設(shè)備建庫也不使用ASM方式建庫,一切按照系統(tǒng)默認(rèn)的方式往下走即可。
因?yàn)橹鞴?jié)點(diǎn)需要設(shè)置為歸檔模式,這里我們可以在建庫的時候就指定成歸檔模式,并指定歸檔路徑為“/arch”,這樣就不用在數(shù)據(jù)庫建好之后再手工修改到歸檔模式下了,建好之后如下所示:
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /arch
Oldest online log sequence 1
Next log sequence to archive 2
Current log sequence 2
物理方式下建立oracle data guard(三):開工
下面設(shè)置主節(jié)點(diǎn)數(shù)據(jù)庫為force logging模式:
SQL> alter database force logging;
Database altered.
force logging存在的意義:使得Oracle無論什么操作都進(jìn)行redo的寫入。
通過select語句可以查看:
SQL> select FORCE_LOGGING from v$database;
FOR
---
YES
因?yàn)閯偨?shù)據(jù)庫,還沒有生成歸檔日志,我們可以手工進(jìn)行日志切換來讓數(shù)據(jù)庫產(chǎn)生日志文件:
SQL> alter system switch logfile;
System altered.
SQL> alter system switch logfile;
System altered.
SQL> alter system switch logfile;
System altered.
SQL> select name from v$archived_log;
NAME
--------------------------------------------------------------------------------
/arch/1_2_697298091.dbf
/arch/1_3_697298091.dbf
/arch/1_4_697298091.dbf
查看已有的日志文件:
SQL> select * from v$logfile;
rows will be truncated
GROUP# STATUS TYPE MEMBER
---------- ------- ------- --------------------------------------------------------
3 ONLINE /home/db/oracle/oradata/ora/redo03.log
2 ONLINE /home/db/oracle/oradata/ora/redo02.log
1 ONLINE /home/db/oracle/oradata/ora/redo01.log
為備節(jié)點(diǎn)創(chuàng)建同樣大小的三組日志文件并檢驗(yàn):
SQL> alter database add standby logfile group 4 ('/home/db/oracle/oradata/ora/redo04.log') size 50m;
Database altered.
SQL> alter database add standby logfile group 5 ('/home/db/oracle/oradata/ora/redo05.log') size 50m;
Database altered.
SQL> alter database add standby logfile group 6 ('/home/db/oracle/oradata/ora/redo06.log') size 50m;
Database altered.
SQL> select * from v$logfile;
rows will be truncated
GROUP# STATUS TYPE MEMBER
---------- ------- ------- --------------------------------------------------------
3 ONLINE /home/db/oracle/oradata/ora/redo03.log
2 ONLINE /home/db/oracle/oradata/ora/redo02.log
1 ONLINE /home/db/oracle/oradata/ora/redo01.log
5 STANDBY /home/db/oracle/oradata/ora/redo05.log
4 STANDBY /home/db/oracle/oradata/ora/redo04.log
6 STANDBY /home/db/oracle/oradata/ora/redo06.log
6 rows selected.
關(guān)閉數(shù)據(jù)庫,即將來到第一個重要步驟,修改服務(wù)器參數(shù)文件。
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
物理方式下建立oracle data guard(四):變化
新建立的數(shù)據(jù)庫是以服務(wù)器參數(shù)文件的形式啟動的,而我們要修改的是參數(shù)文件,這里簡單說說服務(wù)器參數(shù)文件跟參數(shù)文件的區(qū)別和聯(lián)系。服務(wù)器參數(shù)文件也就是spfileSID.ora,其內(nèi)容是以二進(jìn)制方式存在的,不能手工編輯;而參數(shù)文件即initSID.ora,其內(nèi)容是以文本方式存在的,可以手工編輯,這里我就需要對參數(shù)文件進(jìn)行修改。
通常說來,會有一個默認(rèn)的參數(shù)文件init.ora,但這里我們需要的是initora.ora,如果沒有的話可以通過命令創(chuàng)建,如下所示:
SQL>create pfile='/home/db/oracle/10g/dbs/initora.ora' from spfile;
查看當(dāng)前數(shù)據(jù)庫是以服務(wù)器參數(shù)文件還是參數(shù)文件方式啟動,可以通過命令進(jìn)行查看,如下所示:
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /home/db/oracle/10g/dbs/spfile
ora.ora
如果VALUE下對應(yīng)有文件,那說明是以spfile,即服務(wù)器參數(shù)文件的方式啟動。反之,則是以參數(shù)文件的方式啟動。前一篇文章停掉了數(shù)據(jù)庫,為的就是在修改參數(shù)文件之后,使用新修改的參數(shù)文件來啟動數(shù)據(jù)庫。
下面奉上修改之后的參數(shù)文件,修改之處以黑體字標(biāo)明:
$ vi initora.ora
ora.__db_cache_size=780140544
ora.__java_pool_size=4194304
ora.__large_pool_size=4194304
ora.__shared_pool_size=276824064
ora.__streams_pool_size=0
*.audit_file_dest='/home/db/oracle/admin/ora/adump'
*.background_dump_dest='/home/db/oracle/admin/ora/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/home/db/oracle/oradata/ora/control01.ctl','/home/db/oracle/oradata/ora/control02.ctl','/home/db/oracle/oradata/ora/control03.ctl'
*.core_dump_dest='/home/db/oracle/admin/ora/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='ora'
*.db_recovery_file_dest='/home/db/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.db_unique_name='10gpri'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=oraXDB)'
*.fal_client='10gstandby'
*.fal_server='10gpri'
*.job_queue_processes=10
*.log_archive_config='DG_CONFIG=(10gpri,10gstandby)'
*.log_archive_dest_1='LOCATION=/arch VALID_FOR=(all_logfiles,all_roles) db_unique_name=10gpri'
*.log_archive_dest_2='service=10gstandby arch async valid_for=(online_logfiles,primary_role) db_unique_name=10gstandby'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=300
*.pga_aggregate_target=3418357760
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=1073741824
*.standby_file_management='auto'
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/home/db/oracle/admin/ora/udump'
至于為什么添加并修改這些參數(shù),官方文檔、別人的文檔、技術(shù)類書籍都有說,google或者百度或者百古虎一大把,我就不詳述了??傊琩b_unique_name很重要,如果主、背節(jié)點(diǎn)的實(shí)例名都一樣,就要靠這個來區(qū)分了。
物理方式下建立oracle data guard(五):蛻變
接下來要做的,是以修改過的參數(shù)文件啟動數(shù)據(jù)庫并生成服務(wù)器參數(shù)文件,再讓數(shù)據(jù)庫以服務(wù)器參數(shù)文件的方式啟動數(shù)據(jù)庫:
1,使用修改過的參數(shù)文件將數(shù)據(jù)庫啟動到nomount模式:
SQL> startup pfile='/home/db/oracle/10g/dbs/initora.ora' nomount;
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 1999160 bytes
Variable Size 285216456 bytes
Database Buffers 780140544 bytes
Redo Buffers 6385664 bytes
2,創(chuàng)建服務(wù)器參數(shù)文件:
SQL> create spfile from pfile='/home/db/oracle/10g/dbs/initora.ora';
File created.
3,以系統(tǒng)默認(rèn)的服務(wù)器參數(shù)文件方式啟動數(shù)據(jù)庫:
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 1999160 bytes
Variable Size 285216456 bytes
Database Buffers 780140544 bytes
Redo Buffers 6385664 bytes
Database mounted.
Database opened.
4,創(chuàng)建密碼文件(如果數(shù)據(jù)庫建好之后存在的話,就不用再單獨(dú)建立密碼文件了):
$ orapwd file=/home/db/oracle/10g/dbs/orapwora password=oracle entries=10
$ ls
alert_ora.log init.ora lk10GPRI lkORA_SINGLE snapcf_ora.f
hc_ora.dat initdw.ora lkORA orapwora spfileora.ora
在這個地方我犯了低級錯誤,浪費(fèi)了很多時間,這個在最后總結(jié)的時候來說。
下面就要提到監(jiān)聽文件以及TNS文件了,放下一篇文章里面列個專題,因?yàn)檫@一步很重要。如果不做好,后果很嚴(yán)重。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
物理方式下建立oracle data guard(六):動靜
下面說一下監(jiān)聽,這就是以前做實(shí)驗(yàn)的時候被卡門時間最長的地方,也是《大話ORACLE RAC》作者沒有交代清楚的地方。很多文檔都提到了實(shí)驗(yàn)做到一定程度要配置監(jiān)聽和TNS,以方便主、備節(jié)點(diǎn)互通有無。但卻忽略提到一點(diǎn)那就是監(jiān)聽也有動態(tài)監(jiān)聽和靜態(tài)監(jiān)聽之分,在oracle data guard實(shí)驗(yàn)中我們必須要用到靜態(tài)監(jiān)聽,否則實(shí)驗(yàn)就沒法進(jìn)行下去。
先抄摘一點(diǎn)有關(guān)動態(tài)監(jiān)聽和靜態(tài)監(jiān)聽的概念:
靜態(tài)監(jiān)聽指實(shí)例啟動時讀取listener.ora配置文件,將實(shí)例和服務(wù)注冊到監(jiān)聽程序。無論何時啟動一個數(shù)據(jù)庫,默認(rèn)都有兩條信息注冊到監(jiān)聽器中:實(shí)例和服務(wù)
SID_LIST_LISTENER =
( SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = Ora8)
(SID_NAME = test)
)
)
LISTENER =
( DESCRIPTION =
(ADDRESS = (HOST = 192.168.0.88)(PROTOCOL = TCP)(PORT = 1522))
)
這是一個最簡單的靜態(tài)監(jiān)聽配置文件,SID_LIST_LISTENER部分的GLOBAL_DBNAME表示向外提供的服務(wù)名,SID_NAME是提供注冊的實(shí)例。在tnsnames.ora文件中的CONNECT_DATA部分,可分別選擇SERVICE_NAME=Ora8或SID=test為客戶端提供連接。
動態(tài)注冊不需要顯示的配置listener.ora文件,實(shí)例啟動的時候,PMON進(jìn)程根據(jù)instance_name,service_name參數(shù)將實(shí)例和服務(wù)動態(tài)注冊到listerer中。如果沒有設(shè)定instance_name,將使用db_name初始化參數(shù)值。如果沒有設(shè)定service_names,將拼接db_name和db_domain參數(shù)值來注冊監(jiān)聽。
如果對上述一番話還是不太明白,我再簡單說一下一個最為關(guān)鍵的區(qū)別,在oracle data guard實(shí)驗(yàn)中,有時候我們需要將備節(jié)點(diǎn)啟動到mount模式下,以此來接受主節(jié)點(diǎn)的redo日志文件完成自身的同步過程。而這個過程的前提就是兩者在網(wǎng)絡(luò)上要有一個互動,即你能凝望著我,我也能關(guān)切到你。如果是配置的動態(tài)監(jiān)聽,只要有實(shí)例沒有啟動到open狀態(tài),那就無法通過網(wǎng)絡(luò)將服務(wù)注冊到數(shù)據(jù)庫,而只有靜態(tài)監(jiān)聽可以完成這個任務(wù)。很多文檔都指出需要修改listener.ora文件,但卻不貫徹什么是靜態(tài)監(jiān)聽什么是動態(tài)監(jiān)聽,所以具體操作起來就容易犯錯誤,繼而去懷疑是不是參數(shù)文件配置有問題,這可真是無妄之災(zāi)。
下面顯示的是我配置的靜態(tài)監(jiān)聽內(nèi)容以及TNS文件內(nèi)容:
$ cat listener.ora
# listener.ora Network Configuration File: /u1/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 128.199.36.152)(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /home/db/oracle/10g)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ora)
(ORACLE_HOME = /home/db/oracle/10g)
(SID_NAME = ora)
)
)
和動態(tài)監(jiān)聽所不同的是,這里手工指定了ORACLE_HOME路徑以及SID名稱。
$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /home/db/oracle/10g/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
10GPRI =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 128.199.36.152)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora)
)
)
ORA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 128.199.36.152)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora)
)
)
10GSTANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 128.199.36.53)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora)
)
)
兩個服務(wù)分別是10GPRI以及10GSTANDBY。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
物理方式下建立oracle data guard(七):測試
前面解釋了動態(tài)監(jiān)聽和靜態(tài)監(jiān)聽,下面要來實(shí)驗(yàn)一把,看數(shù)據(jù)庫在mount狀態(tài)下是否能夠通過網(wǎng)絡(luò)注冊到數(shù)據(jù)庫,下面就是具體實(shí)施過程:
1,在開始之前有一點(diǎn)要注意的就是,監(jiān)聽的開閉和數(shù)據(jù)庫的開閉還有一點(diǎn)關(guān)系。正確的順序是先啟動監(jiān)聽,再講數(shù)據(jù)庫打開到mount的狀態(tài)下,如果要重做一次,就要先關(guān)閉數(shù)據(jù)庫,然后重啟監(jiān)聽;
2,關(guān)閉主節(jié)點(diǎn)數(shù)據(jù)庫,并啟動到mount狀態(tài)下(到此為止,對備節(jié)點(diǎn)的操作還沒有開始):
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 1999160 bytes
Variable Size 285216456 bytes
Database Buffers 780140544 bytes
Redo Buffers 6385664 bytes
Database mounted.
3,啟動監(jiān)聽:
$ lsnrctl start
LSNRCTL for HPUX: Version 10.2.0.1.0 - Production on 11-SEP-2009 14:13:53
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Starting /home/db/oracle/10g/bin/tnslsnr: please wait...
TNSLSNR for HPUX: Version 10.2.0.1.0 - Production
System parameter file is /home/db/oracle/10g/network/admin/listener.ora
Log messages written to /home/db/oracle/10g/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=128.199.36.152)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=128.199.36.152)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for HPUX: Version 10.2.0.1.0 - Production
Start Date 11-SEP-2009 14:13:53
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/db/oracle/10g/network/admin/listener.ora
Listener Log File /home/db/oracle/10g/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=128.199.36.152)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "ora" has 1 instance(s).
Instance "ora", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
到這里可以看到監(jiān)聽已經(jīng)成功啟動。值得一提的是,在靜態(tài)監(jiān)聽開啟的情況下,實(shí)例的狀態(tài)顯示為“UNKNOWN",而動態(tài)監(jiān)聽開啟狀態(tài)下,實(shí)例的狀態(tài)應(yīng)該顯示為“READY”。根據(jù)這一點(diǎn)也可以判斷監(jiān)聽是以什么方式啟動。
4,測試以網(wǎng)絡(luò)方式注冊到數(shù)據(jù)庫:
$ sqlplus sys/oracle@10gpri as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Sep 11 15:01:20 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL>
注意:如果輸入“sqlplus system/oracle@10gpri as sysdba可能仍然注冊不到數(shù)據(jù)庫,這就需要通過賦予sysdba給system用戶的命令來實(shí)現(xiàn)。
這一步成功了之后,后面的過程就比較好辦了。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
物理方式下建立oracle data guard(八):意外
前面那篇文章提到了在啟動靜態(tài)監(jiān)聽、將數(shù)據(jù)庫啟動到mount模式下以網(wǎng)絡(luò)方式注冊數(shù)據(jù)庫,是比較順利的一種情況,之前還遇到了一個比較困惑的問題,下面就來討論一下這種情況。
之前在成功配置監(jiān)聽文件、TNS文件,也將數(shù)據(jù)庫啟動到了mount狀態(tài)下,但死活就是無法通過網(wǎng)絡(luò)方式注冊到數(shù)據(jù)庫,出現(xiàn)下面這個報錯信息:
ORA-01031: insufficient privileges
提示沒有足夠的權(quán)限,有沒有搞錯?我是以sys用戶登陸,sys不就具有最高權(quán)限么?而且密碼并沒有輸入錯誤。仔細(xì)檢查了listener.ora以及tnsnames.ora文件,確認(rèn)沒有任何問題。因?yàn)樵诹硪粋€環(huán)境就是這樣設(shè)置的。嘗試查看一下?lián)碛蠸YSDBA權(quán)限的用戶:
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
no rows selected.
看到這里,問題比較明朗了,密碼文件沒有起到作用。因?yàn)橥ㄟ^網(wǎng)絡(luò)注冊數(shù)據(jù)庫,是要讀取密碼文件的,而SYS是默認(rèn)具有SYSDBA權(quán)限的,這里顯示不出來,說明密碼文件沒有被成功讀取,自然也就無法注冊到數(shù)據(jù)庫了。打個簡單的比喻,小明在一次語文期末考試之前想要作弊,作弊的方式是通過花點(diǎn)銀子去買一份答案,結(jié)果買到一份假答案,那考試自然是過不了關(guān)的了。此情此景,殊途同歸。
回憶一下系統(tǒng)建庫之后,默認(rèn)生成了一個正確的密碼文件,但是我手賤,把這個文件給刪除了,重新創(chuàng)建了一個,并且命名為orapw10gstandby.ora。這個命名犯下兩個錯誤,這兩個錯誤也讓我重新審視對密碼文件規(guī)范化的認(rèn)知程度。首先,密碼文件是沒有.ora后綴的;其次,后綴之前應(yīng)該以標(biāo)準(zhǔn)的“orapwSID”方式命名。這樣一來,我刪除了這個錯誤命名的密碼文件,重新建立密碼文件:
orapwd file=/home/db/oracle/10g/dbs/orapwora password=oracle entries=10
重新在數(shù)據(jù)庫中查詢擁有SYSDBA的用戶:
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
這不,又重新回來了,再檢驗(yàn)通過網(wǎng)絡(luò)注冊數(shù)據(jù)庫,一切正常,于是這個問題也算告一段落了。
之所以寫這么長一篇,還是為了強(qiáng)調(diào)密碼文件的重要性,往往我們忽視掉的地方恰恰是最值得重視的。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
物理方式下建立oracle data guard(九):寵幸
到現(xiàn)在為止我已經(jīng)分不清我是在寫技術(shù)博客還是在寫生活日志了,或多或少摻入了個人感情,畢竟學(xué)習(xí)data guard時間不算短了,到現(xiàn)在才總算是有些柳暗花明。應(yīng)該是才疏學(xué)淺,抑或是實(shí)在太笨,學(xué)東西慢,但看到有進(jìn)展的時候還是抑制不住內(nèi)心的激動的。閑話莫提,下面開始寵幸備節(jié)點(diǎn),畢竟data guard這個軍功章有主節(jié)點(diǎn)的一半,也有備節(jié)點(diǎn)的一半。
主節(jié)點(diǎn)需要我們完成的步驟大致就是前面那些文章所提到的了,只剩下最終的切換測試過程。而備節(jié)點(diǎn)需要關(guān)注的體現(xiàn)在以下幾個方面:
目錄、參數(shù)文件、密碼文件、監(jiān)聽文件、TNS文件、SID(這里繼續(xù)使用ora)
到這里,除了參數(shù)文件和監(jiān)聽文件需要稍作改動,其他諸如密碼文件、TNS文件只需從主節(jié)點(diǎn)拷貝即可,目錄可以按照主節(jié)點(diǎn)相同的路徑進(jìn)行手工創(chuàng)建,在unix下面也就是mkdir而已,更快一些,你可以用mkdir -p實(shí)現(xiàn),下面是具體過程:
1,創(chuàng)建/home/db/oracle/oradata/ora主目錄以及主目錄下udump、adump、cdump、bdump等次目錄;
2,通過ftp方式拷貝主節(jié)點(diǎn)下密碼文件、TNS文件;
3,在主節(jié)點(diǎn)進(jìn)行幾次日志切換,產(chǎn)生一定量的歸檔日志文件:
SQL> alter system switch logfile;
System altered.
SQL> alter system switch logfile;
System altered.
SQL> alter system switch logfile;
System altered.
SQL> select name from v$archived_log;
NAME
--------------------------------------------------------------------------------
/arch/1_2_697298091.dbf
/arch/1_3_697298091.dbf
/arch/1_4_697298091.dbf
/arch/1_5_697298091.dbf
/arch/1_6_697298091.dbf
/arch/1_7_697298091.dbf
6 rows selected.
4,停掉主節(jié)點(diǎn)數(shù)據(jù)庫,拷貝歸檔日志文件以及所有數(shù)據(jù)文件
NOTE:拷貝到備節(jié)點(diǎn)之后注意查看屬主是否正確,否則修改如下:
root@hpvm3:/home/db/oracle/oradata/ora#chown oracle:dba *
5,將主節(jié)點(diǎn)數(shù)據(jù)庫啟動到mount模式下,創(chuàng)建standby控制文件:
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 1999160 bytes
Variable Size 289410760 bytes
Database Buffers 775946240 bytes
Redo Buffers 6385664 bytes
Database mounted.
SQL> alter database create standby controlfile as '/arch/standby.ctl';
Database altered.
6,拷貝standby控制文件到備節(jié)點(diǎn),并賦予正確屬主:
root@hpvm3:/home/db/oracle/oradata/ora#chown oracle:dba standby.ctl
7,修改備節(jié)點(diǎn)參數(shù)文件如下:
root@hpvm3:/arch#vi initstandby.ora
"initstandby.ora" 35 lines, 1328 characters
ora.__db_cache_size=805306368
ora.__java_pool_size=4194304
ora.__large_pool_size=4194304
ora.__shared_pool_size=251658240
ora.__streams_pool_size=0
*.audit_file_dest='/home/db/oracle/admin/ora/adump'
*.background_dump_dest='/home/db/oracle/admin/ora/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/home/db/oracle/oradata/ora/standby.ctl'
*.core_dump_dest='/home/db/oracle/admin/ora/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='ora'
*.DB_UNIQUE_NAME='10gstandby'
*.log_archive_config='DG_CONFIG=(10gpri,10gstandby)'
*.db_recovery_file_dest='/home/db/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=oraXDB)'
*.job_queue_processes=10
*.log_archive_dest_1='LOCATION=/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=10gstandby'
*.log_archive_dest_2='service=10gpri arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=10gpri'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER=10gstandby
*.FAL_CLIENT=10gpri
*.open_cursors=300
*.pga_aggregate_target=3418357760
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=1073741824
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.STANDBY_FILE_MANAGEMENT=AUTO
*.user_dump_dest='/home/db/oracle/admin/ora/udump'
這一切工作做完之后,ok,輪到咱備節(jié)點(diǎn)登上歷史舞臺了。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
物理方式下建立oracle data guard(十):革命
閑話不提,下面直入正題,看備節(jié)點(diǎn)建功立業(yè):
1,以修改之后的參數(shù)文件為優(yōu)秀代表,啟動備節(jié)點(diǎn)數(shù)據(jù)庫到nomount模式下:
SQL> startup nomount pfile='/arch/initstandby.ora';
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 1999192 bytes
Variable Size 264244904 bytes
Database Buffers 805306368 bytes
Redo Buffers 2191360 bytes
2,創(chuàng)建服務(wù)器參數(shù)文件并關(guān)閉數(shù)據(jù)庫:
SQL> create spfile from pfile='/arch/initstandby.ora';
File created.
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
3,啟動修改后的監(jiān)聽(只需要修改其中的IP地址即可):
$ lsnrctl start
LSNRCTL for HPUX: Version 10.2.0.1.0 - Production on 11-SEP-2009 15:54:36
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Starting /home/db/oracle/10g/bin/tnslsnr: please wait...
TNSLSNR for HPUX: Version 10.2.0.1.0 - Production
System parameter file is /home/db/oracle/10g/network/admin/listener.ora
Log messages written to /home/db/oracle/10g/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=128.199.36.53)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=128.199.36.53)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for HPUX: Version 10.2.0.1.0 - Production
Start Date 11-SEP-2009 15:54:36
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/db/oracle/10g/network/admin/listener.ora
Listener Log File /home/db/oracle/10g/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=128.199.36.53)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "ora" has 1 instance(s).
Instance "ora", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
4,啟動數(shù)據(jù)庫到mount下:
$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Sep 11 15:54:55 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 1999192 bytes
Variable Size 264244904 bytes
Database Buffers 805306368 bytes
Redo Buffers 2191360 bytes
Database mounted.
5,測試以網(wǎng)絡(luò)方式注冊數(shù)據(jù)庫沒有問題:
$ sqlplus sys/oracle@10gstandby as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Sep 11 15:01:20 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL>
6,啟動主節(jié)點(diǎn)數(shù)據(jù)庫:
$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Sep 11 15:59:29 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> alter database open;
Database altered.
7,重新關(guān)閉備節(jié)點(diǎn)數(shù)據(jù)庫并以standby方式啟動到mount狀態(tài)下:
SQL> startup nomount
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 1999192 bytes
Variable Size 264244904 bytes
Database Buffers 805306368 bytes
Redo Buffers 2191360 bytes
SQL> alter database mount standby database;
Database altered.
8,將備節(jié)點(diǎn)更改到接受主節(jié)點(diǎn)redo日志模式下:
SQL> alter database recover managed standby database disconnect from session;
Database altered.
9,查看切換狀態(tài):
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
如果顯示為TO PRIMARY,表示一切正常。
到此為止,備節(jié)點(diǎn)革命過程完畢,和主節(jié)點(diǎn)遙相呼應(yīng),要想完全接收主節(jié)點(diǎn)redo日志,就需要主節(jié)點(diǎn)做出一些動作了,連同主備切換放到下篇再說。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
物理方式下建立oracle data guard(十一):會師
備節(jié)點(diǎn)需要完成的工作已經(jīng)完成,現(xiàn)在應(yīng)該讓主、備節(jié)點(diǎn)相互之間通通氣了。判斷data guard是否搭建成功有兩個標(biāo)準(zhǔn),一個是看主備節(jié)點(diǎn)的日志是否能夠同步,一個是看主備之間是否能夠順利切換,完成角色轉(zhuǎn)換。下面就要開始主備日志同步的過程:
1,在主節(jié)點(diǎn)進(jìn)行日志切換:
SQL> alter system switch logfile;
System altered.
2,查看當(dāng)前歸檔日志數(shù)量:
SQL> select name from v$archived_log;
NAME
--------------------------------------------------------------------------------
/arch/1_2_697298091.dbf
/arch/1_3_697298091.dbf
/arch/1_4_697298091.dbf
/arch/1_5_697298091.dbf
/arch/1_6_697298091.dbf
/arch/1_7_697298091.dbf
/arch/1_8_697298091.dbf
10gstandby
10gstandby
10gstandby
10gstandby
10gstandby
10gstandby
10gstandby
14 rows selected.
這個時候出現(xiàn)了七行10gstandby,對應(yīng)備節(jié)點(diǎn)下同步過去的日志,數(shù)量和主節(jié)點(diǎn)下歸檔日志相同,說明主備日志同步成功。如果還不放心,可以到備節(jié)點(diǎn)查看歸檔日志的同步情況:
SQL> select name from v$archived_log;
NAME
--------------------------------------------------------------------------------
/arch/1_2_697298091.dbf
/arch/1_3_697298091.dbf
/arch/1_4_697298091.dbf
/arch/1_5_697298091.dbf
/arch/1_6_697298091.dbf
/arch/1_7_697298091.dbf
/arch/1_8_697298091.dbf
ok,這樣主、備節(jié)點(diǎn)就日志同步了。
這是在比較順利的情況下,如果主備節(jié)點(diǎn)無法同步日志,首先要看兩個節(jié)點(diǎn)之間通訊是不是有問題,這可以通過tnsping來實(shí)現(xiàn),例如:
$ tnsping 10gpri
TNS Ping Utility for HPUX: Version 10.2.0.1.0 - Production on 15-SEP-2009 09:58:22
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 128.199.36.152)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ora)))
OK (0 msec)
再有,可以通過執(zhí)行命令:
alter system set log_archive_dest_state_2='defer' scope=memory;
alter system set log_archive_dest_state_2='enable' scope=memory;
來嘗試是否有好轉(zhuǎn)。
如果這兩個步驟執(zhí)行了都沒有辦法,那就要仔細(xì)查看alert日志文件,看里面都有些什么報錯信息,再具體問題具體分析了。
finished , over /
refer :
[oracle@standby admin]$ cat listener.ora
# LISTENER.ORA Network Configuration File: /opt/oracle/product/9.2.0/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/oracle/product/9.2.0)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = primary)
(ORACLE_HOME = /opt/oracle/product/9.2.0)
(SID_NAME = primary)
)
)
[oracle@eygle admin]$ cat listener.ora
# LISTENER.ORA Network Configuration File: /opt/oracle/product/9.2.0/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = eygle)(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = primary)
(ORACLE_HOME = /opt/oracle/product/9.2.0)
(SID_NAME = primary)
)
)
關(guān)于物理方式下怎樣建立oracle data guard問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。