Oracle 11g Data Guard 之逻辑备库角色转换
逻辑备库不复制数据库服务,在进行switchover或者failover时,连接主库服务的中间层将不能连接(因为服务的创建没有被复制),或者连接不正确的版本(因为服务属性的修改没有被复制)。 Oracle集群不复制管理逻辑备库的服务,必须手动对主库与备库进行同步,
逻辑备库不复制数据库服务,在进行switchover或者failover时,连接主库服务的中间层将不能连接(因为服务的创建没有被复制),或者连接不正确的版本(因为服务属性的修改没有被复制)。
Oracle集群不复制管理逻辑备库的服务,必须手动对主库与备库进行同步,具体的详参Oracle集群管理和部署的相关内容。
一.逻辑备库的switchover操作
当进行switchover操作来改变主库和逻辑备库的角色时,总是在主库启动switchover,然后在逻辑备库完成操作,其中的步骤必须按顺序,否则将不能成功执行switchover。
1.确保主库可以进行switchover操作
通过查询V$DATABASE的SWITCHOVER_STATUS值来确定主库是否可以进行switchover操作:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;登入後複製登入後複製登入後複製
只要SWITCHOVER_STATUS查询结果是TO STANDBY或者SESSIONS ACTIVE,就表明主库和逻辑备库之间可以进行switchover。否则,查看Data Guard配置是否正确,比如所有的LOG_ARCHIVE_DEST_n参数是否配置正确。
2.当前主库进行切换的准备工作
在当前主库切换为逻辑备库角色之前,先执行如下SQL:
SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO LOGICAL STANDBY;登入後複製
该语句表明当前主库将很快被切换为逻辑备库角色,并且开始接收新主库传来的redo数据。在主库执行这一步是为了接收被记录在当前逻辑备库redo数据流中的数据字典,见步骤3。
如果该步骤成功执行,那么V$DATABASE.SWITCHOVER_STATUS列的值为PREPARING SWITCHOVER。
3.目标逻辑备库切换准备
通过如下的SQL创建目标逻辑备库的数据字典:
SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO PRIMARY;登入後複製
该语句还同时启动了逻辑备库的redo传输服务,该数据库将开始将自身的redo数据发送到当前的主库以及Data Guard配置中的其他备库。接收逻辑备库redo数据的这些数据库但并不应用这些redo数据。
当数据字典开始写入redo数据流中,逻辑备库的V$DATABASE.SWITCHOVER_STATUS值变为PREPARING DICTIONARY,一旦操作成功执行,SWITCHOVER_STATUS变为PREPARING SWITCHOVER。
4.确认当前主库已经为未来的主库redo数据流做好了准备
在完成主库到备库角色的切换之前,通过查询V$DATABASE的SWITCHOVER_STATUS值来确认数据字典已经被主库接收,如果数据字典未被接收,那么切换操作将不能完成。因为当前主库不能够解析新主库传来的redo数据。
SWITCHOVER_STATUS的值表明了switchover的进程,当值为TO LOGICAL STANDBY时,进入步骤5.
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;登入後複製登入後複製登入後複製备注:终止主库switchover操作:
SQL> ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;登入後複製登入後複製终止逻辑备库switchover操作:
SQL> ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;登入後複製登入後複製
5.切换主库到逻辑备库角色
通过如下SQL切换主库到逻辑备库角色:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY;登入後複製
该语句将等待当前所有主库停止所有的事务以及防止任何新用户启动新事务,并且建立切换提交的时间点。
该语句还将防止用户对逻辑备库的数据做任何的修改操作,为了确保快速执行完,执行该switchover语句前确保主库在没有更新活动的静止状态,比如,所有用户暂时不要登录主库。可以通过V$TRANSACTION视图查询当前正在进行的事务中可能延迟执行该SQL的详细信息。
此时,主库已经在往备库角色过渡了,你不可以关闭或者重启数据库。
6.确保所有可用的redo数据都已经被应用到将转为新主库的目标逻辑备库中
当完成主库到逻辑备库角色的切换,而且配置中的备库已经接收了切换通知,应确认切换通知已经被目标备库处理,这个可以通过查询目标备库V$DATABASE中的SWITCHOVER_STATUS来核实,一旦所有可用的redo数据已经应用到了逻辑备库,SQL应用会按照预期的角色转换目标而自动关闭。
SWITCHOVER_STATUS值的更新显示switchover的进度,当值为TO PRIMARY,则进入第7步。
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;登入後複製登入後複製登入後複製
7.切换逻辑备库到主库角色
执行如下SQL,完成逻辑备库到主库角色的转换:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;登入後複製
不需要对Data Guard配置中的逻辑备库进行关闭或者重启的操作,因为配置中的其他逻辑备库将变成新主库的备库,但是任何物理备库还是原主库的备库。
8.新的逻辑备库开启SQL应用
新逻辑备库上执行SQL:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;登入後複製
二.逻辑备库的failover操作
本节介绍逻辑备库的failover操作,逻辑备库的failover必须对故障的主库以及所有的逻辑备库进行正确的操作。另外如果主库没有开启闪回功能,那么就只能通过当前主库的备份来重建主库,或者通过主备库切换解决该问题。
根据数据库配置的保护模式和重做传输服务的属性,主库可能会自主恢复所有或部分的修改操作。
1.将主库未发送的重做日志发送到目标备库
如果主库可以装载(mounted),那么有可能可以将主库未发送的重做日志发送到目标备库。如果该操作能成功执行,那么零数据丢失的failover是可能的,即便主库不是运行在零数据丢失的保护模式下。
注意,该操作要确保目标备库的Redo Apply是开启的,并且主库是mount状态。
主库执行如下SQL:
SQL> ALTER SYSTEM FLUSH REDO TO target_db_name;登入後複製
这里的target_db_name是指接收主库传来的重做日志的备库的DB_UNIQUE_NAME,这个SQL将主库未发送的重做日志刷到目标备库,并且等待重做数据被应用到备库。
2.复制并注册所有的归档重做日志到目标逻辑备库,以使目标逻辑备库成为新的主库。
根据配置的组件条件,你可以访问主库的归档重做日志,那么:
确定逻辑备份数据库是否有任何归档重做日志文件丢失;
从主数据库复制丢失的日志文件到逻辑备份数据库;
注册复制的日志文件。
逻辑备份数据库注册归档的重做日志文件:
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE - > '/disk1/oracle/dbs/log-%r_%s_%t.arc'; Database altered.登入後複製3.启用LOG_ARCHIVE_DEST_STATE_n
如果之前没有配置基于角色的归档传输路径,配置新主库对应的远程逻辑备库的初始化参数中的远程日志传输路径,手动启用该参数。
比如启用LOG_ARCHIVE_DEST_2:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH;登入後複製
为确保新主库重启后,此次做的更改仍然有效,可以将该参数写进数据库文本初始化参数文件,一般来说,当数据库是主库角色时,必须开启归档到远程目的地,如果是备库角色,该参数就应该disable。
该语句关闭RFS进程,在目标备库成为新主库之前,应用目标备库中剩下的重做日志,然后停止SQL应用,激活主库。如果没有FINISH APPLY子句,那么在目标备库转为主库角色前,当前目标备库不会应用还未应用的重做日志。4.激活新主库
在目标备库上执行SQL:
SQL> ALTER DATABASE ACTIVATE LOGICAL STANDBY DATABASE FINISH APPLY;登入後複製
5.Failover后恢复其他备库
确保现有的其他备库继续为新主库提供保护。
6.备份新主库
在执行failover之后,备份新主库,立即执行备份是一个必要的安全措施,因为没有完整的数据库备份,就不能在failover之后对数据库进行恢复。
7.还原失败的主库
Failover之后,原主库可以转换成新主库的逻辑备库,或者可以应用新主库的备份重建为逻辑备库。一旦原主库转换为备库角色,就可以通过swtichover重新转换成主库角色。
本文参阅Oracle官方文档翻译,不足之处欢迎批评指正!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

要查詢 Oracle 表空間大小,請遵循以下步驟:確定表空間名稱,方法是運行查詢:SELECT tablespace_name FROM dba_tablespaces;查詢表空間大小,方法是運行查詢:SELECT sum(bytes) AS total_size, sum(bytes_free) AS available_space, sum(bytes) - sum(bytes_free) AS used_space FROM dba_data_files WHERE tablespace_

數據導入方法:1. 使用 SQLLoader 實用程序:準備數據文件、創建控製文件、運行 SQLLoader;2. 使用 IMP/EXP 工具:導出數據、導入數據。提示:1. 大數據集推薦 SQL*Loader;2. 目標表應存在,列定義匹配;3. 導入後需驗證數據完整性。

Oracle 安裝失敗的卸載方法:關閉 Oracle 服務,刪除 Oracle 程序文件和註冊表項,卸載 Oracle 環境變量,重新啟動計算機。若卸載失敗,可使用 Oracle 通用卸載工具手動卸載。

創建 Oracle 表涉及以下步驟:使用 CREATE TABLE 語法指定表名、列名、數據類型、約束和默認值。表名應簡潔、描述性,且不超過 30 個字符。列名應描述性,數據類型指定列中存儲的數據類型。 NOT NULL 約束確保列中不允許使用空值,DEFAULT 子句可指定列的默認值。 PRIMARY KEY 約束標識表的唯一記錄。 FOREIGN KEY 約束指定表中的列引用另一個表中的主鍵。請參見示例表 students 的創建,其中包含主鍵、唯一約束和默認值。

Oracle 提供多種去重查詢方法:DISTINCT 關鍵字返回每列的唯一值。 GROUP BY 子句對結果分組並返回每個分組的非重複值。 UNIQUE 關鍵字用於創建僅包含唯一行的索引,查詢該索引將自動去重。 ROW_NUMBER() 函數分配唯一數字並過濾出僅包含第 1 行的結果。 MIN() 或 MAX() 函數可返回數字列的非重複值。 INTERSECT 運算符返回兩個結果集的公共值(無重複項)。

在 Oracle 中查看實例名的方法有三種:命令行中使用 "sqlplus" 和 "select instance_name from v$instance;" 命令。在 SQL*Plus 中使用 "show instance_name;" 命令。通過操作系統的任務管理器、Oracle Enterprise Manager 或檢查環境變量 (Linux 上的 ORACLE_SID)。

Oracle 視圖加密允許您加密視圖中的數據,從而增強敏感信息安全性。步驟包括:1) 創建主加密密鑰 (MEk);2) 創建加密視圖,指定要加密的視圖和 MEk;3) 授權用戶訪問加密視圖。加密視圖工作原理:當用戶查詢加密視圖時,Oracle 使用 MEk 解密數據,確保只有授權用戶可以訪問可讀數據。

Oracle 打不開的解決辦法包括:1. 啟動數據庫服務;2. 啟動監聽器;3. 檢查端口衝突;4. 正確設置環境變量;5. 確保防火牆或防病毒軟件未阻止連接;6. 檢查服務器是否已關閉;7. 使用 RMAN 恢復損壞的文件;8. 檢查 TNS 服務名稱是否正確;9. 檢查網絡連接;10. 重新安裝 Oracle 軟件。
