Oracle資料庫(DataGuard)遷移方案(中)

龍山游龍發表於2023-04-19

第一部分 部署主備庫DG

第1部分 

1.1 DG搭建步驟

步驟

實施內容

Step 1

主庫引數配置

Step 2

備庫引數配置

Step 3

資料第一次同步

Step 4

備機新增oracle服務

Step 5

主備切換

   

1.2 主庫引數配置

主庫引數配置包括確認歸檔是否開啟,force_logging是否開啟,修改主庫引數檔案,新增網路連線串等等一系列的主庫配置資訊。

3.2.1 開啟資料庫force_logging

檢查是否開啟了force_logging:

SQL> SELECT FORCE_LOGGING FROM V$DATABASE;
FOR
---
YES

//如果狀態為YES,則已經開啟,如果狀態為NO,則參考下面步驟:

SQL> ALTER DATABASE FORCE LOGGING;

3.2.3 新增網路連線串

網路連線串用於連線主備兩端資料庫,傳輸歸檔等作用,在RAC環境下,具體需要配置如下幾個:一號節點連線串,二號節點連線串,備端連線串,詳細配置資訊如下:

Shell> su – oracle
Shell> cd $ORACLE_HOME/network/admin
Shell> vi tnsnames.ora //新增如下資訊:(如果已存在以下連線串,酌情考慮新增刪除)
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.17.11)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.17.13)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
 
ORCL_DG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.101)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.103)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

3.2.4 修改主庫引數檔案

備份引數檔案(方便修改引數出現問題後及時回退)。

Shell> su - oracle
Shell> sqlplus "/ as sysdba"
SQL> create pfile='/tmp/initORCL.ora' from spfile;
SQL> alter system set log_archive_config='dg_config=(ORCL,ORCL_DG)' sid='*';
SQL> alter system set log_archive_dest_3='service=ORCL_DG valid_for=(online_logfiles,primary_role) db_unique_name=ORCL_DG' sid='*';
SQL> alter system set  LOG_ARCHIVE_DEST_STATE_3=enable sid='*';

3.2.5 建立standby redo log檔案

standby redo log 作用在備庫,用於接收從主庫傳過來的日誌資訊,在主庫部署主要是為了方便日後的主備切換。

建立適當數量的Standby Redo Log組數,公式如下:

1. 如果主庫是單例項資料庫:Standby Redo Log組數=主庫日誌組總數+1

2. 如果主庫是RAC資料庫:Standby Redo Log組數=(所有節點中日誌組數最大值 + 1) * RAC節點數

3. 大小和生產庫redo日誌組大小一致

alter database add standby logfile thread 1 group 31 '+DATADG' size 500M;
alter database add standby logfile thread 1 group 32 '+DATADG' size 500M;
alter database add standby logfile thread 1 group 33 '+DATADG' size 500M;
alter database add standby logfile thread 1 group 34 '+DATADG' size 500M;
alter database add standby logfile thread 2 group 35 '+DATADG' size 500M;
alter database add standby logfile thread 2 group 36 '+DATADG' size 500M;
alter database add standby logfile thread 2 group 37 '+DATADG' size 500M;
alter database add standby logfile thread 2 group 38 '+DATADG' size 500M;

 

3.2.6 複製備庫所需檔案

建立standby端所需要的引數檔案:

Shell> su - oracle
Shell> sqlplus "/ as sysdba"
SQL> create pfile='/home/oracle/initorcl.ora' from spfile;

   

複製靜態引數檔案:

Shell> su – oracle
Shell> cd $ORACLE_HOME/dbs
Shell> scp initorcl.ora oracle@XXX.XXX.XXX.XXX:`$ORACLE_HOME/dbs`

   

複製密碼檔案:

Shell> su – oracle
Shell> cd $ORACLE_HOME/dbs
Shell> scp orapw<sid> oracle@XXX.XXX.XXX.XXX:`pwd`

   

複製網路連線串檔案:

Shell> su – oracle
Shell> cd $ORACLE_HOME/network/admin
Shell> scp tnsnames.ora oracle@XXX.XXX.XXX.XXX:`pwd`

   

 

1.3 備庫引數配置

3.3.1 目標端環境資訊檢查

備庫需要確認如下資訊:

1. 資料庫軟體已經正常安裝,版本和生產保持一致

2. 監聽程式已經正常安裝,並且服務已啟動

3. 備庫所需檔案,均已經正常複製到指定位置

3.3.2 修改備庫引數檔案

將從生產庫複製過來的引數檔案進行編輯,並修改下列引數檔案(靜態引數檔案命名格式init<SID>.ora):

