DataGuard之DG環境搭建
DG 環境搭建
1.設定歸檔模式
DG環境的搭建必須要把資料庫啟動到歸檔模式,並且為了避免開發人員使用nologging語句,我們還要把資料庫設定為force logging。
檢視資料庫是否執行在歸檔模式:
#su - oracle
$sqlplus / as sysdba
SQL>archive log list;
如圖所示,資料庫執行在非歸檔模式,下面我們開始操作,把資料庫修改為歸檔模式:首先關閉資料庫
SQL>shutdown immediate;
啟動資料庫到mount狀態下
SQL>startup mount;
SQL>select open_mode from v$database;
(查詢結果必須是MOUNTED哦,如果輸出的是其它方式,證明操作有誤,請重新關閉資料庫進行操作)
把資料庫修改為歸檔模式並開啟資料庫:
SQL>alter database archivelog;
SQL>alter database open;
SQL>archive log list;
圖中可以看到我們資料庫已經執行在歸檔模式了,其中Archive destination就是歸檔日誌存放的路徑,稍後我們會修改下存放路徑。
資料庫開啟後,我們需要把資料庫設為force logging:
SQL>alter database force logging;
SQL> select name,log_mode,force_logging from v$database;
2.新增standby 日誌
standby logfile的數量和大小均要與redo logfile相同
查詢主庫當前redo logfile的數量
SQL> select thread#,group#,members,bytes/1024/1024 from v$log;
從圖中可以看到我們主庫有三組大小為50M的redo logfile,故我們也需要建立同樣數量和大小的standby logfile:
SQL>alter database add standby logfile group 11('/data/oradata/ocrl/redo/redo11_stb01.log') size 50M;
SQL>alter database add standby logfile group 12('/data/oradata/ocrl/redo/redo12_stb01.log') size 50M;
SQL>alter database add standby logfile group 13 ('/data/oradata/ocrl/redo/redo13_stb01.log')size 50M;
SQL>select group#,thread#,sequence#,archived,status from v$standby_log;
3.設定資料庫口令檔案的使用模式
執行以下命令檢視remote_login_passwordfile的值是否EXCLUSIVE
SQL>show parameter remote_login_passwordfile
如果不是,執行以下命令進行設定,並且重啟資料庫,使其生效:
SQL>alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;
SQL>shutdown immediate;
SQL>startup;
4.引數設定
DG的搭建需要修改許多資料庫的引數,並且部分引數主備庫之間有點區別,這需要各位在配置過程細心一點。
a)主庫引數設定
SQL>show parameter db_unique_name
SQL>alter system set log_archive_config='dg_config=(ocrl,ocrls)' scope=spfile;
其中dg_config填寫的是主備庫的db_unique_name。
設定歸檔日誌的存放位置:
SQL>alter system set log_archive_dest_1='LOCATION=/data/oradata/ocrl/archivelogvalid_for=(all_logfiles,all_roles) db_unique_name=ocrl' scope=spfile;
SQL> alter system set log_archive_dest_2='SERVICE=ocrls ASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ocrls' scope=spfile;
注:第一個ocrls是tnsname.ora的連線名,第二個ocrls是DB_UNIQUE_NAME
啟用設定的日誌路徑:
SQL>alter system set log_archive_dest_state_1=enable scope=spfile;
SQL>alter system set log_archive_dest_state_2=enable scope=spfile;
設定歸檔日誌程序的最大數量(視實際情況調整):
SQL>alter system set log_archive_max_processes=30 scope=both;
設定standby庫從哪個資料庫獲取歸檔日誌(只對standby庫有效,在主庫上設定是為了在故障切換後,主庫可以成為備庫使用):
SQL>alter system set fal_server=ocrlsscope=both;
設定檔案管理模式,此項設定為自動,不然在主庫建立資料檔案後,備庫不會自動建立:
SQL>alter system set standby_file_management=auto scope=spfile;
啟用OMF功能:
SQL> alter system set db_create_file_dest='/data/oradata/ocrl/datafile' scope=spfile;
如果主備庫檔案的存放路徑不同,還需要設定以下兩個引數(需要重啟資料庫生效):
SQL> alter system set db_file_name_convert='/data/oradata/ocrls/datafile','/data/oradata/ocrl/datafile','/data/oradata/ocrls/tempfile','/data/oradata/ocrl/tempfile' scope=spfile;
SQL> alter system set log_file_name_convert='/data/oradata/ocrls/redo','/data/oradata/ocrl/redo' scope=spfile;
這步路徑的先後順序在主備庫上的設定是不一樣的,大家要注意!
b)備庫引數設定
完成了以上步驟後,通過以下命令生成一個pfile檔案給備庫使用:
SQL>create pfile from spfile;
開啟生成的檔案,修改部分引數,具體如下:
*.audit_file_dest='/u01/app/oracle/admin/ocrls/adump'
*.audit_trail='db'
*.compatible='12.1.0.2.0'
*.control_files='/data/oradata/ocrls/control/control01.ctl','/data/oradata/ocrls/control/control02.ctl'#Restore Controlfile
*.db_block_size=8192
*.db_create_file_dest='/data/oradata/ocrls/datafile'
*.db_domain=''
*.db_file_name_convert='/data/oradata/ocrl/datafile','/data/oradata/ocrls/datafile','/data/oradata/ocrl/tempfile','/data/oradata/ocrls/tempfile'
*.db_name='ocrl'//(這個保持跟主庫一樣,不能修改)
*.db_unique_name='ocrls' //(設定備庫的名字)
*. fal_server=ocrl
*.db_recovery_file_dest_size=10737418240
*.db_recovery_file_dest='/data/oradata/ocrls/flashback'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP)(SERVICE=ocrlsXDB)'
*.log_archive_config='dg_config=(ocrl,ocrls)'
*.log_archive_dest_1='LOCATION=/data/oradata/ocrls/archivelog valid_for=(all_logfiles,all_roles) db_unique_name=ocrls'
*.log_archive_dest_2='SERVICE=ocrl ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ocrl'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=30
*.log_file_name_convert='/data/oradata/ocrl/redo','/data/oradata/ocrls/redo'
*.memory_target=718m
*.open_cursors=300
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
(配置引數的時候要注意,有些地方跟主庫的不一樣哦)
c)密碼檔案配置
密碼檔案是建立DG不可缺少的一部分,主庫的密碼檔案一般在$ORACLE_HOME/dbs,命名格式是:orapw+db_unique_name
上圖是主庫的密碼檔案,如果不存在此檔案,我們可以通過以下命令生成一個:
#su - oracle
$cd $ORACLE_HOME/dbs
$orapwdfile=orapwocrl password=oracle
我們將密碼檔案和剛才修改好的pfile一起拷貝到備庫的$ORACLE_HOME/dbs目錄下,並重命名密碼檔案的名字:
主庫上copy到備庫的方法
備庫上修改密碼檔名和引數檔案
5.listener.ora與tnsnames.ora配置
這兩個檔案均在$ORACLE_HOME/network/admin目錄下,如果沒有,可以自行建立一下
a)備庫配置
listener.ora內容如下:
LISTENER=
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.180.44)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521))
)
)
SID_LIST_LISTENER=
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ocrls)
(ORACLE_HOME =/u01/app/oracle/product/12.1.0/db_1)
(SID_NAME = ocrls)
)
)
tnsname.ora內容如下:
ocrls =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL= TCP)(HOST = 192.168.180.44)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME =ocrls)
)
)
重啟一下監聽:
$lsnrctl stop
$lsnrctl start
b)主庫配置
listener.ora內容如下:
LISTENER=
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.180.44)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521))
)
)
SID_LIST_LISTENER=
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ocrls)
(ORACLE_HOME =/u01/app/oracle/product/12.1.0/db_1)
(SID_NAME = ocrls)
)
)
tnsname.ora內容如下:
ocrl =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL= TCP)(HOST = 192.168.180.43)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME =ocrl)
)
)
ocrls =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL= TCP)(HOST = 192.168.180.44)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME =ocrls)
)
)
執行以下命令重啟監聽,使配置生效:
$lsnrctl stop
$lsnrctl start
做完以上配置後,在主備庫上執行以下命令,確保兩個主機之間網路相通:
$tnsping ocrl
$tnsping ocrls
備庫上執行
6.目錄建立
引數和網路配置好後,我們需要為備庫dump檔案建立相應的目錄(對照主庫$ORACLE_BASE/admin):
ocrls:/home/[email protected]>mkdir -p $ORACLE_BASE/admin/ocrls/adump
ocrls:/home/[email protected]>mkdir -p $ORACLE_BASE/admin/ocrls/dpdump
為資料庫檔案建立目錄(就是之前db_file_name_convert和log_file_name_convert的目錄)
ocrls:/data/oradata/[email protected]>mkdir -p/data/oradata/ocrls/redo/
ocrls:/data/oradata/[email protected]>mkdir -p/data/oradata/ocrls/datafile/
ocrls:/data/oradata/[email protected]>mkdir -p /data/oradata/ocrls/control/
7.RMAN複製建立standby庫準備工作都完成了,那我們可以開始standby庫的建立了。
注:以下操作在備庫完成
a)檔案複製先,我們使用之前修改的pfile把備庫啟動到nomount狀態,生成spfile:
$echo $ORACLE_SID (確認SID是否我們設定的)
SQL> startup nomount pfile='/u01/app/oracle/product/12.1.0/db_1/dbs/initocrls.ora'
SQL> create spfile from pfile;
SQL>shutdown immediate;
SQL>exit;
從spfile啟動複製資料檔案,在備庫上操作
ocrls:/home/[email protected]>rman target sys/[email protected] auxiliary sys/[email protected]
確認我們已經連線上主庫和備庫後,執行以下命令:
RMAN> duplicate target database for standby from active database;
命令執行完後,可以看到主庫在開始複製檔案到備庫中
耐心等待任務的完成,如果中間有錯誤導致異常退出,需要根據錯誤資訊進行分析。
以下表示執行成功:
複製完成後,開啟資料庫開啟實時同步:
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile
disconnect from session;
檢視資料庫狀態
登陸到主庫
$sqlplus / as sysdba
SQL>select database_rolefrom v$database;
登入到備庫:
$sqlplus / as sysdba
SQL>select database_rolefrom v$database;
檢查歸檔日誌是否能正常傳輸(日誌的序號必須是一樣的):
主庫
SQL> selectSEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;
備庫
SQL> selectSEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;
主庫
SQL>alter system switch logfile;
SQL>select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;
備庫
SQL> select max(sequence#)from v$archived_log;
這樣,我們的DG已經配置成功了!
如果有配置錯誤還請不嗇指出,歡迎加入oracle qq群: 425614362