客服微信
本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。
在 Oracle 数据库 12.1 和 12.2 中,CREATE PLUGGABLE DATABASE 命令的 DEFAULT TABLESPACE 子句可用于为从种子创建的可插入数据库创建新的默认表空间,不指定的情况下,默认永久表空间是SYSTEM
以下示例提供了 Oracle 托管文件 (OMF) 和非 OMF 语法。所有进一步的示例都假设您正在使用OMF。如果需要,您可以添加适当的 FILE_NAME_CONVERT 或 PDB_FILE_NAME_CONVERT 设置。
CONN / AS SYSDBA -- OMF语法 alter system set db_create_file_dest='/opt/oracle/oradata'; CREATE PLUGGABLE DATABASE pdb2 ADMIN USER pdb_adm IDENTIFIED BY Password1 DEFAULT TABLESPACE users DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M; -- 非OMF语法. CREATE PLUGGABLE DATABASE pdb2 ADMIN USER pdb_adm IDENTIFIED BY Password1 FILE_NAME_CONVERT=('/opt/oracle/oradata/ORCLCDB/pdbseed/','/opt/oracle/oradata/ORCLCDB/pdb4/') DEFAULT TABLESPACE users DATAFILE '/opt/oracle/oradata/ORCLCDB/pdb4/users01.dbf' SIZE 1M AUTOEXTEND ON NEXT 1M; ALTER PLUGGABLE DATABASE pdb2 OPEN;
创建 PDB 后,您可以在 PDB 中看到额外表空间和数据库默认表空间设置的存在。
CONN / AS SYSDBA ALTER SESSION SET CONTAINER = pdb2; SELECT tablespace_name FROM dba_tablespaces ORDER BY 1; TABLESPACE_NAME ------------------------------ SYSAUX SYSTEM TEMP USERS SQL> SELECT property_value FROM database_properties WHERE property_name = 'DEFAULT_PERMANENT_TABLESPACE'; PROPERTY_VALUE ---------------------------------------------------------------------------------------------------- USERS SQL>
从用户定义的 PDB 创建可插入数据库时,不能使用 DEFAULT TABELSPACE 子句。在下面的示例中,我们尝试使用它来指定新的默认表空间并引用现有表空间。两者都会导致错误。
CONN / AS SYSDBA CREATE PLUGGABLE DATABASE pdb3 FROM pdb2 DEFAULT TABLESPACE users2 DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M; DEFAULT TABLESPACE users2 DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M * ERROR at line 2: ORA-00922: missing or invalid option --如果目标库存在USERS表空间,可以创建成功,否则报ORA-65223: tablespace USERS does not exist CREATE PLUGGABLE DATABASE pdb3 FROM pdb2 DEFAULT TABLESPACE users; Pluggable database created. SQL>
USERS 表空间将是此 PDB 以及从中克隆的任何其他表空间中的默认表空间,所以让我们尝试一些不同的东西。在 PDB 中创建一个新表空间,但不要将其设置为数据库默认表空间。
CONN / AS SYSDBA ALTER SESSION SET CONTAINER = pdb2; CREATE TABLESPACE test_ts DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M;
创建一个新的 PDB 作为此用户定义的 PDB 的克隆,但告诉它使用 TEST_TS 表空间作为数据库默认表空间。
CONN / AS SYSDBA CREATE PLUGGABLE DATABASE pdb3 FROM pdb2 DEFAULT TABLESPACE test_ts; ALTER PLUGGABLE DATABASE pdb3 OPEN;
我们可以看到新 PDB 中的表空间与源相同,但它现在使用 TEST_TS 表空间,而不是 USERS 表空间作为数据库默认表空间。在创建过程中尝试创建新表空间而不是引用现有表空间仍然会导致错误。
CONN / AS SYSDBA ALTER SESSION SET CONTAINER = pdb3; SELECT tablespace_name FROM dba_tablespaces ORDER BY 1; TABLESPACE_NAME ------------------------------ SYSAUX SYSTEM TEMP TEST_TS UNDOTBS1 USERS SQL> SELECT property_value FROM database_properties WHERE property_name = 'DEFAULT_PERMANENT_TABLESPACE'; PROPERTY_VALUE --------------------------------------------------------------------------------------------------- TEST_TS SQL>
在创建过程中尝试创建新表空间而不是引用现有表空间仍然会导致错误。
CONN / AS SYSDBA -- Clean up. ALTER PLUGGABLE DATABASE pdb3 CLOSE; DROP PLUGGABLE DATABASE pdb3 INCLUDING DATAFILES; CREATE PLUGGABLE DATABASE pdb3 FROM pdb2 DEFAULT TABLESPACE another_ts DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M; DEFAULT TABLESPACE another_ts DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M * ERROR at line 2: ORA-00922: missing or invalid option SQL>