ASM 管理的 Oracle 19C 數據庫ADG的搭建及主備切換

-- 主備庫Grid及Oracle Home 目錄數據庫

/u01/app/grid/product/19.0.0/gihome_1session

/u01/app/oraInventoryoracle

/u01/app/oracle/product/19.0.0/dbhome_1app



-- 主庫開啓強制日誌模式、歸檔模式工具

SQL> alter database force logging;  日誌

SQL> select force_logging from v$database; server



SQL> archive log list; get

SQL> shutdown immediate it

SQL> startup mount io

SQL> alter database archivelog; 

SQL> alter database open;  



SQL> alter system set sga_max_size=180G scope=spfile;

SQL> alter system set sga_target=180G scope=spfile;

SQL> alter system set pga_aggregate_target=30G scope=spfile;



-- 主庫查詢添加 stby redo logfile

SQL> select group#, members, bytes from v$log; 

SQL> select member from v$logfile; 



SQL> alter database add standby logfile group 7 ('+DATA') size 1G;

SQL> alter database add standby logfile group 8 ('+DATA') size 1G;

SQL> alter database add standby logfile group 9 ('+DATA') size 1G;

SQL> alter database add standby logfile group 10 ('+DATA') size 1G;

SQL> alter database add standby logfile group 11 ('+DATA') size 1G;

SQL> alter database add standby logfile group 12 ('+DATA') size 1G;

SQL> alter database add standby logfile group 13 ('+DATA') size 1G;



-- 分別在主備庫配置監聽並啓動,直接使用 netmgr 工具生成 添加以下內容

$ vi listener.ora

-- prmy

SID_LIST_LISTENER =

 (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = ynsb)

      (ORACLE_HOME =/u01/app/oracle/product/19.0.0/dbhome_1)

      (SID_NAME = ynsb)

    )

 )

-- stby

SID_LIST_LISTENER =

 (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = ynsbsby)

      (ORACLE_HOME =/u01/app/oracle/product/19.0.0/dbhome_1)

      (SID_NAME = ynsbsby)

    )

 )

$ lsnrctl reload



-- 主備庫配置 tnsnames.ora 內容以下

$ vi tnsnames.ora 

LISTENER_YNSB =

  (ADDRESS = (PROTOCOL = TCP)(HOST = sjz)(PORT = 1521))



YNSB =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = sjz)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = ynsb)

    )

  )

  

YNSBSBY =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = sjz)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = ynsbsby)

    )

  )

-- 配置好後拷貝到備庫

$ scp $ORACLE_HOME/network/admin/ * oracle@172.30.2.54:$ORACLE_HOME/network/admin/



-- 在備庫建立必要的目錄,參考主庫的pfile中的路徑:

$ mkdir -p /u01/app/oracle/fast_recovery_area

$ mkdir -p /u01/app/oracle/oradata/... ... 

$ mkdir -p /u01/app/oracle/admin/ynsb/adump



ASMCMD> cd +DATA

ASMCMD> mkdir YNSBSBY

ASMCMD> cd YNSBSBY

ASMCMD> mkdir DATAFILE

ASMCMD> mkdir CONTROLFILE

ASMCMD> mkdir ONLINELOG

ASMCMD> mkdir PARAMETERFILE

ASMCMD> mkdir TEMPFILE



-- 主庫建立 pfile 文件並修改 pfile 以下參數

*.DB_NAME='ynsb'

*.DB_UNIQUE_NAME='ynsb'

alter system set standby_file_management='AUTO';

alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(ynsb,ynsbsby)'; -- DB_UNIQUE_NAME

alter system set LOG_ARCHIVE_DEST_1='LOCATION=/arch/archive_log/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ynsb';

alter system set LOG_ARCHIVE_DEST_2='SERVICE=YNSBSBY VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) LGWR AFFIRM SYNC DB_UNIQUE_NAME=ynsbsby';

*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'

*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'

*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

*.archive_lag_target=1800

*.LOG_ARCHIVE_MAX_PROCESSES=30

-- TNSNAME

alter system set FAL_SERVER='YNSB';

alter system set FAL_CLIENT='YNSBSBY';

alter system set LOG_FILE_NAME_CONVERT='/arch/archive_log/','/arch/archive_log/' scope=spfile;

alter system set DB_FILE_NAME_CONVERT='+DATA/YNSB/DATAFILE/','+DATA/YNSBSBY/DATAFILE/','+DATA/YNSB/TEMPFILE/','+DATA/YNSBSBY/TEMPFILE/' scope=spfile;



-- 將主庫的口令文件及修改後的參數文件copy到備庫

$ scp /home/oracle/temp.ora oracle@192.168.1.101:/home/oracle/temp.ora

