Oracle之DataGurd(DG)環境搭建
DataGurd(DG)這個是什麼就無需在這裡費周張了,自行百度。公司會經常用的哦。
配置最大效能模式DG:
最大效能模式:
1、預設模式,提供主庫的最高可用效能
2、保證主庫在執行之中不會受到從庫的干擾
優點:避免從庫對主庫的影響
缺點:不能保證資料不丟失(通過歸檔的方式,一直查一個arch,如果主庫徹底沒了,那麼redo中的資料會丟失),最低的情況,丟失一個redo組
步驟如下
1.前期規劃
2.配置網路監聽
3.修改引數檔案
4.rman duplicate 複製資料庫
5.啟動除錯資料庫
6.測試
1.規劃
主庫(1.1.1.11):
db_name orcl
db_unique_name orcl_pd
service_name orcl
instance_name orcl
本地歸檔路徑 /home/oracle/orcl_arclog
tnsnames to_sd --配置去備庫的tns
備庫(1.1.1.10):
db_name orcl 資料庫名要一樣
db_unique_name orcl_sd 在一個dg環境裡面,每一個成員的名字。
servicer_name vicdb
instance_name vicdb 例項名可以不一樣
本地歸檔路徑 /home/oracle/vicdb_arclog
tnsnames to_pd --配置去主庫的tns
2.配置網路監聽
基礎配置,配置兩邊的oracle net,保證兩邊能互通(需要使用靜態註冊),這步不過下面的基本沒戲。
位置:/oracle/app/db/network/admin。
主庫上的listener配置
cat listener.ora SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME =orcl) (ORACLE_HOME = /oracle/app/db) (SID_NAME = orcl) ) ) LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 1.1.1.11)(PORT = 1521)) ) ADR_BASE_LISTENER = /oracle/app
從庫上的listener配置
cat listener.ora SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = vicdb) (ORACLE_HOME = /oracle/app/db) (SID_NAME = vicdb) ) ) LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 1.1.1.10)(PORT = 1521)) ) ADR_BASE_LISTENER = /oracle/app
兩邊使用相同的tnsnames.ora
cat tnsnames.ora
to_sd =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 1.1.1.10)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = vicdb)
)
)
to_pd =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 1.1.1.11)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
3.修改引數檔案
在主庫上的配置(必須在歸檔模式)
建立目錄
mkdir /home/oracle/orcl_arclog
配置force logging
alter database force logging;
SQL> select FORCE_LOGGING from v$database;
FORCE_
------
YES
新增引數
樣板需要替換
db_unique_name='主庫唯一名'
log_archive_config='dg_config=(主庫唯一名,從庫唯一名)'
log_archive_dest_1='location=本地歸檔路徑 VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=主庫唯一名' --就是說不管你是主庫還是備庫,都把你的online放到“本地歸檔路徑”裡面去
log_archive_dest_2='service=去從庫的TNS valid_for=(online_logfiles,primary_role) db_unique_name=從庫唯一名' --當角色是主庫的時候,使用"去從庫的tns“傳送online_redolog
log_archive_dest_state_1=enable
log_archive_dest_state_2=enable
standby_file_management='auto'
SQL> create pfile from spfile;
vi initorcl.ora
*.audit_file_dest='/oracle/app/admin/vicdb/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/oracle/app/oradata/vicdb/control01.ctl','/oracle/app/flash_recovery_area/vicdb/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/oracle/app/flash_recovery_area'
*.db_recovery_file_dest_size=4039114752
*.diagnostic_dest='/oracle/app'
*.memory_target=0
*.open_cursors=300
*.pga_aggregate_target=10485760
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=532676608
*.undo_tablespace='UNDOTBS1'
db_unique_name='orcl_pd'
log_archive_config='dg_config=(orcl_pd,orcl_sd)'
log_archive_dest_1='location=/home/oracle/orcl_arclog VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl_pd'
log_archive_dest_2='service=to_sd valid_for=(online_logfiles,primary_role) db_unique_name=orcl_sd'
log_archive_dest_state_1=enable
log_archive_dest_state_2=enable
standby_file_management='auto'
重啟據庫然後使用pfile啟動;
也可以如下
SQL> CREATE SPFILE FROM PFILE;
SQL> STARTUP OPEN;
從庫上的配置如下:
新增如下引數,需要替換
db_name='需要同主庫一樣'
db_unique_name='從庫唯一名'
log_archive_config='dg_config=(主庫唯一名,從庫唯一名)'
log_archive_dest_1='location=本地歸檔路徑 valid_for=(all_logfiles,all_roles) db_unique_name=從庫唯一名' ## 這裡的這個all_logfiles主要是為後面最大可用模式做準備
log_archive_dest_state_1=enable
standby_file_management='auto'
log_file_name_convert='主庫中日誌檔案的路徑','從庫上日誌檔案的路徑(自己定義)' ## 這個是用在rman複製時需要的,設定了這個就不需要做set new..
db_file_name_convert='主庫中資料檔案的路徑','從庫上資料檔案的路徑(自己定義)'
啟動到nomount狀態
vi initvicdb.ora
db_name='orcl'
db_unique_name='orcl_sd'
log_archive_config='dg_config=(orcl_pd,orcl_sd)'
log_archive_dest_1='location=/home/oracle/vicdb_arclog valid_for=(all_logfiles,all_roles) db_unique_name=orcl_sd'
log_archive_dest_state_1=enable
standby_file_management='auto'
log_file_name_convert='/oracle/app/oradata/vicdb','/oradata/vicdb'
db_file_name_convert='/oracle/app/oradata/vicdb','/oradata/vicdb'
SQL> CREATE SPFILE FROM PFILE;
SQL> STARTUP nomount pfile='initvicdb.ora';
注意:由於主庫原來的名字是vicdb,修改名字之後未有修改資料檔案位置,故還是/oracle/app/oradata/vicdb建立目錄
mkdir /home/oracle/vicdb_arclog
mkdir /oradata/vicdb
建立從庫密碼檔案
cd $ORACLE_HOME/dbs
orapwd file=orapwvicdb password=oracle force=y
4.rman duplicate 複製資料庫
使用新建立的引數檔案啟動主庫到open狀態,啟動從庫到nomount狀態(注意spfile的影響,可以mv掉對應的spfile)。
rman target sys/[email protected]_pd auxiliary sys/[email protected]_sd nocatalog
RMAN> duplicate target database for standby from active database; 一般預設引數
RMAN> duplicate target database for standby from active database nofilenamecheck; 如果從庫的資料庫的位置和主庫的位置一樣的話就要新增
nofilenamecheck檔名不檢查
看到這裡然後卡在這裡就可以在從機那裡看傳輸過來的檔案 記得開雙通道,多channel。
Starting backup at 30-JUL-15
using channel ORA_DISK_1
using channel ORA_DISK_2
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/oradata/vicl/system01.dbf
channel ORA_DISK_2: starting datafile copy
input datafile file number=00002 name=/oradata/vicl/sysaux01.dbf
.
.
.
.
datafile 1 switched to datafile copy
input datafile copy RECID=3 STAMP=886440698 file name=/oradata/vicl/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=4 STAMP=886440698 file name=/oradata/vicl/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=5 STAMP=886440698 file name=/oradata/vicl/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=6 STAMP=886440698 file name=/oradata/vicl/users01.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=7 STAMP=886440698 file name=/oradata/vicl/test_tspitr01.dbf
datafile 6 switched to datafile copy
input datafile copy RECID=8 STAMP=886440698 file name=/oradata/vicl/vic01
datafile 7 switched to datafile copy
input datafile copy RECID=9 STAMP=886440698 file name=/oradata/vicl/vic02
datafile 8 switched to datafile copy
input datafile copy RECID=10 STAMP=886440698 file name=/oradata/vicl/test01.dbf
Finished Duplicate Db at 30-JUL-15
完成
問題
常見問題:
(1)如果使用的是非catalog,在rman 連線時,加上nocatalog關鍵字,否則可能會報TARGET> begin :fhdbi := dbms_rcvcat.getDbid; end;的錯誤
(2) 在執行duplicate的時候,如果源庫和目標庫目錄相同,那麼在duplicate 時,需要加上nofilenamecheck
否則報錯
auxiliary file name/u01/app/oracle/oradata/dg/sysaux01.dbf conflicts with a file used by
thetarget database
(3)如果從庫的引數檔案是從主庫cp的,特別要注意controlfiles這個引數指定的路徑是否正確
(4) 主庫要在歸檔模式,否則報錯ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode
(5) 如果報如下錯誤,注意log_file_name_convert,及db_file_name_convert引數是否正確
RMAN-03002: failure of Duplicate Db command at 07/03/2014 21:21:23
RMAN-03015: error occurred in stored script Memory Script
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 07/03/2014 21:21:23
ORA-17628: Oracle error 19505 returned by remote Oracle server
alter database open read only;
6.如果報錯
RMAN-03002: failure of Duplicate Db command at 08/13/2014 17:20:29
RMAN-03015: error occurred in stored script Memory Script
RMAN-03009: failure of sql command on clone_default channel at 08/13/2014 17:20:29
RMAN-11003: failure during parse/execution of SQL statement: alter database mount standby database
ORA-01103: database name 'PROD' in control file is not 'PROD_PD'
檢查備庫中的db_name是否和主庫一致
7、如果有多個目錄需要做對映可以使用
db_file_name_convert='/oracle/app/oradata/vicdb','/oradata/vicdb','/oradata/xxx','/oradata/vicdb'
8. 如報使用者祕密錯誤,檢查兩個資料庫的sys密碼是否一樣
5.啟動除錯資料庫
從庫現在已經是mount的狀態
SQL> alter database open;
檢視後臺程序
SQL> select process,client_process,sequence#,status from v$managed_standby ;
PROCESS CLIENT_PROCESS SEQUENCE# STATUS
------------------ ---------------- ---------- ------------------------
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
啟動用於同步的程序mrp
--啟動mrp服務
SQL> alter database recover managed standby database disconnect from session;
--如果想停止mrp服務使用
SQL> alter database recover managed standby database cancel;
再次檢查後臺服務
SQL> select process,client_process,sequence#,status from v$managed_standby;
PROCESS CLIENT_P SEQUENCE# STATUS
--------- -------- ---------- ------------
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
RFS LGWR 27 IDLE
RFS UNKNOWN 0 IDLE
RFS N/A 0 IDLE
MRP0 N/A 27 WAIT_FOR_LOG
6.測試
主庫上
SQL> create table dg_test as select * from scott.emp;
Table created.
SQL> insert into dg_test select * from dg_test;
14 rows created.
SQL> commit;
Commit complete.
SQL> alter system switch logfile; 主庫寫盤才會觸發MRP程序
System altered.
SQL>
從庫上
SQL> select sequence#,applied from v$archived_log;
SEQUENCE# APPLIED
---------- ------------------
5 YES
4 YES
6 YES
SQL> select * from dg_test; 資料同步過來了