MKTalkway
首页
注册

Oracle使用DUPLICATE創建資料庫副本並將其作爲備庫組成Data Guard

MiKing233
好吃懶做
2022-12-09 09:38:54

在該案例中我們將使用DUPLICATE創建一份SMTASSY資料庫的副本並與其組成Data Guard

當前我們存在兩臺伺服器, 一台IP地址爲172.10.114.30已存在一個包含完整資料的資料庫SMTASSY, 我們將其作爲主庫

另一臺IP地址爲172.10.115.193只安裝了Oracle軟體沒有任何實例, 我們將從主庫創建副本到此臺伺服器作爲備庫

該案例實踐于Oracle 19c, 資料庫SIDsmtassy, Oracle相關路徑相同.

 

Active DatabaseDuplication功能是从Oracle 11g开始引入的一个新功能

無需提前备份資料庫, 直接通過網路传输資料庫到目標伺服器, 但在复制的过程中, 对源库有一定的压力, 需要一定的網路帶寬.

對於資料量較小的資料庫來講, 透過這種方式可以簡化複製實例的步驟非常方便.

 

在使用DUPLICATE創建其副本之前, 我們首先要確保在兩臺伺服器網路互通的情況下可以通過TNSPing.

 

我們需要在主/備庫都要配置好TNS, 并且TNS配置中包含自己和目標庫, 使用下面的命令編輯TNS配置

Command #vi /oracle/app/oracle/product/19.3.0/network/admin/tnsnames.ora

當前資料庫的名稱爲SMTASSY, 在下面的TNS配置中我們將使用PSMTASSY來代指主庫(Primary), SSMTASSY來代指備庫(Standby)

# tnsnames.ora Network Configuration File: /oracle/app/oracle/product/19.3.0/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

 

PSMTASSY =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.10.114.30)(PORT = 1522))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = smtassy)

    )

  )

SSMTASSY =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.10.115.193)(PORT = 1522))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = smtassy)

    )

  )

配置好後另一臺伺服器使用同樣的方式配置好TNS, 兩臺TNS配置文件都需要包含上面的内容

除此之外我們還要確認主備庫上監聽的狀態, 使用以下命令在主庫執行查看監聽配置文件

Command #vi /oracle/app/oracle/product/19.3.0/network/admin/listener.ora

以下是主庫listener.ora的内容

# LISTENER.ORA Network Configuration File: /oracle/app/oracle/product/19.3.0/network/admin/listener.ora

# Generated by Oracle configuration tools.

 

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = smtassy)

      (ORACLE_HOME = /oracle/app/oracle/product/19.3.0)

      (SID_NAME = smtassy)

    )

  )

 

LISTENER =

  (DESCRIPTION_LIST =

     (DESCRIPTION =

          (ADDRESS = (PROTOCOL = TCP)(HOST = 10.128.128.30)(PORT = 1526))

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

          (ADDRESS = (PROTOCOL = TCP)(HOST = 172.10.114.30)(PORT = 1522))

     )

  )

因爲主庫已存在該實例, 且監聽也在正常工作, 但此時備庫還沒有配置監聽, 在備庫執行上面相同命令來編輯監聽配置文件

 

將主庫的監聽配置内容複製到備庫, 有幾個地方需要注意: 配置文件中的SID, ORACLE_HOME的路徑以及最後的IP地址; 由於是用作備庫, 所以主備庫SID一樣可以忽略, 對於ORACLE_HOME路徑兩臺伺服器安裝路徑都相同所以也不需要修改, 最後的IP地址部分需要更改爲備庫本機的IP地址, 完成後保存退出.

 

更改完成后我們還需要使用下面的命令來啓動監聽

Command #lsnrctl start

若要查看監聽狀態則使用

Command #lsnrctl status

若要修改主庫這樣開啓狀態下的監聽, 修改完後還需要使用該命令來重載配置

Command #lsnrctl reload

 

在確保兩臺伺服器閒本身網路連通的前提下使用以下命令通過TNSPing測試DB連通性

在主庫使用以下命令來測試與備庫的連通性:

Command #tnsping ssmtassy

在備庫使用以下命令來測試與主庫的連通性:

Command #tnsping psmtassy

當最後一行返回結果為: OK (X msec)時則説明TNS連綫正常

 

TNS連綫正常后, 我們還需要目標資料庫的spfile和密碼文件才可開始使用DUPLICATE建立資料庫副本

spfile文件需要獲取pfile來生成

在備庫使用sftp從主庫獲取smtassypfile和密碼文件

Command #sftp oracle@172.10.114.30

輸入oracle用戶密碼登入到主庫后, 執行以下命令設定檔案傳輸至本機后存放的路徑

sftp >lcd /oracle/app/oracle/product/19.3.0/dbs

獲取smtassyspfile和密碼文件

sftp >get /oracle/app/oracle/product/19.3.0/dbs/spfilesmtassy.ora

sftp >get /oracle/app/oracle/product/19.3.0/dbs/orapwsmtassy

傳輸完成后, 斷開與目標伺服器的sftp連綫

sftp >exit

:spfile文件名一般爲spfile+資料庫sid.ora, 密碼文件一般爲orapw+資料庫sid

 

我们還需要在备库創建一些必要的的路徑

具體有哪些路徑可以參考資料庫的pfile文件, 我們可以通過剛剛傳輸的spfile文件來生成pfile文件

SQL >create pfile from spfile;

