您好,登錄后才能下訂單哦!
物理方式下怎樣建立oracle data guard,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
物理方式下建立oracle data guard(一):前奏
前后折騰了一個星期左右時間,把物理方式下建立ORACLE data guard配好了,同事幫了不少忙,在此表示感謝。在這個過程中遇到了很多問題,有的問題很淺顯,一下就解決了;有的問題是因為粗心引起的,比如說在服務器參數文件里面少寫了一點,結果花很長時間來排錯;有的問題第一次碰到,解決了之后很興奮,因為又積累了經驗,就像上次配置HP MC雙機的時候碰到的那個問題,之前從未碰到過,這樣折騰一下倒還認識了kcmodule這么樣一個命令,附帶一些不同的內核參數。
在這之前也嘗試配置過data guard,參考過一些文檔書籍,最后以失敗告終,倒在主、備節點日志文件不能同步這個問題上再也回不得頭來。經過這一次,我發現網上很多參考文檔甚至業已出版的技術類書籍都是寫得含含糊糊不太完整的,很多應該特別指出的地方被他們給忽略了;很多可以省略的地方又花了大量的篇幅來解釋,這顯得沒有必要。
“RAC的原有參數不變,添加下列參數:
*.service.name=wxxr_rac“這一句里面的“service.name”應該是“service.names”才對,少寫了一個“s”,有時候就是這樣的,失之毫厘謬以千里,涉及到參數的地方更應該嚴謹一些。這樣的錯誤在實驗過程中我也碰到過一次,把整個人搞得很崩潰,所幸后來找到問題所在。
除此之外,主備節點切換的過程也寫得比較粗糙,有點一筆帶過的感覺,其實這部分恰恰是比較重要的。
在我看來,配置data guard過程中涉及比較重要的文件分別是:服務器參數文件、密碼文件、listener.ora文件以及tnsnames.ora文件,其中尤以服務器參數文件以及listener.ora最為重要,因為在這里要采取靜態方式來配置listener.ora文件,以往那種動態方式是行不通的,因為要保證備節點在mount方式下也能注冊到數據庫,動態方式下做不到這一點。
ORACLE data guard和ORACLE RAC都是當紅巨星,越發受人待見,在銀行、企業、政府機構等等中扮演著重要的角色。在
“RAC的強項在于解決單點故障和負載均衡,因此RAC方案常見于24*7的核心系統。但RAC方案中數據只有一份,盡管通過RAID等機制可以避免存儲故障,但是數據本身是沒有冗余的,容易形成單點故障。而Data Guard是通過冗余數據來提供數據保護的。通過日志同步機制保證冗余數據和主數據庫之間的同步,這種同步可以是實時、延時、同步、異步多種形式。常用于異地容災和小企業的高可用性方案。"
ORACLE data guard有兩種實現方式,一種是物理方式下的data guard,也就是我實驗中用到的,通過在備節點上同步主節點上的redo日志來實現;還有一種是邏輯方式下的data guard,通過在備節點上應用主節點上redo日志轉化而來的SQL語句實現日志同步。因為這種方法沒有物理方式使用普遍,所以我暫時先做物理方式下的data guard實驗,邏輯的以后再說。
下面進入正題。
物理方式下建立oracle data guard(二):環境
首先,操作系統,這里用到的HP rx8640服務器上的兩個分區,并分別創建“/dev/vg00/lv_oracle”文件系統并掛載到“/home/db/oracle"目錄下,接著創建“/dev/vg00/lv_arch”文件系統并掛載到“/arch”目錄下,作為歸檔日志存放的地方。創建完畢之后記得給目錄賦予正確的屬主(oracle:dba)以及權限,否則會有很大問題。
ORACLE版本這里用到的是10.2.0.1,之前第一次做實驗的時候沒有注意,挑選的兩個分區oracle版本不一致,一個節點的版本是10.2.0.1的,另一個節點的版本是10.2.0.3的。起初用RMAN進行備份還原到備節點的時候系統突然提醒數據需要升級,搞得我一愣一愣的,仔細檢查了一下才發現是數據庫版本不一致。雖說版本不一致也能做,情況好點就是這種情況,主節點oracle版本比備節點低,如果主節點oracle版本比備節點高就比較麻煩了。
再有一個是SID的問題,主、備節點我都把實例的SID設為ora,這樣做是為了方便,也可以兩邊實例名設為不一致。設為一致的好處是修改服務器參數文件的時候沒有那么麻煩,可修改之處變少,工作量變少,錯誤自然也變少了。
下面再次進入正題,首先在主、備節點的正確路徑分別安裝oracle10.2.0.1版本數據庫軟件(備節點不需要通過圖形界面單獨建立數據庫,通過從主節點恢復過來即可),然后通過圖形界面的dbca方式在主節點建庫。為了圖方便,滿足實驗效果,這里既不使用裸設備建庫也不使用ASM方式建庫,一切按照系統默認的方式往下走即可。
因為主節點需要設置為歸檔模式,這里我們可以在建庫的時候就指定成歸檔模式,并指定歸檔路徑為“/arch”,這樣就不用在數據庫建好之后再手工修改到歸檔模式下了,建好之后如下所示:
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(三):開工
下面設置主節點數據庫為force logging模式:
SQL> alter database force logging;
Database altered.
force logging存在的意義:使得Oracle無論什么操作都進行redo的寫入。
通過select語句可以查看:
SQL> select FORCE_LOGGING from v$database;
FOR
---
YES
因為剛建立數據庫,還沒有生成歸檔日志,我們可以手工進行日志切換來讓數據庫產生日志文件:
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
為備節點創建同樣大小的三組日志文件并檢驗:
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.
關閉數據庫,即將來到第一個重要步驟,修改服務器參數文件。
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
物理方式下建立oracle data guard(四):變化
新建立的數據庫是以服務器參數文件的形式啟動的,而我們要修改的是參數文件,這里簡單說說服務器參數文件跟參數文件的區別和聯系。服務器參數文件也就是spfileSID.ora,其內容是以二進制方式存在的,不能手工編輯;而參數文件即initSID.ora,其內容是以文本方式存在的,可以手工編輯,這里我就需要對參數文件進行修改。
通常說來,會有一個默認的參數文件init.ora,但這里我們需要的是initora.ora,如果沒有的話可以通過命令創建,如下所示:
SQL>create pfile='/home/db/oracle/10g/dbs/initora.ora' from spfile;
查看當前數據庫是以服務器參數文件還是參數文件方式啟動,可以通過命令進行查看,如下所示:
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /home/db/oracle/10g/dbs/spfile
ora.ora
如果VALUE下對應有文件,那說明是以spfile,即服務器參數文件的方式啟動。反之,則是以參數文件的方式啟動。前一篇文章停掉了數據庫,為的就是在修改參數文件之后,使用新修改的參數文件來啟動數據庫。
下面奉上修改之后的參數文件,修改之處以黑體字標明:
$ 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'
至于為什么添加并修改這些參數,官方文檔、別人的文檔、技術類書籍都有說,google或者百度或者百古虎一大把,我就不詳述了。總之,db_unique_name很重要,如果主、背節點的實例名都一樣,就要靠這個來區分了。
物理方式下建立oracle data guard(五):蛻變
接下來要做的,是以修改過的參數文件啟動數據庫并生成服務器參數文件,再讓數據庫以服務器參數文件的方式啟動數據庫:
1,使用修改過的參數文件將數據庫啟動到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,創建服務器參數文件:
SQL> create spfile from pfile='/home/db/oracle/10g/dbs/initora.ora';
File created.
3,以系統默認的服務器參數文件方式啟動數據庫:
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,創建密碼文件(如果數據庫建好之后存在的話,就不用再單獨建立密碼文件了):
$ 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
在這個地方我犯了低級錯誤,浪費了很多時間,這個在最后總結的時候來說。
下面就要提到監聽文件以及TNS文件了,放下一篇文章里面列個專題,因為這一步很重要。如果不做好,后果很嚴重。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
物理方式下建立oracle data guard(六):動靜
下面說一下監聽,這就是以前做實驗的時候被卡門時間最長的地方,也是《大話ORACLE RAC》作者沒有交代清楚的地方。很多文檔都提到了實驗做到一定程度要配置監聽和TNS,以方便主、備節點互通有無。但卻忽略提到一點那就是監聽也有動態監聽和靜態監聽之分,在oracle data guard實驗中我們必須要用到靜態監聽,否則實驗就沒法進行下去。
先抄摘一點有關動態監聽和靜態監聽的概念:
靜態監聽指實例啟動時讀取listener.ora配置文件,將實例和服務注冊到監聽程序。無論何時啟動一個數據庫,默認都有兩條信息注冊到監聽器中:實例和服務
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))
)
這是一個最簡單的靜態監聽配置文件,SID_LIST_LISTENER部分的GLOBAL_DBNAME表示向外提供的服務名,SID_NAME是提供注冊的實例。在tnsnames.ora文件中的CONNECT_DATA部分,可分別選擇SERVICE_NAME=Ora8或SID=test為客戶端提供連接。
動態注冊不需要顯示的配置listener.ora文件,實例啟動的時候,PMON進程根據instance_name,service_name參數將實例和服務動態注冊到listerer中。如果沒有設定instance_name,將使用db_name初始化參數值。如果沒有設定service_names,將拼接db_name和db_domain參數值來注冊監聽。
如果對上述一番話還是不太明白,我再簡單說一下一個最為關鍵的區別,在oracle data guard實驗中,有時候我們需要將備節點啟動到mount模式下,以此來接受主節點的redo日志文件完成自身的同步過程。而這個過程的前提就是兩者在網絡上要有一個互動,即你能凝望著我,我也能關切到你。如果是配置的動態監聽,只要有實例沒有啟動到open狀態,那就無法通過網絡將服務注冊到數據庫,而只有靜態監聽可以完成這個任務。很多文檔都指出需要修改listener.ora文件,但卻不貫徹什么是靜態監聽什么是動態監聽,所以具體操作起來就容易犯錯誤,繼而去懷疑是不是參數文件配置有問題,這可真是無妄之災。
下面顯示的是我配置的靜態監聽內容以及TNS文件內容:
$ 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)
)
)
和動態監聽所不同的是,這里手工指定了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)
)
)
兩個服務分別是10GPRI以及10GSTANDBY。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
物理方式下建立oracle data guard(七):測試
前面解釋了動態監聽和靜態監聽,下面要來實驗一把,看數據庫在mount狀態下是否能夠通過網絡注冊到數據庫,下面就是具體實施過程:
1,在開始之前有一點要注意的就是,監聽的開閉和數據庫的開閉還有一點關系。正確的順序是先啟動監聽,再講數據庫打開到mount的狀態下,如果要重做一次,就要先關閉數據庫,然后重啟監聽;
2,關閉主節點數據庫,并啟動到mount狀態下(到此為止,對備節點的操作還沒有開始):
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,啟動監聽:
$ 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
到這里可以看到監聽已經成功啟動。值得一提的是,在靜態監聽開啟的情況下,實例的狀態顯示為“UNKNOWN",而動態監聽開啟狀態下,實例的狀態應該顯示為“READY”。根據這一點也可以判斷監聽是以什么方式啟動。
4,測試以網絡方式注冊到數據庫:
$ 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可能仍然注冊不到數據庫,這就需要通過賦予sysdba給system用戶的命令來實現。
這一步成功了之后,后面的過程就比較好辦了。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
物理方式下建立oracle data guard(八):意外
前面那篇文章提到了在啟動靜態監聽、將數據庫啟動到mount模式下以網絡方式注冊數據庫,是比較順利的一種情況,之前還遇到了一個比較困惑的問題,下面就來討論一下這種情況。
之前在成功配置監聽文件、TNS文件,也將數據庫啟動到了mount狀態下,但死活就是無法通過網絡方式注冊到數據庫,出現下面這個報錯信息:
ORA-01031: insufficient privileges
提示沒有足夠的權限,有沒有搞錯?我是以sys用戶登陸,sys不就具有最高權限么?而且密碼并沒有輸入錯誤。仔細檢查了listener.ora以及tnsnames.ora文件,確認沒有任何問題。因為在另一個環境就是這樣設置的。嘗試查看一下擁有SYSDBA權限的用戶:
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
no rows selected.
看到這里,問題比較明朗了,密碼文件沒有起到作用。因為通過網絡注冊數據庫,是要讀取密碼文件的,而SYS是默認具有SYSDBA權限的,這里顯示不出來,說明密碼文件沒有被成功讀取,自然也就無法注冊到數據庫了。打個簡單的比喻,小明在一次語文期末考試之前想要作弊,作弊的方式是通過花點銀子去買一份答案,結果買到一份假答案,那考試自然是過不了關的了。此情此景,殊途同歸。
回憶一下系統建庫之后,默認生成了一個正確的密碼文件,但是我手賤,把這個文件給刪除了,重新創建了一個,并且命名為orapw10gstandby.ora。這個命名犯下兩個錯誤,這兩個錯誤也讓我重新審視對密碼文件規范化的認知程度。首先,密碼文件是沒有.ora后綴的;其次,后綴之前應該以標準的“orapwSID”方式命名。這樣一來,我刪除了這個錯誤命名的密碼文件,重新建立密碼文件:
orapwd file=/home/db/oracle/10g/dbs/orapwora password=oracle entries=10
重新在數據庫中查詢擁有SYSDBA的用戶:
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
這不,又重新回來了,再檢驗通過網絡注冊數據庫,一切正常,于是這個問題也算告一段落了。
之所以寫這么長一篇,還是為了強調密碼文件的重要性,往往我們忽視掉的地方恰恰是最值得重視的。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
物理方式下建立oracle data guard(九):寵幸
到現在為止我已經分不清我是在寫技術博客還是在寫生活日志了,或多或少摻入了個人感情,畢竟學習data guard時間不算短了,到現在才總算是有些柳暗花明。應該是才疏學淺,抑或是實在太笨,學東西慢,但看到有進展的時候還是抑制不住內心的激動的。閑話莫提,下面開始寵幸備節點,畢竟data guard這個軍功章有主節點的一半,也有備節點的一半。
主節點需要我們完成的步驟大致就是前面那些文章所提到的了,只剩下最終的切換測試過程。而備節點需要關注的體現在以下幾個方面:
目錄、參數文件、密碼文件、監聽文件、TNS文件、SID(這里繼續使用ora)
到這里,除了參數文件和監聽文件需要稍作改動,其他諸如密碼文件、TNS文件只需從主節點拷貝即可,目錄可以按照主節點相同的路徑進行手工創建,在unix下面也就是mkdir而已,更快一些,你可以用mkdir -p實現,下面是具體過程:
1,創建/home/db/oracle/oradata/ora主目錄以及主目錄下udump、adump、cdump、bdump等次目錄;
2,通過ftp方式拷貝主節點下密碼文件、TNS文件;
3,在主節點進行幾次日志切換,產生一定量的歸檔日志文件:
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,停掉主節點數據庫,拷貝歸檔日志文件以及所有數據文件
NOTE:拷貝到備節點之后注意查看屬主是否正確,否則修改如下:
root@hpvm3:/home/db/oracle/oradata/ora#chown oracle:dba *
5,將主節點數據庫啟動到mount模式下,創建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控制文件到備節點,并賦予正確屬主:
root@hpvm3:/home/db/oracle/oradata/ora#chown oracle:dba standby.ctl
7,修改備節點參數文件如下:
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,輪到咱備節點登上歷史舞臺了。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
物理方式下建立oracle data guard(十):革命
閑話不提,下面直入正題,看備節點建功立業:
1,以修改之后的參數文件為優秀代表,啟動備節點數據庫到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,創建服務器參數文件并關閉數據庫:
SQL> create spfile from pfile='/arch/initstandby.ora';
File created.
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
3,啟動修改后的監聽(只需要修改其中的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,啟動數據庫到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,測試以網絡方式注冊數據庫沒有問題:
$ 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,啟動主節點數據庫:
$ 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,重新關閉備節點數據庫并以standby方式啟動到mount狀態下:
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,將備節點更改到接受主節點redo日志模式下:
SQL> alter database recover managed standby database disconnect from session;
Database altered.
9,查看切換狀態:
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
如果顯示為TO PRIMARY,表示一切正常。
到此為止,備節點革命過程完畢,和主節點遙相呼應,要想完全接收主節點redo日志,就需要主節點做出一些動作了,連同主備切換放到下篇再說。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
物理方式下建立oracle data guard(十一):會師
備節點需要完成的工作已經完成,現在應該讓主、備節點相互之間通通氣了。判斷data guard是否搭建成功有兩個標準,一個是看主備節點的日志是否能夠同步,一個是看主備之間是否能夠順利切換,完成角色轉換。下面就要開始主備日志同步的過程:
1,在主節點進行日志切換:
SQL> alter system switch logfile;
System altered.
2,查看當前歸檔日志數量:
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.
這個時候出現了七行10gstandby,對應備節點下同步過去的日志,數量和主節點下歸檔日志相同,說明主備日志同步成功。如果還不放心,可以到備節點查看歸檔日志的同步情況:
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,這樣主、備節點就日志同步了。
這是在比較順利的情況下,如果主備節點無法同步日志,首先要看兩個節點之間通訊是不是有問題,這可以通過tnsping來實現,例如:
$ 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)
再有,可以通過執行命令:
alter system set log_archive_dest_state_2='defer' scope=memory;
alter system set log_archive_dest_state_2='enable' scope=memory;
來嘗試是否有好轉。
如果這兩個步驟執行了都沒有辦法,那就要仔細查看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)
)
)
關于物理方式下怎樣建立oracle data guard問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。