$ scp $ORACLE_HOME/dbs/orapwdprmy oracle@192.168.1.101:$ORACLE_HOME/dbs/orapwdstby



-- 主庫的參數文件copy到備庫並修改以下參數

*.db_unique_name='ynsbsby'

*.log_archive_config='dg_config=(ynsb,ynsbsby)'

*.log_archive_dest_1='location=/arch/archive_log/ valid_for=(all_logfiles,all_roles) db_unique_name=ynsbsby'

*.log_archive_dest_2='service=YNSB valid_for=(online_logfiles,PRIMARY_ROLE) lgwr affirm sync db_unique_name=ynsb'

*.log_archive_dest_state_1=enable

*.log_archive_dest_state_2=enable

*.standby_file_management='auto'

*.fal_server='YNSB' -- TNSNAME

*.fal_client='YNSBSBY'



-- 用新參數重啓主數據庫:

SQL> shutdown immediate 

SQL> create spfile from pfile;

SQL> startup 

SQL> alter pluggable database pdborcl open;

 

-- 用 spfile 將備庫啓動到nomount 狀態

SQL> startup nomount pfile='/home/oracle/temp.ora'

SQL> create spfile='+DATA/YNSBSBY/PARAMETERFILE/spfileynsbsby.ora' from pfile='/home/oracle/temp.ora';

SQL> shutdown immediate 



-- 添加註冊數據庫到 ASM 中

$ srvctl add database -db ynsbsby -o /u01/app/oracle/product/19.0/db_1

$ srvctl modify database -db ynsbsby -role physical_standby -spfile '+DATA/YNSBSBY/PARAMETERFILE/spfileynsbsby.ora'



-- 開始進行 Active duplicate, 執行完畢後,數據庫自動進入mount狀態

$ rman target sys/oracle123@YNSB auxiliary sys/oracle123@YNSBSBY;

RMAN> duplicate target database for standby from active database;



-- 主庫配置

rman target /

CONFIGURE ARCHIVELOG DELETION POLICY TO applied on standby;



-- 打開備庫並並啓動 apply

SQL> select open_mode from v$database; 

SQL> alter database open;



-- 備庫是隻讀的

-- 查看主備庫 

SQL> select log_mode,open_mode ,database_role from v$database;



-- 備庫啓動 real-time apply:

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

SQL> select open_mode from v$database;



-- 驗證DG

SQL> alter system switch logfile;



-- 主備切換

-- 正常切換:主庫:

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

-- 備庫:

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;



-- 主切備

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL standby;

SQL> startup nomount;

SQL> alter database mount standby database;

SQL> ALTER DATABASE RECOVER MANAGED standby DATABASE DISCONNECT FROM SESSION;



-- 備切主

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO primary;

SQL> select status from v$instance;

SQL> alter database open;



-- 打開備庫

-- 注:如打開新備庫出現以下錯誤的解決方式:

SQL> alter database open;

SQL> alter database recover managed standby database cancel;

SQL> alter database open;

SQL> alter database recover managed stby database using current logfile disconnect ; 

-- 注意:切換後驗證DG



-- 主備啓停

-- 先啓動備庫:

$ lsnrctl start

SQL> STARTUP MOUNT;

SQL> ALTER DATABASE OPEN READ ONLY;

SQL> ALTER DATABASE RECOVER MANAGED standby DATABASE DISCONNECT FROM SESSION;

-- 查看備庫狀態和模式

SQL> select name,open_mode,protection_mode,database_role from v$database;

-- 再啓動主庫:

$ lsnrctl start

SQL> startup



-- 查看主庫狀態和模式:

SQL> select name,open_mode,protection_mode,database_role from v$database;

-- 在主庫歸檔當前日誌:

SQL> alter system archive log current;



-- 監控備庫:

-- 查看stby庫的log_archive_dest_1下應該有archive產生。

-- 查尋v$archived_log,有新的日誌記錄出現。最大sequence#,應該爲主庫v$log中current狀態日誌的序列號減一。

SQL>select sequence#,applied,first_time,next_time,resetlogs_change#,completion_time from v$archived_log order by sequence#;

-- 查看服務是否啓動:

SQL> select process,status,client_process,sequence#,BLOCK# from v$managed_standby;

-- 查看是否有遺漏的歸檔日誌

SQL> select * from v$archive_gap;



-- 關閉 dataguard

-- 先關閉主庫:

SQL> alter system archive log current;

SQL>SHUTDOWN IMMEDIATE;

-- 再關閉備庫:

SQL> ALTER DATABASE RECOVER MANAGED standby DATABASE CANCEL;

SQL>SHUTDOWN IMMEDIATE;

相關文章
相關標籤/搜索