OCA/OCP Oracle 数据库12c考试指南读书笔记:第33章:Managing Storage, Security, Availability, Performance in CDB/PDB

多租户环境下的空间管理

多租户环境下,表空间和数据文件都是与容器关联的,或者是CDB或者是PDB。

表空间架构

容器ID和表空间名唯一确定表空间。

SQL> select con_id, c.name c, t.name t, d.name d from v$containers c join v$tablespace t using (con_id) join v$datafile d using (con_id, ts#) order by 1,2,3;

    CON_ID C          T          D
---------- ---------- ---------- ----------------------------------------------------------------------------------------------------
         1 CDB$ROOT   SYSAUX     /opt/oracle/oradata/ORCLCDB/sysaux01.dbf
         1 CDB$ROOT   SYSTEM     /opt/oracle/oradata/ORCLCDB/system01.dbf
         1 CDB$ROOT   UNDOTBS1   /opt/oracle/oradata/ORCLCDB/undotbs01.dbf
         1 CDB$ROOT   USERS      /opt/oracle/oradata/ORCLCDB/users01.dbf
         2 PDB$SEED   SYSAUX     /opt/oracle/oradata/ORCLCDB/pdbseed/sysaux01.dbf
         2 PDB$SEED   SYSTEM     /opt/oracle/oradata/ORCLCDB/pdbseed/system01.dbf
         2 PDB$SEED   UNDOTBS1   /opt/oracle/oradata/ORCLCDB/pdbseed/undotbs01.dbf
         3 ORCLPDB1   SYSAUX     /opt/oracle/oradata/ORCLCDB/ORCLPDB1/sysaux01.dbf
         3 ORCLPDB1   SYSTEM     /opt/oracle/oradata/ORCLCDB/ORCLPDB1/system01.dbf
         3 ORCLPDB1   UNDOTBS1   /opt/oracle/oradata/ORCLCDB/ORCLPDB1/undotbs01.dbf
         3 ORCLPDB1   USERS      /opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf
         4 ORCLPDB2   SYSAUX     /opt/oracle/oradata/ORCLCDB/9B24E21F078450CDE0530100007FB288/datafile/o1_mf_sysaux_h0vql1ps_.dbf
         4 ORCLPDB2   SYSTEM     /opt/oracle/oradata/ORCLCDB/9B24E21F078450CDE0530100007FB288/datafile/o1_mf_system_h0vql1pm_.dbf
         4 ORCLPDB2   UNDOTBS1   /opt/oracle/oradata/ORCLCDB/9B24E21F078450CDE0530100007FB288/datafile/o1_mf_undotbs1_h0vql1py_.dbf
         4 ORCLPDB2   USERS      /opt/oracle/oradata/ORCLCDB/9B24E21F078450CDE0530100007FB288/datafile/o1_mf_users_h0vql1q4_.dbf

15 rows selected.

可以为每一个PDB设置空间限制:

alter pluggable database orclpdb1 storage(maxsize 2g);

使用 CREATE TABLESPACE

命令和non-CDB是一样的。
根据所在容器,CDB_TABLESPACES ,CDB_DATA_FILE,V$TABLESPACEV$DATAFILE可显示所有和所在PDB的表空间。
为方便管理,建议为PDB表空间使用单独目录。

PDB中的默认临时和永久表空间

alter session set container=orclpdb2;
create tablespace orclpdb2_dflt datafile size 100m autoextend on next 100m maxsize 1g;
alter database default tablespace orclpdb2_dflt;
create temporary tablespace temp_dflt tempfile size 100m autoextend on next 100m maxsize 500m;
alter database default temporary tablespace temp_dflt;

管理COMMON和本地用户,角色和权限

CDB中可定义common用户和角色,PDB中可定义本地用户和角色。

Common 和本地用户

两类用户,common和本地。common用户以c##为前缀(由COMMON_USER_PREFIX 定义),自动在PDB中建立。

create user c##user01 identified by Welcome1;

根容器中不能有本地用户。
common用户不代表在PDB中有相同的权限,默认没有任何权限,需要显式赋予。

$ rlwrap sqlplus c##user01/Welcome1@orclcdb

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jan 2 22:25:51 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

ERROR:
ORA-01045: user C##USER01 lacks CREATE SESSION privilege; logon denied

SQL> grant create session, set container to c##user01;

Grant succeeded.
$ rlwrap sqlplus c##user01/Welcome1@orclcdb

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jan 2 22:27:38 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> alter session set container=orclpdb1;
ERROR:
ORA-01031: insufficient privileges

SQL> grant create session, set container to c##user01 container=all;

Grant succeeded.

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[oracle@oracle-19c-vagrant ~]$ rlwrap sqlplus c##user01/Welcome1@orclcdb

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jan 2 22:29:15 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Last Successful login time: Thu Jan 02 2020 22:27:38 +08:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> alter session set container=orclpdb1;

Session altered.

全局和本地赋权

grant ... container=orclpdb1;
grant ... container=all;
grant ... container=current;

管理Common和本地角色

和用户一样,common角色以c##为前缀。

create role c##role1;
grant c##role1 to user01;

运行Common用户访问指定PDB中的数据

两类共享对象,都是link,分布为object link和metadata link。前者将PDB与根容器中的表连接,所有每个PDB看到同样的内容;后者是根容器中的内容和PDB中私有内容的合并,如dba_users。

-- dba_users中没有con_id,以下是在PDB中执行
SQL> select username, common from dba_users;
USERNAME                 COM
------------------------ ---
SYS                      YES
SYSTEM                   YES
XS$NULL                  YES
LBACSYS                  YES
OUTLN                    YES
DBSNMP                   YES
APPQOSSYS                YES
DBSFWUSER                YES
GGSYS                    YES
ANONYMOUS                YES
CTXSYS                   YES
DVSYS                    YES
DVF                      YES
GSMADMIN_INTERNAL        YES
MDSYS                    YES
OLAPSYS                  YES
XDB                      YES
WMSYS                    YES
GSMCATUSER               YES
MDDATA                   YES
SYSBACKUP                YES
REMOTE_SCHEDULER_AGENT   YES
PDBADMIN                 NO
GSMUSER                  YES
SYSRAC                   YES
HR                       NO
BI                       NO
OJVMSYS                  YES
SI_INFORMTN_SCHEMA       YES
AUDSYS                   YES
DIP                      YES
ORDPLUGINS               YES
OE                       NO
PM                       NO
C##USER01                YES
SYSKM                    YES
ORDDATA                  YES
ORACLE_OCM               YES
SYS$UMF                  YES
IX                       NO
SYSDG                    YES
ORDSYS                   YES
SH                       NO

43 rows selected.

SQL> select con_id, username, common from cdb_users order by username, con_id;

    CON_ID USERNAME                 COM
---------- ------------------------ ---
         1 ANONYMOUS                YES
         3 ANONYMOUS                YES
         4 ANONYMOUS                YES
         1 APPQOSSYS                YES
         3 APPQOSSYS                YES
         4 APPQOSSYS                YES
         1 AUDSYS                   YES
         3 AUDSYS                   YES
         4 AUDSYS                   YES
         3 BI                       NO
         1 C##USER01                YES
         3 C##USER01                YES
         4 C##USER01                YES
         1 CTXSYS                   YES
         3 CTXSYS                   YES
         4 CTXSYS                   YES
         1 DBSFWUSER                YES
         3 DBSFWUSER                YES
         4 DBSFWUSER                YES
         1 DBSNMP                   YES
         3 DBSNMP                   YES
         4 DBSNMP                   YES
         1 DIP                      YES
         3 DIP                      YES
         4 DIP                      YES
         1 DVF                      YES
         3 DVF                      YES
         4 DVF                      YES
         1 DVSYS                    YES
         3 DVSYS                    YES
         4 DVSYS                    YES
         1 GGSYS                    YES
         3 GGSYS                    YES
         4 GGSYS                    YES
         1 GSMADMIN_INTERNAL        YES
         3 GSMADMIN_INTERNAL        YES
         4 GSMADMIN_INTERNAL        YES
         1 GSMCATUSER               YES
         3 GSMCATUSER               YES
         4 GSMCATUSER               YES
         1 GSMROOTUSER              YES
         4 GSMROOTUSER              YES
         1 GSMUSER                  YES
         3 GSMUSER                  YES
         4 GSMUSER                  YES
         3 HR                       NO
         3 IX                       NO
...

示例:

 conn system/Welcome1@orclcdb
 select con_id, username, common, oracle_maintained from cdb_users order by 1,2;
 select con_id, username, common, oracle_maintained from cdb_users order by 2,1;
 create user user1 identified by oracle; -- failed
 create user c##user1 identified by oracle;
 show parameter common_user_prefix; -- c##
 create user c##user2 identified by oracle container=all;
 grant dba to c##user1; -- only grant to user in root container
 grant dba to c##user2 container=all;
 conn c##user1/oracle@orclcdb
 conn c##user1/oracle@orclpdb1 -- failed because of no privilege
 conn c##user2/oracle@orclpdb1
 create user locala identified by oracle container=current;
 grant dba to locala;
 connect locala/oracle@orclpdb1
 select * from session_roles; -- DBA included
 conn sys/Welcome1@orclcdb as sysdba
 -- new created user is not oracle maintained
 select con_id, username, common, oracle_maintained from cdb_users order by 1,2; 
 conn system/Welcome1@orclcdb
 select role,  common, oracle_maintained, con_id from cdb_roles order by role;
 create role myrole1 container=current; -- failed, only common role can be created
 create role c##myrole1 container=current; -- failed, current is not allowed
 create role c##myrole1 container=all;
  create role c##myrole2 container=all;
  grant c##myrole1 to c##user2 container=all;
  grant c##myrole2 to c##user2 container=orclpdb1; -- failed, syntax error
   conn system/Welcome1@orclpdb1;
  grant c##myrole1 to c##user2 container=all; -- failed, not allowed
  grant c##myrole1 to c##user2 container=current;
   conn system/Welcome1@orclcdb
   select grantee, granted_role, common, con_id from cdb_role_privs where grantee like 'C##%' order by 1,2,3;
GRANTEE      GRANTED_ROLE COM     CON_ID
------------ ------------ --- ----------
C##USER1     DBA          NO           1
C##USER2     C##MYROLE1   NO           3
C##USER2     C##MYROLE1   YES          4
C##USER2     C##MYROLE1   YES          1
C##USER2     C##MYROLE1   YES          3
C##USER2     DBA          YES          3
C##USER2     DBA          YES          4
C##USER2     DBA          YES          1

8 rows selected.
conn c##user2/oracle@orclpdb1
select * from session_roles; -- DBA & C##MYROLE1

由Oracle脚本创建的对象会将oracle_maintained设置为Y。这些对象不要手工改,而是仍通过Oracle提供的脚本修改。

多租户环境下的审计

传统审计仍有效(AUDIT_%参数和Audit命令),但多租户环境下建议使用统一审计。
当前容器的审计记录通过视图UNIFIED_AUDIT_TRAIL查看,CDB_UNIFIED_AUDIT_TRAIL 是所有容器的审计记录。
PDB中建立的policy只对PDB有效,CDB中建立的policy可在所有PDB中启用。
示例:

conn / as sysdba -- root container
create audit policy audit_sys actions all
when 'sys_context(''userenv'', ''isdba'')=''TRUE'''
evaluate per statement;
audit policy audit_sys whenever successful;
conn sys/Welcome1@orclpdb1 as sysdba
noaudit policy audit_sys; -- failed
select count(*) from hr.employees;
select con_id, dbusername, sql_text from cdb_unified_audit_trail where unified_audit_policies='AUDIT_SYS' and sql_text like '%emp%';
-- 都成功了,不知为何没有结果

多租户备份与恢复

可以备份整个CDB,单个PDB,表空间,数据文件。可以用RMAN DUPLICATE拷贝所有或指定的PDB。
CDB中的数据恢复建议器和non-CDB没有区别:

list failure;
advise failure;
repair failure;

备份CDB和单个PDB

$ rman target /
RMAN> report schema;

Report of database schema for database with db_unique_name ORCLCDB

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    910      SYSTEM               YES     /opt/oracle/oradata/ORCLCDB/system01.dbf
3    590      SYSAUX               NO      /opt/oracle/oradata/ORCLCDB/sysaux01.dbf
4    330      UNDOTBS1             YES     /opt/oracle/oradata/ORCLCDB/undotbs01.dbf
5    270      PDB$SEED:SYSTEM      NO      /opt/oracle/oradata/ORCLCDB/pdbseed/system01.dbf
6    320      PDB$SEED:SYSAUX      NO      /opt/oracle/oradata/ORCLCDB/pdbseed/sysaux01.dbf
7    5        USERS                NO      /opt/oracle/oradata/ORCLCDB/users01.dbf
8    100      PDB$SEED:UNDOTBS1    NO      /opt/oracle/oradata/ORCLCDB/pdbseed/undotbs01.dbf
9    280      ORCLPDB1:SYSTEM      YES     /opt/oracle/oradata/ORCLCDB/ORCLPDB1/system01.dbf
10   350      ORCLPDB1:SYSAUX      NO      /opt/oracle/oradata/ORCLCDB/ORCLPDB1/sysaux01.dbf
11   100      ORCLPDB1:UNDOTBS1    YES     /opt/oracle/oradata/ORCLCDB/ORCLPDB1/undotbs01.dbf
12   207      ORCLPDB1:USERS       NO      /opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf
17   900      ORCLPDB2:SYSTEM      YES     /opt/oracle/oradata/ORCLCDB/9B24E21F078450CDE0530100007FB288/datafile/o1_mf_system_h0vql1pm_.dbf
18   530      ORCLPDB2:SYSAUX      NO      /opt/oracle/oradata/ORCLCDB/9B24E21F078450CDE0530100007FB288/datafile/o1_mf_sysaux_h0vql1ps_.dbf
19   955      ORCLPDB2:UNDOTBS1    YES     /opt/oracle/oradata/ORCLCDB/9B24E21F078450CDE0530100007FB288/datafile/o1_mf_undotbs1_h0vql1py_.dbf
20   5        ORCLPDB2:USERS       NO      /opt/oracle/oradata/ORCLCDB/9B24E21F078450CDE0530100007FB288/datafile/o1_mf_users_h0vql1q4_.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    32       TEMP                 32767       /opt/oracle/oradata/ORCLCDB/temp01.dbf
2    36       PDB$SEED:TEMP        32767       /opt/oracle/oradata/ORCLCDB/pdbseed/temp012020-01-02_14-54-57-386-PM.dbf
3    36       ORCLPDB1:TEMP        32767       /opt/oracle/oradata/ORCLCDB/ORCLPDB1/temp01.dbf
4    32       ORCLPDB2:TEMP        32767       /opt/oracle/oradata/ORCLCDB/9B24E21F078450CDE0530100007FB288/datafile/o1_mf_temp_h0vql1q3_.dbf

备份命令示例,默认的备份位置在$ORACLE_HOME/dbs下:

rman target /
backup database;
backup pluggable database orclpdb1;
backup tablespace orclpdb1:users, orclpdb1:sysaux;
rman target sys/Welcome1@orclpdb1 -- rman连到PDB
backup database; -- 备份当前PDB
backup tablespace users;

Restore 和Recovery

从mount到open状态,实例恢复会自动进行。
对于CDB,最重要的是SYSTEM和UNDO。对于PDB,最重要的是SYSTEM。

使用RMAN复制PDB

CREATE PLUGGABLE DATABASE . . . FROM可以复制PDB,但RMAN更灵活,可复制整个CDB或部分PDB。需要启动一个辅助实例,辅助实例的初始化参数需设置ENABLE_PLUGGABLE_DATABASE=TRUE.
以下为部分命令示例:

duplicate database to orclcdb2 pluggable database pdb1, pdb2...;
duplicate database to orclcdb2 skip pluggable database pdb3, pdb4...;
duplicate database to orclcdb2 pluggable database pdb1, pdb2... tablespace pdb3:users;

多租户性能监控与调优

通常,数据库和实例的调优在根容器做,SQL的调优在PDB中做。方法论和non-CDB是一样的:

  1. 发现问题,设定目标
  2. 确定可能原因
  3. 给出解决方案
  4. 确定方案是否有效
  5. 重复2直到问题解决
    有些区别是PDB可能影响其它PDB, 因此需要资源管理器来控制。

调优实例

CDB就是单个实例。CDB中的内存调整和non-CDB一样。需要将CDB中所有PDB的内存需求合计(但需要做一些扣减,因不是所有PDB都是活动的)。使用Enterprise Manager可以方便的监控。
资源分配策略有三种,None(默认,无限制的,有争用时平均分配),保证最小值,保证最小/限制最大。
资源分配依靠权重(share)。
CDB只有一个spfile,存储所有参数,但很多参数可以在PDB一级修改:

SQL> select ispdb_modifiable, count(ispdb_modifiable) from v$parameter group by ispdb_modifiable;

ISPDB COUNT(ISPDB_MODIFIABLE)
----- -----------------------
TRUE                      191
FALSE                     254

可以查询PDB一级设置过的参数,本例中ORCLPDB2是从non-CDB转过来的:

SQL> select pdb_uid, pdb_name, name, value$ from pdb_spfile$ ps join cdb_pdbs cp on ps.pdb_uid=cp.con_uid;

   PDB_UID PDB_NAME   NAME                 VALUE$
---------- ---------- -------------------- ------------------------------------
 991076965 ORCLPDB2   sga_target           1207959552
 991076965 ORCLPDB2   open_cursors         300
 991076965 ORCLPDB2   nls_language         'AMERICAN'
 991076965 ORCLPDB2   nls_territory        'AMERICA'
 991076965 ORCLPDB2   pga_aggregate_target 402653184

使用内存建议器

CDB中的buffer cache被所有PDB共享。因此block中是存了CON_ID的。
在CDB层面调,PGA_AGGREGATE_LIMIT是硬限制。
PDB层面可调的为SORT_AREA_SIZE 和 SORT_AREA_RETAINED_SIZE。

管理PDB之间和PDB内的资源分配

CDB层面必须创建资源计划,其它和non-CDB一样。

通过Share管理PDB间资源

CDB中的PDB竞争的资源有CPU,parallel servers,如果是Exadata,还有I/O。
默认每个插入的PDB得到一个share。
最小保证的CPU是通过share的合计来计算的。

创建和修改资源管理计划

PDB内的资源可进一步细化控制。

限制PDB资源使用的参数

UTILIZATION_LIMIT和PARALLEL_SERVER_LIMIT实施控制。前者限制CPU, I/O和parallel servers。后者限制parallel server limit。

创建CDB资源计划

和non-CDB类似,多了一个对PDB的限制。在根容器中定义。使用DBMS_RESOURCE_MANAGER定义,步骤为:

  1. CREATE_PENDING_AREA
  2. CREATE_CDB_PLAN
  3. CREATE_CDB_PLAN_DIRECTIVE
  4. CREATE_CDB_DEFAULT_DIRECTIVE
  5. UPDATE_CDB_AUTOTASK_DIRECTIVE
  6. VALIDATE_PENDING_AREA
  7. SUBMIT_PENDING_AREA

其它包括UPDATE_CDB_PLAN,DELETE_CDB_PLAN,UPDATE_CDB_PLAN_DIRECTIVE 和DELETE_CDB_PLAN_DIRECTIVE。
示例:

conn / as sysdba
exec dbms_resource_manager.create_pending_area();
begin
	dbms_resource_manager.create_cdb_plan(
		plan => 'low_prio_apps',
		comment => 'orclpdb1 and orclpdb2 database low priority'
	);
end;
/
begin
	dbms_resource_manager.create_cdb_plan_directive(
		plan => 'low_prio_apps',
		pluggable_database => 'orclpdb1',
		shares => 1,
		utilization_limit => 50,
		parallel_server_limit => 50
	);
end;
/
begin
	dbms_resource_manager.create_cdb_plan_directive(
		plan => 'low_prio_apps',
		pluggable_database => 'orclpdb2',
		shares => 1,
		utilization_limit => 75,
		parallel_server_limit => 75
	);
end;
/
exec dbms_resource_manager.validate_pending_area();
exec dbms_resource_manager.submit_pending_area();
alter system set resource_manager_plan='low_prio_apps';

以下是设置前后的resource plan:

SQL> show parameter resource

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
resource_limit                       boolean     TRUE
resource_manage_goldengate           boolean     FALSE
resource_manager_cpu_allocation      integer     2
resource_manager_plan                string      SCHEDULER[0x4D57]:DEFAULT_MAIN
                                                 TENANCE_PLAN
SQL> alter system set resource_manager_plan='low_prio_apps';

System altered.

SQL> show parameter resource

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
resource_limit                       boolean     TRUE
resource_manage_goldengate           boolean     FALSE
resource_manager_cpu_allocation      integer     2
resource_manager_plan                string      low_prio_apps

查看资源计划Directive

SQL> select plan, pluggable_database, shares, utilization_limit, parallel_server_limit from dba_cdb_rsrc_plan_directives order by plan, pluggable_database;

PLAN                     PLUGGABLE_DATABASE                   SHARES UTILIZATION_LIMIT PARALLEL_SERVER_LIMIT
------------------------ -------------------------------- ---------- ----------------- ---------------------
DEFAULT_CDB_PLAN         ORA$AUTOTASK                                               90
DEFAULT_CDB_PLAN         ORA$DEFAULT_PDB_DIRECTIVE                 1
DEFAULT_MAINTENANCE_PLAN ORA$AUTOTASK                                               90
DEFAULT_MAINTENANCE_PLAN ORA$DEFAULT_PDB_DIRECTIVE                 1
LOW_PRIO_APPS            ORA$AUTOTASK                                               90
LOW_PRIO_APPS            ORA$DEFAULT_PDB_DIRECTIVE                 1
LOW_PRIO_APPS            ORCLPDB1                                  1                50                    50
LOW_PRIO_APPS            ORCLPDB2                                  1                75                    75
ORA$INTERNAL_CDB_PLAN    ORA$AUTOTASK
ORA$INTERNAL_CDB_PLAN    ORA$DEFAULT_PDB_DIRECTIVE
ORA$QOS_CDB_PLAN         ORA$AUTOTASK                                               90
ORA$QOS_CDB_PLAN         ORA$DEFAULT_PDB_DIRECTIVE                 1

12 rows selected.

在12c前,资源计划的视图为DBA_RSRC_PLAN_DIRECTIVES

管理PDB内的资源

和non-CDB类似,叫做PDB资源计划
PDB资源计划和non-CDB的区别如下:

资源计划特性 Non-CDB PDB
多层级plan
最多消费组 32 8
subplan
CREATE_PLAN_DIRECTIVE参数 N/A SHARE
CREATE_PLAN_DIRECTIVE参数 MAX_UTILIZATION_LIMIT UTILIZATION_LIMIT
CREATE_PLAN_DIRECTIVE参数 PARALLEL_TARGET_PERCENTAGE PARALLEL_SERVER_LIMIT

视图仍可查询V$RSRC_PLAN,如果CON_ID=1,则为CDB资源计划:

SQL> select * from V$RSRC_PLAN where con_id = 1;

        ID NAME                 IS_TO CPU INS PARALLEL_SERVERS_ACTIVE PARALLEL_SERVERS_TOTAL
---------- -------------------- ----- --- --- ----------------------- ----------------------
PARALLEL_EXECUTION_MANAGED           CON_ID DIRECTIVE_TYPE                       SHARES UTILIZATION_LIMIT
-------------------------------- ---------- -------------------------------- ---------- -----------------
PARALLEL_SERVER_LIMIT MEMORY_MIN MEMORY_LIMIT PROFILE
--------------------- ---------- ------------ --------------------------------
     73301 LOW_PRIO_APPS        TRUE  ON  OFF                       0                     40
FULL                                      1

SQL> select * from V$RSRC_PLAN;

        ID NAME                 IS_TO CPU INS PARALLEL_SERVERS_ACTIVE PARALLEL_SERVERS_TOTAL
---------- -------------------- ----- --- --- ----------------------- ----------------------
PARALLEL_EXECUTION_MANAGED           CON_ID DIRECTIVE_TYPE                       SHARES UTILIZATION_LIMIT
-------------------------------- ---------- -------------------------------- ---------- -----------------
PARALLEL_SERVER_LIMIT MEMORY_MIN MEMORY_LIMIT PROFILE
--------------------- ---------- ------------ --------------------------------
     73301 LOW_PRIO_APPS        TRUE  ON  OFF                       0                     40
FULL                                      1


     19630 INTERNAL_PLAN        TRUE  ON  OFF                       0                     16
FULL                                      2 DEFAULT_DIRECTIVE                         1


     19630 INTERNAL_PLAN        TRUE  ON  OFF                       0                     16
FULL                                      3 PDB                                       1                50
                   50

     19630 DEFAULT_MAINTENANCE_ TRUE  ON  OFF                       0                     16
           PLAN
FULL                                      4 PDB                                       1                75
                   75

迁移Non-CDB资源计划

如果插入的non-CDB有资源计划,插入时会做转换,之前的资源计划会保留在DBA_RSRC_PLAN_DIRECTIVES中,其STATUS为LEGACY

执行 DATABASE REPLAY

你可将之前多个non-CDB的负载在多租户环境下重放,以评估整合的效果。

捕捉源数据库负载

大致步骤为:

  1. 捕捉non-CDB或PDB的工作负载,一般为8-24小时,也就是1天
  2. 导出数据库AWR快照(可选)
  3. 恢复数据库到目标平台
  4. 修改导入的数据库,如升级到12c
  5. 将负载文件拷贝到目标平台
  6. 预先理工作负载(一次性)
  7. 对于其它备选数据库,重复1-6,捕捉的时段最好保持一致
  8. 配置目标平台用于重放
  9. 在目标平台重放所有PDB的工作负载

处理目标平台的工作负载

目标CDB的工作负载重放: Consolidated Replay

重放时,需要重新映射数据库连接,需要定义重放日程。由于需要多次测试,可利用闪回和时间点恢复保存和恢复到测试前状态。同时和生产库一样,也需要抓取AWR快照。

2020年1月4日13:54(完)

发布了342 篇原创文章 · 获赞 42 · 访问量 54万+

猜你喜欢

转载自blog.csdn.net/stevensxiao/article/details/103811785