陈老师:1415968548 郑老师:2735197625 乐老师:354331153
客服热线:
19941464235 / 19906632509 / 19906733890 / 19905812933(微信同号)

客服微信

【Oracle OCP】Oracle 19c之PDB重命名

作者:炎燚小寶
发布时间:2023-12-19 09:17
浏览量:740

本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。

一、准备PDB环境

检查用户定义的 PDB 的当前名称。

conn / as sysdba

show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO


切换到 PDB 并检查数据文件的名称。

alter session set container = pdb1;

select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u02/oradata/CDB1/pdb1/system01.dbf
/u02/oradata/CDB1/pdb1/sysaux01.dbf
/u02/oradata/CDB1/pdb1/undotbs01.dbf
/u02/oradata/CDB1/pdb1/users01.dbf
/u02/oradata/CDB1/EFB4284A464F52E3E055000000000001/datafile/o1_mf_apex_ksjoblv5_.dbf


我们关闭 PDB 并以受限模式打开它。

conn / as sysdba

alter pluggable database pdb1 close;

alter pluggable database pdb1 open restricted;


二、重命名命名PDB

我们切换到 PDB 并重命名全局名称。

alter session set container=pdb1;

alter pluggable database rename global_name to pdb2;


我们重新启动 PDB 并显示 PDB 名称。

alter pluggable database close immediate;
alter pluggable database open;

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 PDB2                           READ WRITE NO


我们可以看到这对数据文件的路径或名称没有影响。

select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u02/oradata/CDB1/pdb1/system01.dbf
/u02/oradata/CDB1/pdb1/sysaux01.dbf
/u02/oradata/CDB1/pdb1/undotbs01.dbf
/u02/oradata/CDB1/pdb1/users01.dbf /u02/oradata/CDB1/EFB4284A464F52E3E055000000000001/datafile/o1_mf_apex_ksjoblv5_.dbf


三、移动PDB的文件

容器数据库 (CDB) 无法移动属于可插入数据库的文件。以下查询显示 CDB 和 PDB 的所有数据文件。

SELECT file#, name FROM v$datafile ORDER BY file#;


如果我们在CDB下尝试移动属于 PDB 的数据文件,则会返回错误。

SQL>ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/ORCLCDB/pdb21/ts101.dbf' TO /u01/app/oracle/oradata/ORCLCDB/pdb22/ts101.dbf' REUSE;

ERROR at line 1:
ORA-01516: nonexistent log file, data file, or temporary file "70" in the current container


如果我们切换到 PDB 容器,数据文件可以正常移动。

SQL> ALTER SESSION SET container=pdb2;

Session altered.

SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/pdb2/system01.dbf' TO '/tmp/system01.dbf' REUSE;

Database altered.

SQL>


SQL> SELECT file_id, file_name FROM dba_data_files WHERE file_id = 29;

   FILE_ID FILE_NAME
---------- ----------------------------------------------------------------------
        29 /tmp/system01.dbf

SQL>


SQL> ALTER DATABASE MOVE DATAFILE 29 TO '/u01/app/oracle/oradata/pdb2/system01.dbf' REUSE;

Database altered.

SQL>


SQL> SELECT file_id, file_name FROM dba_data_files WHERE file_id = 29;

   FILE_ID FILE_NAME
---------- ----------------------------------------------------------------------
        29 /u01/app/oracle/oradata/pdb2/system01.dbf

SQL>ALTER SESSION SET container=cdb1;


SQL> ALTER SESSION SET container=CDB$ROOT;

Session altered.