[Oracle19C 数据库管理] 管理PDB

更改PDB的打开模式

RESTRICT模式

维护时使用,可以让只有RESTRICT权限的用户才能连接到数据库,其他用户无法连接。
ALTER PLUGGABLE DATABASE 数据库名 CLOSE;
ALTER PLUGGABLE DATABASE 数据库名 OPEN RESTRICTED;

SQL> ALTER PLUGGABLE DATABASE pdb1 OPEN RESTRICTED;

Pluggable database altered.

SQL> SHOW PDBS;

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

只读模式

ALTER PLUGGABLE DATABASE 数据库名 CLOSE;
ALTER PLUGGABLE DATABASE 数据库名 OPEN READ ONLY;

SQL> ALTER PLUGGABLE DATABASE PDB1 OPEN READ ONLY;

Pluggable database altered.

SQL> SHOW PDBS

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

修改PDB的设置

在PDB1中创建表空间tbs1

SQL> CREATE TABLESPACE tbs1 DATAFILE '/u01/app/oracle/oradata/TESTCDB/pdb1/tbs1_1.dbf' SIZE 100M;

Tablespace created.

SQL> SELECT FILE_NAME FROM DBA_DATA_FILES;

FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/TESTCDB/pdb1/tbs1_1.dbf   <===新创建的表空间。

数据文件offline与online

ALTER PLUGGABLE DATABASE DATAFILE '数据文件路径' OFFLINE ;
RECOVERY DATAFILE '数据文件路径'
ALTER PLUGGABLE DATABASE DATAFILE '数据文件路径' ONLINE ;

ALTER PLUGGABLE DATABASE DATAFILE '/u01/app/oracle/oradata/TESTCDB/pdb1/tbs1_1.dbf' OFFLINE;
RECOVERY DATAFILE ''/u01/app/oracle/oradata/TESTCDB/pdb1/tbs1_1.dbf';
ALTER PLUGGABLE DATABASE DATAFILE '/u01/app/oracle/oradata/TESTCDB/pdb1/tbs1_1.dbf' ONLINE;

修改默认永久表空间

修改默认永久表空间,可以防止用户登陆后,将数据写在系统表空间上。

ALTER PLUGGABLE DATABASE DEFAULT TABLESPACE 表空间名;

SQL> ALTER PLUGGABLE DATABASE DEFAULT TABLESPACE TBS1;

Pluggable database altered.

SQL>  SELECT NAME, VALUE$ FROM PROPS$ WHERE NAME='DEFAULT_PERMANENT_TABLESPACE';

NAME                           VALUE$
------------------------------ --------------------
DEFAULT_PERMANENT_TABLESPACE   TBS1

修改默认临时表空间

ALTER PLUGGABLE DEFAULT TEMPORARY TABLESPACE 临时表空间名;

通过PROPS$ 查看临时表空间
SQL> SELECT NAME, VALUE$ FROM PROPS$ WHERE NAME='DEFAULT_TEMP_TABLESPACE';

NAME                           VALUE$
------------------------------ --------------------
DEFAULT_TEMP_TABLESPACE        TEMP

通过DBA_TEMP_FILES查看临时表空间对应的数据文件
SQL> SELECT FILE_NAME, TABLESPACE_NAME  FROM DBA_TEMP_FILES;

FILE_NAME                                                    TABLESPACE
------------------------------------------------------------ ----------
/u01/app/oracle/oradata/TESTCDB/pdb1/temp01.dbf              TEMP

创建新的临时表空间PDB1_TEMP以及数据文件。
SQL> CREATE TEMPORARY TABLESPACE PDB1_TEMP TEMPFILE '/u01/app/oracle/oradata/TESTCDB/pdb1/pdb1_temp01.dbf' SIZE 100M;

Tablespace created.

修改默认临时表空间到新创建的临时表空间。
SQL> ALTER PLUGGABLE DATABASE DEFAULT TEMPORARY TABLESPACE PDB1_TEMP;

Pluggable database altered.

再次查看PROPS$, 默认临时表空间已经修改。
SQL> SELECT NAME, VALUE$ FROM PROPS$ WHERE NAME='DEFAULT_TEMP_TABLESPACE';

NAME                           VALUE$
------------------------------ --------------------
DEFAULT_TEMP_TABLESPACE        PDB1_TEMP

通过DBA_TEMP_FILES查看临时表空间对应的数据文件, 能看到新创建的临时表空间和数据文件。
SQL> SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_TEMP_FILES;

TABLESPACE FILE_NAME
---------- ------------------------------------------------------------
PDB1_TEMP  /u01/app/oracle/oradata/TESTCDB/pdb1/pdb1_temp01.dbf
TEMP       /u01/app/oracle/oradata/TESTCDB/pdb1/temp01.dbf

设置PDB的最大容量

一般不会设置最大容量。

