One instance primary to RAC standbyDataGuard Configuration:
|
Primary |
standby |
Clusterware |
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit |
11g R2 Grid Infrastructure (11.2.0.4) |
Cluster Nodes |
Cltrac1 |
Srvrac1,srvrac2 |
DB_UNIQUE_NAME |
Test1 |
Test2 |
DB_NAME |
TEST1 |
Test1 |
DB_instance |
Test1 |
Test11,test22 |
DB_listener |
listener |
Listener2 |
DB storage |
ASM |
Linux file sys |
ASM diskgroup for DB files |
DATA |
|
ORACLE_HOME |
/bee/app/oracle/product/11.2.0/db_1 |
/bee/app/oracle/product/11.2.0/db_1 |
OS |
CentOS release 6.4 (Final) |
CentOS release 6.4 (Final) |
1. 主庫必須為歸檔模式,修改主庫為歸檔模式的方法:
SQL>shutdown immediate
SQL>startup mount
SQL>alter database archivelog;
SQL>alter database open;
SQL>archive log list;
2. 啟用主庫的強(qiáng)迫日志功能
SQL> alter database force logging;
3. 當(dāng)主庫添加或刪除數(shù)據(jù)文件時,這些文件也會在備庫添加或刪除。啟用此功能的方法以下:
SQL> alter system set standby_file_management = 'AUTO';
4. 給主庫添加standby日志:
alterdatabase add standby logfile '/bee/app/oracle/oradata/test1/standby01.log' size50M;
alterdatabase add standby logfile '/bee/app/oracle/oradata/test1/standby02.log' size50M;
alter database add standby logfile'/bee/app/oracle/oradata/test1/standby03.log' size 50M;
5. 建密碼文件,并且設(shè)置參數(shù) REMOTE_LOGIN_PASSWORDFILE 為 EXCLUSIVE 或 SHARED。1般數(shù)據(jù)庫默許就有密碼文件,并且此參數(shù)默許為 EXECUSIVE。先檢查下這兩項(xiàng),如果不是默許,設(shè)置方法以下:
SQL>alter system set remote_login_passwordfile=exclusive scope=spfile;
OS> orapwd password=<sys 用戶密碼>
Scp mvorapwSID
6. 檢查數(shù)據(jù)庫的 db_unique_name 參數(shù)是不是設(shè)置。如果沒有,使用 alter system 進(jìn)行設(shè)置:
SQL> show parameter db_unique_name;
SQL> alter system set db_unique_name=some_namescope=spfile;
7. 配置歸檔位置:
alter system set log_archive_dest_1 ='location=/bee/app/oracle/archivelog valid_for=(all_logfiles, all_roles)db_unique_name=test1';
alter system set log_archive_dest_2 = 'service=test21 asyncvalid_for=(online_logfile,primary_role) db_unique_name=test2';
8. SQL> alter system setfal_server = 'test2';
SQL> alter system set log_archive_config ='dg_config=(test1,test2)';
9. 設(shè)置文件轉(zhuǎn)換方式:后面為本地寄存位置
altersystem set DB_FILE_NAME_CONVERT='+DATA/test2/datafile/','/bee/app/oracle/oradata/test1/'scope=spfile;
alter system setLOG_FILE_NAME_CONVERT='+DATA/test2/onlinelog/','/bee/app/oracle/oradata/test1/'scope=spfile;
10. createpfile='/tmp/test2_pfile.ora' from spfile;
11.
1. 我們要用 RMAN 的 duplicate from active database 命令創(chuàng)建備庫,需要配置靜態(tài)監(jiān)聽和 TNS 名,黃色部份是我手動添加的靜態(tài)監(jiān)聽,其余部份為數(shù)據(jù)庫原來的動態(tài)監(jiān)聽,兩節(jié)點(diǎn)都要添加:
[grid@srvrac2admin]$ cat listener.ora
LISTENER_TT=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_TT)))) # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))) # line added by Agent
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))) # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_TT=ON # line added by Agent
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =10.205.0.31)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1522))
)
)
SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = test1)
(ORACLE_HOME =/bee/app/oracle/product/11.2.0/db_1)
(SID_NAME = test22)
)
)
啟動時要帶上監(jiān)聽名:
[grid@srvrac2 admin]$ lsnrctl start LISTENER2
2. 添加tnsnames.ora
從庫節(jié)點(diǎn)1:
TEST1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =10.205.0.35)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test1)
)
)
TEST21 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =10.205.0.30)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test1)
)
)
從庫節(jié)點(diǎn)2:
TEST1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =10.205.0.35)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test1)
)
)
TEST21 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =10.205.0.31)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test1)
)
)
主庫:
test1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =10.205.0.35)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test1)
)
)
test21 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =10.205.0.30)(PORT = 1522))
(ADDRESS = (PROTOCOL = TCP)(HOST =10.205.0.31)(PORT = 1522))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVICE_NAME = test1)
(FAILOVER_MODE =
(TYPE = select)
(METHOD = basic)
(RETRIES = 200)
(DELAY = 5)
)
)
)
紅色的網(wǎng)絡(luò)服務(wù)名對應(yīng)配置log_archive_dest_2中的service
測試方法:
sqlplus sys/oracle@test21 as sysdba
3.
1. 建好了主庫的 pfile 后,將其復(fù)制到備庫服務(wù)器的相同位置,使用備庫的 SID 修改其名字。需要對 pfile 做以下修改:
根據(jù)你備庫的配置和文件位置,你可能需要修改AUDIT_FILE_DEST,CONTROL_FILES 和 DISPATCHERS 參數(shù)(或許還有其他需要修改的參數(shù))。
LOG_ARCHIVE_DEST_1參數(shù)中的 db_unique_name 修改成備庫的相應(yīng)唯1名(這里是 JED2)。
LOG_ARCHIVE_DEST_2參數(shù),修改成主庫對應(yīng)的服務(wù)名和數(shù)據(jù)庫唯1名(這里是 JED)。
FAL_SERVER參數(shù)修改指向主庫的服務(wù)名。
增加以下參數(shù):
db_unique_name=JED2
altersystem set standby_file_management = 'AUTO';
db_file_name_convert和 log_file_name_convert。如果主備庫的數(shù)據(jù)文件、日志文件位置不同,需要設(shè)置這兩個參數(shù)。
然后在備庫服務(wù)器上創(chuàng)建所需目錄結(jié)構(gòu)和修改相干文件
2. 如:
[oracle@srvrac1dbs]$ cat test2_pfile.ora
test1.__db_cache_size=883027968
test1.__java_pool_size=23554432
test1.__large_pool_size=30331648
test1.__pga_aggregate_target=673741824
test1.__sga_target=922122547
test1.__shared_io_pool_size=0
test1.__shared_pool_size=203979776
test1.__streams_pool_size=11777216
*.audit_file_dest='/bee/app/oracle/admin/test2/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='+DATA/test2/controlfile/control01.ctl','+DATA/test2/controlfile/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_name_convert='/bee/app/oracle/oradata/test1/','+DATA/test2/datafile/'
*.log_file_name_convert='/bee/app/oracle/oradata/test1/','+DATA/test2/datafile/'
*.db_name='test1'
*.db_unique_name='test2'
*.diagnostic_dest='/bee/app/oracle'
*.dispatchers='(PROTOCOL=TCP)(SERVICE=test2XDB)'
*.fal_server='test1'
*.log_archive_config='dg_config=(test1,test2)'
*.log_archive_dest_1='location=+DATA/test2/archivelogvalid_for=(all_logfiles, all_roles) db_unique_name=test2'
*.log_archive_dest_2='service=test1async valid_for=(online_logfile,primary_role) db_unique_name=test1'
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=300
*.pga_aggregate_target=1072693248
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=3218079744
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
3. 啟動備庫export ORACLE_SID=test11
startup nomount pfile='/bee/app/oracle/product/11.2.0/db_1/dbs/test2_pfile.ora'
4. 創(chuàng)建備庫,在從庫 RMAN 恢復(fù):
[oracle@srvrac1~]$ export ORACLE_SID=test11
[oracle@srvrac1 ~]$ rman target sys/oracle@test1 auxiliary sys/oracle@test21
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASENOFILENAMECHECK;
5. 啟動重做利用:
sql> alter database recover managed standbydatabase disconnect from session
或?qū)崟r同步ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENTLOGFILE DISCONNECT FROM SESSION;
6. 測試:
在主庫更新:
SQL>insert into test.test_table values (17,'jhpcc');
1 rowcreated.
SQL>commit;
Commitcomplete.
SQL>alter system archive log current;
System altered.
在備庫查看是不是同步過來,分析問題看兩邊的alert.log
sql> alter database recover managed standbydatabase cancel;
sql>alter database open read only;
sql>SQL> select * from test.test_table;
ID NAME
---------- ----------
17 jhpcc
7. 11g已支持活動備庫,可讓數(shù)據(jù)庫在只讀狀態(tài)下打開,同時啟動日志利用:
alter database recover managed standby databasedisconnect
8. createspfile='+DATA/cltdbhz1/spfilecltdbhz1.ora' from pfile='/bee/app/oracle/product/11.2.0/db_1/dbs/cltdbhz1_pfile.ora';
1. [oracle@srvrac2 dbs]$ catinittest22.ora
2. spfile='+DATA/test2/spfiletest2.ora
3. 從庫的第2個節(jié)點(diǎn)上, $ export ORACLE_SID=test22
$ sqlplus / as sysdba sql> startup mount;
4. srvctl add database -d test2 -ntest1 -o /bee/app/oracle/product/11.2.0/db_1 -p +DATA/test2/spfiletest2.ora -rphysical_standby -a DATA(oracle用戶履行)
5. srvctl add instance -d test2 -itest11 -n srvrac1
6. srvctl add instance -d test2 -itest22 -n srvrac2
7. srvctl start database -d test2
8. srvctl modify database -d test2-s mount
9. srvctl status database