客服微信
本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。
检查用户定义的 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.