ALTER PLUGGABLE DATABASE STORAGE (MAXSIZE 2G);

更改PDB的GLOBAL NAME

数据库应当置于 RESTRICT MODE.
在CDB$ROOT下,ALTER PLUGGABLE DATABASE PDB名 OPEN RESTRICTED;
在PDB下, ALTER PLUGGABLE DATABASE RENAME GLOBAL_NAME TO 新PDB名;

SQL> CONN SYS/ORACLE AS SYSDBA
Connected.
SQL> ALTER PLUGGABLE DATABASE PDB1 CLOSE;

Pluggable database altered.

SQL> ALTER PLUGGABLE DATABASE PDB1 OPEN RESTRICTED;

Pluggable database altered.

SQL> ALTER SESSION SET CONTAINER=PDB1;

Session altered.

SQL> ALTER PLUGGABLE DATABASE RENAME GLOBAL_NAME TO PDB_OPERA;

Pluggable database altered.

SQL> SHOW PDBS

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 PDB_OPERA                      READ WRITE YES

SQL> ! lsnrctl status
Service "pdb_opera" has 1 instance(s).
  Instance "testcdb", status READY, has 1 handler(s) for this service...


改名后,并不会改变文件存放的位置。
SQL> SELECT FILE_NAME , TABLESPACE_NAME FROM CDB_DATA_FILES;

FILE_NAME                                                    TABLESPACE
------------------------------------------------------------ ----------
/u01/app/oracle/oradata/TESTCDB/pdb1/system01.dbf            SYSTEM
/u01/app/oracle/oradata/TESTCDB/pdb1/sysaux01.dbf            SYSAUX
/u01/app/oracle/oradata/TESTCDB/pdb1/undotbs01.dbf           UNDOTBS1
/u01/app/oracle/oradata/TESTCDB/pdb1/users01.dbf             USERS
/u01/app/oracle/oradata/TESTCDB/pdb1/tbs1_1.dbf              TBS1

PDB级别修改初始化参数

查看一个参数是否可以在PDB级别修改,查询V$PARAMETER里面的ISPDB_MODIFIABLE字段。

SQL> SELECT NAME, ISPDB_MODIFIABLE FROM V$PARAMETER WHERE NAME='ddl_lock_timeout';

NAME ISPDB


ddl_lock_timeout TRUE

CDB级别,DDL_LOCK_TIMEOUT是0.
SQL> SHOW PARAMETER DDL_LOCK_TIMEOUT;

NAME TYPE VALUE


ddl_lock_timeout integer 0

切换到PDB级别,修改初始化参数为10
SQL> ALTER SESSION SET CONTAINER=PDB1;

Session altered.

SQL> ALTER SYSTEM SET DDL_LOCK_TIMEOUT=10;

System altered.

切换回CDB级别, 看到初始化参数仍然为0.
SQL> CONN / AS SYSDBA;
Connected.
SQL> SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME ='ddl_lock_timeout';

NAME VALUE


ddl_lock_timeout 0


可以通过V$SYSTEM_PARAMETER查看各个PDB的参数值。

SQL> SELECT NAME, VALUE, ISPDB_MODIFIABLE, CON_ID FROM V$SYSTEM_PARAMETER
2 WHERE NAME='ddl_lock_timeout';

NAME VALUE ISPDB CON_ID


ddl_lock_timeout 0 TRUE 0
ddl_lock_timeout 10 TRUE 3


# ALTER SYSTEM命令对应的PDB级别
- ALTER SYSTEM FLUSH SHARED_POOL            只影响PDB级别
- ALTER SYSTEM FLUSH BUFFER_CACHE           只影响PDB级别
- ALTER SYSTEM ENABLE RESTRICTED SESSION    只影响PDB级别
- ALTER SYSTEM KILL SESSION                 只影响PDB级别
- ALTER SYSTEM SET 参数                     只影响PDB级别

- ALTER SYSTEM CHECKPOINT                   无论在哪执行,影响CDB级别。
- ALTER SYSTEM SWITCH LOGFILE               不允许在PDB级别执行。

# 删除PDB
关闭PDB
ALTER PLUGGABLE DATABASE PDB名 CLOSE;

删除PDB并关联删除数据文件。
DROP PLUGGABLE DATABASE PDB名 INCLUDING DATAFILES

# CDB的默认管理用户
当创建一个不包含PDB的CDB时,只会创建sys和system用户作为管理用户。当创建一个或多个PDB的时候,会创建PDBADMIN管理用户。
PDBADMIN的默认权限是PDB_DBA,实际运作中,需要再给他授权DBA角色。

SQL> conn sys/oracle@pdb1 as sysdba
Connected.

SQL> GRANT DBA TO PDBADMIN;
Grant succeeded.

posted on 2023-01-15 16:49  LeoZhangJing  阅读(1153)  评论(0编辑  收藏  举报

导航