客服微信

本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。
检查用户定义的 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 并重命名全局名称。
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
容器数据库 (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.