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

客服微信

【Oracle OCP】19C多租户- 创建PDB默认表空间

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

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

PDB中默认表空间语法

在 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>