這是在本地虛擬機上搭建的DATAGUARD,一主一備,因爲之前是用word寫的文檔,所以就保留格式,直接拷貝過來了!
SQL> select * from v$version
2 /
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0
Production
操作系統信息
[oracle@oraprimary admin]$ cat /etc/centos-release CentOS release 6.8 (Final) |
host 設置
主庫備庫一致
[oracle@oraprimary admin]$ cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.80.135 oraprimary 192.168.80.136 oradg |
主庫sql*net 設置
listener
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl_prd) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1) (SID_NAME = orcl) ) )
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oraprimary)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
ADR_BASE_LISTENER = /u01/app/oracle |
tns 設置
ORCL_PRD = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oraprimary)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl_prd) ) )
ORCL_DG = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oradg)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl_dg) ) ) |
備庫listener
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl_dg) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1) (SID_NAME = orcl) ) )
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oradg)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) |
tns設置
[oracle@oradg admin]$ cat tnsnames.ora # tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora # Generated by Oracle configuration tools.
ORCL_DG = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oradg)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl_dg) ) )
ORCL_PRD = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oraprimary)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl_prd) ) )
|
主庫db_name的設置
注意 db_name 保持一致,db_unique_name區分開,在後面的初始化參數文件,會提到這一點
SQL> show parameter db_name
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_name string orcl SQL> show parameter db_unique_name
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_unique_name string orcl_dg SQL> show parameter instance_name
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ instance_name string orcl SQL> show parameter service_name
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string orcl_dg |
主庫上配置
開啓強制歸檔
alter database force logging
SQL> select open_mode,log_mode,force_logging,flashback_on from v$database;
OPEN_MODE LOG_MODE FOR FLASHBACK_ON -------------------- ------------ --- ------------------ READ WRITE ARCHIVELOG YES NO
|
配置log_archive_config的歸檔設置
SQL> alter system set log_archive_config= 'dg_config=(orcl_prd,orcl_dg)';
System altered.
SQL>
alter system setlog_archive_dest ='LOCATION= /u01/app/archive_log/ valid_for=(all_logfiles,all_roles) db_unique_name=orcl_prd' scope=spfileSQL>
2 ;
System altered.
注意上面的log_archive-dest 和後面的 dest-1 或者dest_2是衝突的。只能重置爲空。
SQL> alter system setlog_archive_dest_1='LOCATION=/u01/app/archive_log/ valid_for=(all_logfiles,all_roles) db_unique_name=orcl_prd'scope=spfile
2 /
System altered.
這個命令指定快速恢復區作爲歸檔位置,此歸檔位置用於在所有數據庫角色下歸檔所有的日誌文件。官方文檔裏說使用 valid_for=(online_logfiles, all_roles),這將導致備庫無法歸檔備用日誌文件,因爲它們不是在線日誌。但如果使用 all_logfiles 選項,主備庫將都能歸檔在線以及備用日誌。如果你想在備庫進行備份,並同時備份歸檔日誌的話,必須使用 all_logfiles。
|
設定redo傳輸日誌的路徑
SQL> alter system set log_archive_dest_2= 'service=orcl_dg lgwr syncvalid_for=(online_logfiles,primary_role) db_unique_name=orcl_dg';
System altered.
SQL> alter system setfal_server='orcl_dg'
2 /
System altered.
SQL> show parameter fal_server
NAME TYPE VALUE
----------------------------------------------- ------------------------------
fal_server string orcl_dg
該參數的解釋:
FAL_SERVER
specifies the FAL (fetch archive log)server for a standby database. The value is an Oracle Net service name, whichis assumed to be configured properly
on the standby database system to point tothe desired FAL server.
主庫增加standby 日誌
SQL> alter database add standby logfile group 5 ('/u01/app/oracle/oradata/orcl_prd/redo05.log') size 50m;
Database altered.
SQL> alter database add standby logfile group 6 ('/u01/app/oracle/oradata/orcl_prd/redo06.log') size 50m;
Database altered.
SQL> desc v$logfile Name Null? Type ----------------------------------------- -------- ---------------------------- GROUP# NUMBER STATUS VARCHAR2(7) TYPE VARCHAR2(7) MEMBER VARCHAR2(513) IS_RECOVERY_DEST_FILE VARCHAR2(3)
SQL> select group#,type,member from v$logfile 2 /
GROUP# TYPE MEMBER ---------- ------- ------------------------- 3 ONLINE /u01/app/oracle/oradata/o rcl_prd/redo03.log
2 ONLINE /u01/app/oracle/oradata/o rcl_prd/redo02.log
1 ONLINE /u01/app/oracle/oradata/o rcl_prd/redo01.log
4 STANDBY /u01/app/oracle/oradata/o rcl_prd/redo04.log
GROUP# TYPE MEMBER ---------- ------- -------------------------
5 STANDBY /u01/app/oracle/oradata/o rcl_prd/redo05.log
6 STANDBY /u01/app/oracle/oradata/o rcl_prd/redo06.log
6 rows selected.
SQL> |
SQL> createpfile='/home/oracle/initdg.ora' from spfile
2 /
File created.
主庫:
[oracle@oradg dbs]$ cat initdg.ora orcl.__db_cache_size=448790528 orcl.__java_pool_size=4194304 orcl.__large_pool_size=12582912 orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment orcl.__pga_aggregate_target=427819008 orcl.__sga_target=637534208 orcl.__shared_io_pool_size=0 orcl.__shared_pool_size=159383552 orcl.__streams_pool_size=0 *.audit_file_dest='/u01/app/oracle/admin/orcl_prd/adump' *.audit_trail='db' *.compatible='11.2.0.4.0' *.control_files='/u01/app/oracle/oradata/orcl_prd/control01.ctl','/u01/app/oracle/oradata/orcl_prd/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='orcl' *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.fal_server='orcl_dg' *.log_archive_config='dg_config=(orcl_prd,orcl_dg)' *.log_archive_dest='' *.log_archive_dest_1='LOCATION=/u01/app/archive_log/ valid_for=(all_logfiles, all_roles) db_unique_name=orcl_prd' *.log_archive_dest_2='service=orcl_dg lgwr sync valid_for=(online_logfiles,primary_role) db_unique_name=orcl_dg' *.memory_target=1063256064 *.open_cursors=300 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.undo_tablespace='UNDOTBS1' [oracle@oradg dbs]$ |
備庫:
[oracle@oradg dbs]$ cat initorcl_dg.ora orcl.__db_cache_size=448790528 orcl.__java_pool_size=4194304 orcl.__large_pool_size=12582912 orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment orcl.__pga_aggregate_target=427819008 orcl.__sga_target=637534208 orcl.__shared_io_pool_size=0 orcl.__shared_pool_size=159383552 orcl.__streams_pool_size=0 -- 如果備庫沒有這些路徑,需要手動創建哦! *.audit_file_dest='/u01/app/oracle/admin/orcl_dg/adump' *.audit_trail='db' *.compatible='11.2.0.4.0' *.control_files='/u01/app/oracle/oradata/orcl_dg/control01.ctl','/u01/app/oracle/oradata/orcl_dg/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='orcl' *.db_unique_name='orcl_dg' *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.fal_server='orcl_prd' *.log_archive_config='dg_config=(orcl_prd,orcl_dg)' *.log_archive_dest='' *.log_archive_dest_1='LOCATION=/u01/app/archive_log/ valid_for=(all_logfiles, all_roles) db_unique_name=orcl_dg' *.log_archive_dest_2='service=orcl_prd lgwr sync valid_for=(online_logfiles,primary_role) db_unique_name=orcl_prd' *.memory_target=1063256064 *.open_cursors=300 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.undo_tablespace='UNDOTBS1' *.db_file_name_convert='/u01/app/oracle/oradata/orcl_prd','/u01/app/oracle/oradata/orcl_dg' *.log_file_name_convert='/u01/app/oracle/oradata/orcl_prd','/u01/app/oracle/oradata/orcl_dg' [oracle@oradg dbs]$ |
拷貝密碼文件到備庫服務器
[oracle@oraprimary dbs]$ scp [email protected]:/u01/app/oracle/product/11.2.0/dbhome_1/dbs
[email protected]'s password:
orapworcl 100% 1536 1.5KB/s 00:00
備庫創建spfile
SQL> select status from v$instance 2 /
STATUS ------------------------------------ STARTED
SQL> create spfile from memory 2 /
File created.
SQL> shutdown immediate; ORA-01507: database not mounted
ORACLE instance shut down. SQL> startup nomount; ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance ORACLE instance started.
Total System Global Area 1060585472 bytes Fixed Size 2260000 bytes Variable Size 671089632 bytes Database Buffers 381681664 bytes Redo Buffers 5554176 bytes |
備庫上遠程登錄主庫:
[oracle@oradg trace]$ sqlplus sys/Oracle123@orcl_prd as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Aug 4 14:45:28 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> |
主庫上:
[oracle@oraprimary admin]$ sqlplus sys/Oracle123@orcl_dg as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Aug 4 14:47:58 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> |
注意備庫和主庫的監聽都要啓動。
rman 同時登錄兩個數據庫
[oracle@oradg dbs]$ rman target sys/Oracle123@orcl_prd auxiliary sys/Oracle123@orcl_dg
Recovery Manager: Release 11.2.0.4.0 - Production on Fri Aug 4 16:07:01 2017
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1478939344) connected to auxiliary database: ORCL (not mounted)
RMAN> |
duplicate的過程
RMAN> duplicate target database for standby nofilenamecheck from active database;
Starting Duplicate Db at 04-AUG-17 using target database control file instead of recovery catalog allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=63 device type=DISK
這裏rman自己拷貝了密碼文件 contents of Memory Script: { backup as copy reuse targetfile '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapworcl' auxiliary format '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapworcl' ; } executing Memory Script
Starting backup at 04-AUG-17 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=198 device type=DISK Finished backup at 04-AUG-17 生產控制文件 contents of Memory Script: { backup as copy current controlfile for standby auxiliary format '/u01/app/oracle/oradata/orcl_dg/control01.ctl'; restore clone controlfile to '/u01/app/oracle/oradata/orcl_dg/control02.ctl' from '/u01/app/oracle/oradata/orcl_dg/control01.ctl'; } executing Memory Script
Starting backup at 04-AUG-17 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile copy copying standby control file output file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_orcl.f tag=TAG20170804T160937 RECID=1 STAMP=951149377 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01 Finished backup at 04-AUG-17
Starting restore at 04-AUG-17 using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: copied control file copy Finished restore at 04-AUG-17 mount數據庫 contents of Memory Script: { sql clone 'alter database mount standby database'; } executing Memory Script
sql statement: alter database mount standby database
contents of Memory Script: { set newname for tempfile 1 to "/u01/app/oracle/oradata/orcl_dg/temp01.dbf"; switch clone tempfile all; set newname for datafile 1 to "/u01/app/oracle/oradata/orcl_dg/system01.dbf"; set newname for datafile 2 to "/u01/app/oracle/oradata/orcl_dg/sysaux01.dbf"; set newname for datafile 3 to "/u01/app/oracle/oradata/orcl_dg/undotbs01.dbf"; set newname for datafile 4 to "/u01/app/oracle/oradata/orcl_dg/users01.dbf"; backup as copy reuse datafile 1 auxiliary format "/u01/app/oracle/oradata/orcl_dg/system01.dbf" datafile 2 auxiliary format "/u01/app/oracle/oradata/orcl_dg/sysaux01.dbf" datafile 3 auxiliary format "/u01/app/oracle/oradata/orcl_dg/undotbs01.dbf" datafile 4 auxiliary format "/u01/app/oracle/oradata/orcl_dg/users01.dbf" ; sql 'alter system archive log current'; } executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /u01/app/oracle/oradata/orcl_dg/temp01.dbf in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 04-AUG-17 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile copy input datafile file number=00001 name=/u01/app/oracle/oradata/orcl_prd/system01.dbf output file name=/u01/app/oracle/oradata/orcl_dg/system01.dbf tag=TAG20170804T160948 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:25 channel ORA_DISK_1: starting datafile copy input datafile file number=00002 name=/u01/app/oracle/oradata/orcl_prd/sysaux01.dbf output file name=/u01/app/oracle/oradata/orcl_dg/sysaux01.dbf tag=TAG20170804T160948 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:25 channel ORA_DISK_1: starting datafile copy input datafile file number=00003 name=/u01/app/oracle/oradata/orcl_prd/undotbs01.dbf output file name=/u01/app/oracle/oradata/orcl_dg/undotbs01.dbf tag=TAG20170804T160948 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 channel ORA_DISK_1: starting datafile copy input datafile file number=00004 name=/u01/app/oracle/oradata/orcl_prd/users01.dbf output file name=/u01/app/oracle/oradata/orcl_dg/users01.dbf tag=TAG20170804T160948 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01 Finished backup at 04-AUG-17
sql statement: alter system archive log current
contents of Memory Script: { switch clone datafile all; } executing Memory Script
datafile 1 switched to datafile copy input datafile copy RECID=1 STAMP=951149442 file name=/u01/app/oracle/oradata/orcl_dg/system01.dbf datafile 2 switched to datafile copy input datafile copy RECID=2 STAMP=951149442 file name=/u01/app/oracle/oradata/orcl_dg/sysaux01.dbf datafile 3 switched to datafile copy input datafile copy RECID=3 STAMP=951149442 file name=/u01/app/oracle/oradata/orcl_dg/undotbs01.dbf datafile 4 switched to datafile copy input datafile copy RECID=4 STAMP=951149442 file name=/u01/app/oracle/oradata/orcl_dg/users01.dbf Finished Duplicate Db at 04-AUG-17
RMAN> |
複製完成後:
數據庫在monut狀態
SQL> select open_mode,database_role,db_unique_name from v$database 2 /
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME -------------------- ---------------- ------------------------------ MOUNTED PHYSICAL STANDBY orcl_dg |
SQL> alter database open 2 /
Database altered. 啓動實時重做應用 SQL> alter database recover managed standby database using current logfile disconnect from session;
Database altered.
以只讀方式打開數據庫 SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME -------------------- ---------------- ------------------------------ READ ONLY WITH APPLY PHYSICAL STANDBY orcl_dg
SQL> |