客服微信
本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。
在 Oracle 12.1 中,可插入数据库可以拔出到“.xml”文件,该文件描述了可插入数据库的内容。要移动PDB,您需要手动移动“.xml”文件和所有相关的数据库文件。除了此功能之外,Oracle 12.2 还允许将PDB 拔出到“.pdb”存档文件。生成的存档文件包含描述 PDB 的“.xml”文件以及与 PDB 关联的所有数据文件。这可以简化服务器之间的文件传输并减少人为错误的可能性。
本文包括 Oracle 12.1 中提供的拔出/插入功能。这是在 12.1 文章中首次描述的。
本文假设您使用的是 Oracle Managed Files (OMF)。如果不是,您将需要添加文件名转换信息,如此处所述。
在尝试拔下 PDB 之前,必须确保其已关闭。要拔出数据库,请使用带有 UNPLUG INTO 子句的ALTER PLUGGABLE DATABASE 命令来指定“.pdb”归档文件的位置。
export ORAENV_ASK=NO export ORACLE_SID=cdb3 . oraenv export ORAENV_ASK=YES sqlplus / as sysdba ALTER PLUGGABLE DATABASE pdb5 CLOSE; ALTER PLUGGABLE DATABASE pdb5 UNPLUG INTO '/home/oracle/pdb20.pdb';
您会看到存档文件现在存在。
[oracle@ora19c ORCLCDB]$ ls -lt /home/oracle/pdb20.pdb -rw-r--r-- 1 oracle oinstall 109286243 Aug 27 02:31 /home/oracle/pdb20.pdb
您可以删除 PDB 并删除数据文件,因为它们都存在于存档文件中。
DROP PLUGGABLE DATABASE pdb5 INCLUDING DATAFILES; SELECT name, open_mode FROM v$pdbs ORDER BY name; NAME OPEN_MODE ------------------------------ ---------- PDB$SEED READ ONLY
将 PDB 插入新的CDB 类似于创建新的 PDB。首先通过调用 DBMS_PDB.CHECK_PLUG_COMPATIBILITY 函数检查 PBD 是否与 CDB 兼容,并传入存档文件和要使用它创建的 PDB 的名称。
SET SERVEROUTPUT ON DECLARE l_result BOOLEAN; BEGIN l_result := DBMS_PDB.check_plug_compatibility( pdb_descr_file => '/home/oracle/pdb20.pdb', pdb_name => 'pdb20'); IF l_result THEN DBMS_OUTPUT.PUT_LINE('compatible'); ELSE DBMS_OUTPUT.PUT_LINE('incompatible'); END IF; END; / compatible PL/SQL procedure successfully completed.
如果 PDB 不兼容,则会在 PDB_PLUG_IN_VIOLATIONS 视图中列出违规行为。如果 PDB 兼容,请使用它作为源创建一个新的 PDB。如果我们用新名称创建它,我们可能会这样做。
CREATE PLUGGABLE DATABASE pdb20 USING '/home/oracle/pdb20.pdb'; ALTER PLUGGABLE DATABASE pdb20 OPEN READ WRITE; SELECT name, open_mode FROM v$pdbs ORDER BY name; NAME OPEN_MODE ------------------------------ ---------- PDB$SEED READ ONLY PDB20 READ WRITE
我们希望将数据库插回到同一个容器中,我们可以执行以下操作,复制是必须的操作。
CREATE PLUGGABLE DATABASE pdb20 USING '/home/oracle/pdb20.pdb' TEMPFILE REUSE; ALTER PLUGGABLE DATABASE pdb20 OPEN READ WRITE; SELECT name, open_mode FROM v$pdbs ORDER BY name;
在尝试拔下 PDB 之前,必须确保其已关闭。要拔出数据库,请使用 ALTER PLUGGABLE DATABASE 命令和 UNPLUG INTO 子句来指定 XML 元数据文件的位置。
export ORAENV_ASK=NO export ORACLE_SID=cdb3 . oraenv export ORAENV_ASK=YES sqlplus / as sysdba ALTER PLUGGABLE DATABASE pdb5 CLOSE; ALTER PLUGGABLE DATABASE pdb5 UNPLUG INTO '/u01/pdb5.xml';
可插入数据库仍然存在,但在元数据文件和所有数据文件复制到安全的地方之前,您不应该打开它。
COLUMN name FORMAT A30 SELECT name, open_mode FROM v$pdbs ORDER BY name; NAME OPEN_MODE ------------------------------ ---------- PDB$SEED READ ONLY PDB20 MOUNTED
您可以删除 PDB,选择将文件保留在文件系统上。
DROP PLUGGABLE DATABASE pdb5 KEEP DATAFILES; SELECT name, open_mode FROM v$pdbs ORDER BY name; NAME OPEN_MODE ------------------------------ ---------- PDB$SEED READ ONLY
首先通过调用 DBMS_PDB.CHECK_PLUG_COMPATIBILITY 函数检查 PBD 是否与 CDB 兼容,并传入 XML 元数据文件和要使用它创建的 PDB 的名称。
SET SERVEROUTPUT ON DECLARE l_result BOOLEAN; BEGIN l_result := DBMS_PDB.check_plug_compatibility( pdb_descr_file => '/u01/pdb5.xml', pdb_name => 'pdb5'); IF l_result THEN DBMS_OUTPUT.PUT_LINE('compatible'); ELSE DBMS_OUTPUT.PUT_LINE('incompatible'); END IF; END; / compatible PL/SQL procedure successfully completed.
如果 PDB 不兼容,则会在 PDB_PLUG_IN_VIOLATIONS 视图中列出违规行为。如果 PDB 兼容,请使用它作为源创建一个新的 PDB。如果我们用新名称创建它,我们可能会这样做。
CREATE PLUGGABLE DATABASE pdb2 USING '/u01/pdb5.xml' 2 FILE_NAME_CONVERT=('/u02/app/oracle/oradata/cdb3/pdb5/','/u02/app/oracle/oradata/cdb3/pdb2/');
相反,我们希望将数据库插回到同一个容器中,因此我们不需要复制文件或重新创建临时文件,因此我们可以执行以下操作。
CREATE PLUGGABLE DATABASE pdb5 USING '/u01/pdb5.xml' NOCOPY TEMPFILE REUSE; ALTER PLUGGABLE DATABASE pdb5 OPEN READ WRITE; SELECT name, open_mode FROM v$pdbs ORDER BY name; NAME OPEN_MODE ------------------------------ ---------- PDB$SEED READ ONLY PDB5 READ WRITE