天天看點

動手為王 | Oracle 資料庫跨版本更新遷移實踐

實施背景

今年春節加班期間,将某客戶的核心資料庫從 Oracle 10.2.0.4 RAC 遷移更新至 12.2 RAC。原庫是使用的 Raw,而且版本較低,無法直接更新到 12.2 版本,是以整個更新過程相對麻煩。

實施思路

我們在新環境部署了10g、11.2、12.2 的 Database 軟體(其中 10g,11.2 均為單機,12.2 為已經安裝好的 Oracle RAC 環境);

然後配置好主庫到新環境的 DataGuard 資料同步,在正式割接之前确認主備同步正常。由于需要将資料庫從 10gR2 遷移到新環境并且更新到 12.2,且需要使用 CDB 模式,是以整個過程相對繁瑣。

如下是大緻步驟:

停止 Job(将 job_queue_processes 參數提前置為0,并 kill 相關程序);

檢查分布式事務,并進行相關處理(實際上我們檢查确實發現了部分分布式事務需要手工介入);

在确認主備資料同步之後,進行 switchover,如下是主備切換簡約步驟:

--主庫

--備庫

新主庫更新到 11.2 之前需要先建立還原點,防止有問題可以回退;

執行更新腳本,将資料庫更新到 11.2;

确認更新成功之後,drop 還原點并建立新的還原點,準備将資料庫更新到 12.2;

這裡需要注意的是,在更新到 12.2 之前需要将執行個體參數 compatible 設定為11.2.0.4,否則在更新過程中可能會遭遇 ORA-00600 錯誤。

執行更新腳本将資料庫更新到 12.2;

确認更新後資料庫元件正常且無相關報錯之後,drop 還原點;

資料庫更新到 12.2 之後,需要将 DB 從 NO-CDB 模式轉換成 CDB 模式,将資料庫作為 PDB 插入到 12.2 RAC 叢集中;

如下是轉 CDB 模式是相關簡單步驟:

1)啟動執行個體到隻讀模式

2)建立 xml 中繼資料檔案

3)檢查相容性

4)進行 nocopy 操作

5) 啟動 PDB 進行并進行轉換

建立 Redo、Undo 以及修改相應參數,将資料庫轉成 RAC 執行個體。

問題讨論

在整個更新過程中,我們遇到了幾個小問題,分别如下:

DataGuard 的檔案 convert 參數沒有加入 tempfile,導緻 DG 切換之後,主庫 open 有問題,需要先 drop tempfile 之後才行;

在更新到 12.2 的過程中,遇到 ORA-01722 錯誤,如下所示:

動手為王 | Oracle 資料庫跨版本更新遷移實踐

根據 Oracle Mos 文檔 Upgrade to 12.2 Fails with Error:”ORA-01722: Invalid number : NONUPGRADED_TABLEDATA” (文檔 ID 2279497.1) 的描述,可以通過如下的方式來解決:

将資料庫作為 PDB 插入到 CDB 之後,打開 PDB 時提示為受限模式。

動手為王 | Oracle 資料庫跨版本更新遷移實踐

該問題經查是由于我們在執行的過程中漏掉了一個步驟(exec dbms_pdb.sync_pdb();),導緻 PDB 的資訊與 CDB 的資訊不一緻,本質上元件資訊不一緻。

實際上從 Oracle 官方的解釋來看,隻要 PDB 的元件屬于 CDB 的子集就行,我們當時查詢結果卻是顯示正常的,但是 PDB 的元件狀态顯示異常,是以讓 Oracle 認為 PDB 的元件與 CDB 有巨大差異,将 PDB 置于受限模式“OPTION WARNING Database option mismatch: PDB installed version NULL” in PDB_PLUG_IN_VIOLATIONS(文檔 ID 2020172.1)。

該文檔中有詳細的描述,認為這是 12.2 的一個加強。

我們嘗試過将元件 Reinstall 然後再 Install 是可以的,但是元件較多,大約8個元件,尤其是 Java 或 xdb 相關元件比較麻煩,是以我們将 PDB 删除然後重新建立了 PDB 進行加載,最終解決了該問題。

原文釋出時間為:2018-02-27

本文作者:李真旭