現在檢查dbs目錄, 可以發現除了spfilesmtassy.oraspfile文件之外, 還多出了initsmtassy.ora, 這是我們剛創建的pfile文件

現在我們就可以查看pfile文件中, 資料庫都涉及了哪些路徑

Command #vi /oracle/app/oracle/product/19.3.0/dbs/initsmtassy.ora

大多數的Oracle資料庫包含以下路徑 (僅供參考, 具體包含哪些路徑請檢查資料庫的pfile文件)

Command #mkdir -p /sfisdata/smtassy

Command #mkdir -p /sfisarch/smtassy

Command #mkdir -p /oracle/app/oracle/oradata/smtassy

Command #mkdir -p /oracle/app/oracle/admin/smtassy/adump

Command #mkdir -p /oracle/app/oracle/fast_recovery_area/SMTASSY

Command #mkdir -p /oracle/app/oracle/diag/rdbms/smtassy/smtassy/trace

創建完成後, 还有一些内容需要确认, 以免后面的同步恢复出現問題

 

首先确保主库运行在归档模式

# 在當前備庫的主庫查詢其是否運行于歸檔模式

SQL >archive log list;

若沒有運行在歸檔模式, 使用下面的命令更改爲歸檔模式

SQL >shutdown immediate;

SQL >startup mount;

SQL >alter database archivelog;

SQL >alter database open;

 

再確認主庫是否開啓强制日志FORCE LOGGING

SQL >select force_logging from v$database;

若沒有開啓强制日志, 使用下面的命令開啓强制日志

SQL >alter database force logging;

 

回到備庫, 備庫實例開啓為nomount狀態

SQL >startup nomount;

可以使用以下命令檢查資料庫啓動狀態

SQL >select status from v$instance;

nomount狀態為STARTED

至此各項檢查已完成, 準備開始DUPLICATE創建資料庫副本

 

在備庫使用下面的命令來使用rman連接目標庫

Command #rman target sys/syspasswd@PSMTASSY auxiliary sys/syspasswd@SSMTASSY msglog /sfisdata/dup_smtassy.log

這邊注意: sys/syspasswd為用戶名和密碼, 用戶需要使用sys, @PSMTASSY/SSMTASSYTNS中主庫/備庫指定的名稱, 注意主備庫在命令中的前後順序(主庫在前面/備庫在後面)!!! 最後輸出log到指定路徑下, 後面用sid區分

 

此時名爲dup_smtassy.log的日志文件已經在/sfisdata生成了, 可以新開一個備庫的命令窗口使用命令在實時檢查日志輸出内容

Command #tail -f /sfisdata/dup_smtassy.log

 

回到之前的命令窗口, 執行下面的命令開始同步

RMA >DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;

此時你可以看著log輸出内容的窗口檢查進度和報錯, DUPLICATE的傳輸速度受限于網路帶寬, 當資料庫副本創建完成, 你應當看到以下log輸出

# /sfisdata/dup_smtassy.log

Finished Duplicate Db at YYYY-MM-DD HH:MM:SS

至此, 使用DUPLICATE創建資料庫副本部分完成, 下面進行DG搭建.

 

 

 

DUPLICATE創建的資料庫副本與主庫組成Data Guard

首先需要在備庫檢查并調整一些參數

檢查備庫的standby_file_management參數是否爲auto

SQL >show parameter standby;

若參數爲MANUAL, 則使用下面的命令修改爲AUTO

SQL >alter system set standby_file_management='auto' scope=both;

 

檢查備庫的fal_clientfal_server參數

SQL >show parameter fal;

fal_client參數應爲空值, 若不爲空則使用下面的命令修改

SQL >alter system set fal_client='' scope=both;

fal_server參數應爲TNS中的主庫名, 使用下面的命令修改

SQL >alter system set fal_server='PSMTASSY' scope=both;

 

備庫的參數修改完畢後, 回到主庫執行下面的命令

SQL >show parameter arch;

檢查輸出結果中的log_archive_dest_x, 找一個沒有被使用的即可, 例如這裏我們使用log_archive_dest_2

主庫執行下面的命令, 其中service=SSMTASSY為主庫TNS中備庫的指定名稱, db_unique_name=smtassy為當前資料庫的sid

SQL >alter system set log_archive_dest_2='service=SSMTASSY lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=smtassy' scope=both;

在選擇了log_archive_dest_2后我們還需要返回備庫指定其歸檔日志存放路徑

在備庫使用以下命令查詢歸檔日志存放路徑, Archive destination後面的路徑即爲當前歸檔日志存放路徑

SQL >archive log list;

如歸檔日志存放路徑有誤, 可以使用以下命令來指定歸檔日志存放路徑

SQL >alter system set log_archive_dest_2='LOCATION=/sfisarch/smtassy';

路徑設定完成後, 執行以下命令與主庫連接進行實時日志應用

SQL >alter database recover managed standby database disconnect from session;

此時主備庫DG搭建完畢, 我們需要進行聯通性驗證

 

在備庫執行命令查看備庫trace日志

Command #tail -f /oracle/app/oracle/diag/rdbms/smtassy/smtassy/trace/alert_smtassy.log

回到主庫執行以下命令手動進行日志切換

SQL >alter system switch logfile;

回到備庫觀察trace日志是否成功應用歸檔

 

至此, 你應已完成使用DUPLICATE創建資料庫副本並將其作爲備庫組成Data Guard的所有步驟

 

 

 

SOP End