Shell> su – oracle
Shell> cd $ORACLE_HOME/dbs
Shell> vi initORCL.ora
*.audit_file_dest='/u01/app/oracle/admin/ORCL/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='12.2.0'
*.control_files='+DATA/ORCL/CONTROLFILE/current.279.1128270387','+LOG/ORCL/CONTROLFILE/current.274.1128270387'#Restore Controlfile
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_name='ORCL'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
ORCL1.instance_number=1
ORCL2.instance_number=2
*.local_listener='-oraagent-dummy-'
*.log_archive_config='dg_config=(ORCL,ORCL_DG)'
*.log_archive_dest_1='location=+LOG'
*.log_archive_dest_3='service=ORCL valid_for=(online_logfiles,primary_role) db_unique_name=ORCL'
*.log_archive_dest_state_3='DEFER'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=4250m
*.processes=2000
*.remote_login_passwordfile='exclusive'
*.sga_target=18750m
*.standby_file_management=auto
*.db_unique_name='ORCL_dg'
*.fal_server=ORCL
*.fal_client=ORCL_dg
ORCL2.thread=2
ORCL1.thread=1
ORCL1.undo_tablespace='UNDOTBS1'
ORCL2.undo_tablespace='UNDOTBS2'

   

注:備庫引數檔案中,必須要建立對應的adump審計日誌目錄:

*.audit_file_dest= /u01/app/oracle/admin/ORCL/adump

 

3.3.3 監聽新增靜態註冊

su – oracle
vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
  (SID_DESC =
      (GLOBAL_DBNAME = ORCL_DG)
      (ORACLE_HOME = /u01/app/oracle/product/12.2/db_1)
      (SID_NAME = ORCL_DG)
    )
  )
 
LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.101)(PORT = 1521))
  )

啟動靜態監聽

Lsnrctl start listener

1.4 資料全量同步

使用duplicate線上複製技術,將源端生產庫同步至目標環境,如下:

Shell> rman target sys/xxx@ORCL_DG auxiliary sys/xxx@ORCL
RMAN> duplicate target database for standby from active database nofilenamecheck;

 

1.5 啟動DG同步

開啟MRP程式,備庫資料前滾,開始同步:

SQL> alter database recover managed standby database disconnect from session;
或者
SQL> alter database recover managed standby database using current logfile disconnect from session;

檢查DG同步程式狀態:

SQL> select  process, status,sequence#,block#,blocks, delay_mins from v$managed_standby;

檢查DG日誌同步延時情況:

SQL> select thread#,max(sequence#) from gv$archived_log group by thread#;
SQL> select thread#,max(sequence#) from gv$archived_log where applied='YES' group by thread#;

 

第二部分 註冊資料庫資訊

將spfile建立至ASM共享磁碟中,再使用ASM中的spfile啟動資料庫例項。

SQL> create spfile='+DATA/ORCL_DG/spfileorcl.ora' from pfile;

修改RAC兩節點預設位置的pfile檔案:

1節點:

Shell> cd $ORACLE_HOME/dbs
Shell> vi initorcl1.ora
spfile='+DATA/ORCL_DG/spfileorcl.ora'

2節點:

Shell> cd $ORACLE_HOME/dbs
Shell> vi initorcl2.ora
spfile='+DATA/ORCL_DG/spfileorcl.ora'

重啟兩節點資料庫例項:

1節點啟動MRP程式恢復同步

SQL> shutdown immediate;
SQL> startup
SQL> alter database recover managed standby database using current logfile disconnect from session;

2節點只需啟動

SQL> shutdown immediate;
SQL> startup

將資料庫資訊註冊至叢集:

Shell> srvctl add database -d ORCL_DG -o /u01/app/oracle/product/12.2/db_1 -p +DATA/ORCL_DG/spfileorcl.ora
Shell> srvctl add instance -d ORCL_DG -i ORCL1 -n racdb1
Shell> srvctl add instance -d ORCL_DG -i ORCL2 -n racdb2
Shell> srvctl start database -d ORCL_DG

 

第三部分 備庫讀寫模式開啟

將備庫切換snapshot standby模式,此時備庫為讀寫模式,業務人員可以對應用程式進行通測,檢查不相容等問題並處理。由於這類操作均在備庫進行,並不會對主庫和生產業務造成任何影響。

第2部分 

第3部分 

3.1 備庫停止MRP程式

SQL> alter database recover managed standby database cancel;
SQL> shutdown immediate;
SQL> startup mount;

 

3.2 切換為snapshot standby

SQL> alter database convert to snapshot standby;
SQL> alter database open;
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE

 

3.3 切換為physical standby

如果是RAC環境,只保留一個節點,其他節點關閉。確保是當前節點為mount狀態。執行下列命令進行切換:

SQL> alter database convert to physical standby;

切換完成後資料庫會自動dismount,因此需要重啟資料,然後啟動redo apply。具體操作如下:

SQL> shutdown immediate
SQL> startup mount;
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile disconnect from session;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30310891/viewspace-2946956/,如需轉載,請註明出處,否則將追究法律責任。

相關文章