1. 程式人生 > >DataGuard之DG環境搭建

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;


b)切換日誌測試

主庫

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