在該案例中我們將使用DUPLICATE創建一份SMTASSY資料庫的副本並與其組成Data Guard
當前我們存在兩臺伺服器, 一台IP地址爲172.10.114.30已存在一個包含完整資料的資料庫SMTASSY, 我們將其作爲主庫
另一臺IP地址爲172.10.115.193只安裝了Oracle軟體沒有任何實例, 我們將從主庫創建副本到此臺伺服器作爲備庫
該案例實踐于Oracle 19c下, 資料庫SID為smtassy, 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從主庫獲取smtassy的pfile和密碼文件
Command #sftp oracle@172.10.114.30
輸入oracle用戶密碼登入到主庫后, 執行以下命令設定檔案傳輸至本機后存放的路徑
sftp >lcd /oracle/app/oracle/product/19.3.0/dbs
獲取smtassy的spfile和密碼文件
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.ora的spfile文件之外, 還多出了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/SSMTASSY為TNS中主庫/備庫指定的名稱, 注意主備庫在命令中的前後順序(主庫在前面/備庫在後面)!!! 最後輸出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_client和fal_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