當要打開PDB時為何會有Warning: PDB altered with errors.


對PDB執行 alter pluggable database pdbprod2 open; 操作后提示:Warning: PDB altered with errors. 來自AskScuti博客園

目錄

1. 狀況

2. 原因

3. 方案

 

1. 狀況

SQL> show pdbs

    CON_ID CON_NAME  OPEN MODE  RESTRICTED
---------- --------- ---------- ----------
     2 PDB$SEED      READ ONLY  NO
     3 PDB1          MOUNTED
     4 PDBPROD1      MOUNTED
     5 PDBPROD2      MOUNTED

SQL> alter pluggable database pdbprod2 open;

Warning: PDB altered with errors.

 

2. 原因

  用種子 PDB 或插入或克隆方法創建 PDB 后,可以通過查詢 CDB_PDBS 視圖的STATUS 列查看新 PDB 的狀態。如果在打開新 PDB 之前創建了公用用戶和角色,必須同步 PDB 才能從根檢索新的公用用戶和角色。當 PDB 在讀/寫模式下打開時,會自動執行同步。如果在只讀模式下打開 PDB,則會返回錯誤。可以通過查詢 PDB_PLUG_IN_VIOLATIONS 視圖查看違規說明。

SQL> select CAUSE,CON_ID,MESSAGE from pdb_plug_in_violations;

CAUSE
--------
CON_ID
--------
MESSAGE
--------
Sync Failure
     4
Sync PDB failed with ORA-959 during 'CREATE USER "C##AAA" IDENTIFIED BY VALUES *
DEFAULT TABLESPACE "IMPDATA" container = all'

  因為之前在容器數據庫中創建了一個公共用戶C##AAA,現在還需要在所有可插入的數據庫中創建該用戶。這個用戶是在數據庫正常打開的情況下建立的,但是使用的是自定義表空間《IMPDATA》,當打開可插入數據庫PDBPROD2時將同步這個操作,也就是同步創建這個公共用戶。但是 PDBPROD2 這個可插入數據庫中是沒有 IMPDATA 表空間的,因此無法同步創建這個公共用戶,最終可插入數據庫 PDBPROD2 僅以受限模式打開,如下所示:

SQL> show pdbs

    CON_ID CON_NAME  OPEN MODE  RESTRICTED
---------- --------- ---------- ----------
     2 PDB$SEED      READ ONLY  NO
     3 PDB1          MOUNTED
     4 PDBPROD1      MOUNTED
     5 PDBPROD2      READ WRITE YES

 

3. 方案

  這時候去刪除公共用戶依然不行,因為同步動作已經在隊列里面了。因此,唯一能做的就是在 PDBPROD2 中創建該表空間,關閉數據庫,再次進行同步即可。

SQL> alter session set container=pdbprod2;

Session altered.

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/CDBOCP/pdbprod2/CDBOCP/8EE4C86D91688487E053C81212AC968B/
datafile/o1_mf_system_gn08jj5k_.dbf

/u01/app/oracle/oradata/CDBOCP/pdbprod2/CDBOCP/8EE4C86D91688487E053C81212AC968B/
datafile/o1_mf_sysaux_gn08jj5p_.dbf

/u01/app/oracle/oradata/CDBOCP/pdbprod2/CDBOCP/8EE4C86D91688487E053C81212AC968B/
datafile/o1_mf_undotbs1_gn08jj63_.dbf

SQL> create tablespace impdata datafile '/u01/app/oracle/oradata/CDBOCP/pdbprod2/CDBOCP/8EE4C86D91688487E053C81212AC968B/datafile/impdata01.dbf' size 10m;

Tablespace created.

SQL> alter session set container=cdb$root;

Session altered.

SQL> alter pluggable database pdbprod2 close;

Pluggable database altered.

SQL> alter pluggable database pdbprod2 open;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME  OPEN MODE  RESTRICTED
---------- --------- ---------- ----------
     2 PDB$SEED      READ ONLY  NO
     3 PDB1          MOUNTED
     4 PDBPROD1      MOUNTED
     5 PDBPROD2      READ WRITE NO


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM