Managing a Multitenant Environment 官网文档链接:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/admin/managing-a-multitenant-environment.html#GUID-93F1E584-D309-4301-82E0-AD0E60D4977C
CDB 的创立:
如果要应用可插拔数据库的性能,须要在创立数据库时专门指定启用可插拔数据库,创立 CDB 通常有如下两种形式:
· 应用 DBCA 图形工具创立 CDB\
这里须要留神的是 Oracle 12.2 之后反对 LOCAL UNDO,这里留神须要手动要勾选 LOCAL UNDO 选项。
· CREATE DATABASE 语句创立 CDB\
在应用脚本创立 CDB 时 Oracle 提供了两种办法,一种是应用 OMF,另外一种是 非 OMF** 的形式,留神参数文件中须要将 ENABLE_PLUGGABLE_DATABASE 设置为 TRUE。
这里演示应用非 OMF 形式创立 CDB,数据名称为 ora12c:\
1. 设置 ENABLE_PLUGGABLE_DATABASE 参数为 TRUE,参数文件如下:
audit_file_dest=’/u01/app/oracle/admin/ora12c/adump’
audit_trail=’none’
compatible=’12.2.0′
control_files=’/u01/app/oracle/oradata/ora12c/control01.ctl’,’/u01/app/oracle/oradata/ora12c/control02.ctl’
db_block_size=8192
db_domain=’linux.com’
db_name=’ora12c’
diagnostic_dest=’/u01/app/oracle’
enable_pluggable_database=true
memory_target=801m
nls_language=’AMERICAN’
nls_territory=’AMERICA’
remote_login_passwordfile=’EXCLUSIVE’
undo_tablespace=’UNDOTBS1′
2. 创立相应目录以及设置环境变量
export ORACLE_SID=ora12c
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch: **$ORACLE_HOME/perl/bin**:$ORACLE_HOME/jdk/bin:$PATH
3.CREATE DATABASE 脚本 createdb.sql 如下:
CREATE DATABASE ora12c
USER SYS IDENTIFIED BY oracle
USER SYSTEM IDENTIFIED BY oracle
LOGFILE GROUP 1 (‘/u01/app/oracle/oradata/ora12c/redo01a.log’,’/u01/app/oracle/oradata/ora12c/redo01b.log’)
SIZE 100M BLOCKSIZE 512,
GROUP 2 (‘/u01/app/oracle/oradata/ora12c/redo02a.log’,’/u01/app/oracle/oradata/ora12c/redo02b.log’)
SIZE 100M BLOCKSIZE 512,
GROUP 3 (‘/u01/app/oracle/oradata/ora12c/redo03a.log’,’/u01/app/oracle/oradata/ora12c/redo03b.log’)
SIZE 100M BLOCKSIZE 512
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 1024
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE ‘/u01/app/oracle/oradata/ora12c/system01.dbf’
SIZE 700M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
SYSAUX DATAFILE ‘/u01/app/oracle/oradata/ora12c/sysaux01.dbf’
SIZE 550M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
DEFAULT TABLESPACE deftbs
DATAFILE ‘/u01/app/oracle/oradata/ora12c/deftbs01.dbf’
SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE ‘/u01/app/oracle/oradata/ora12c/temp01.dbf’
SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
UNDO TABLESPACE undotbs1
DATAFILE ‘/u01/app/oracle/oradata/ora12c/undotbs01.dbf’
SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
ENABLE PLUGGABLE DATABASE
SEED
FILE_NAME_CONVERT = (‘/u01/app/oracle/oradata/ora12c/’,
‘/u01/app/oracle/oradata/ora12c/pdbseed/’)
SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
SYSAUX DATAFILES SIZE 100M
USER_DATA TABLESPACE usertbs
DATAFILE ‘/u01/app/oracle/oradata/ora12c/pdbseed/usertbs01.dbf’
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
– 留神:官网文档的示例代码中应用了 LOCAL UNDO ON 子句的形式开启 local undo mode,但我的测试环境中测试时如果加有 LOCAL UNDO ON,报:ORA-02165: invalid option for CREATE DATABASE,那我这里在创立 CDB 时不开启 local undo mode,在 CDB 创立实现后手动开启 local undo mode。
这段代码中只有红色字体局部与 PDB 无关,其余局部与创立传统的 Oracle 数据库语句均雷同。
FILE_NAME_CONVERT 子句指定了应用 ’/u01/app/oracle/oradata/ora12c/’ 中的文件名在 ’/u01/app/oracle/oradata/ora12c/pdbseed/’ 中生产 CDB seeds。
USER_DATA_TABLESPACE 子句能够在容器中创立额定的表空间,这个表空间在后续应用 PDB$SEED 创立 PDB 时会被复制到 PDB 中。
4. 将数据库启动到 nomount 状态,而后执行下面 createdb.sql 脚本创立 CDB
**
startup nomount;
@createdb.sql
当数据库创立胜利之后能够看到新建设的数据库被退出到 /etc/oratab 文件中。
cat /etc/oratab
+ASM:/u01/app/11.2.0/grid:N
ora12c: /u01/app/oracle/product/12.2.0/dbhome_1:N
orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N # line added by Agent
newdb:/u01/app/oracle/product/12.2.0/dbhome_1:N
yyh:/u01/app/oracle/product/12.2.0/dbhome_1:N
5. 查看监听,根容器的服务 ora12c.linux.com 曾经被注册到监听中。
Service “ora12c.linux.com” has 1 instance(s).
Instance “ora12c”, status READY, has 1 handler(s) for this service…
6. 运行 catcdb.sql 脚本创立 CDB 相干视图,运行之前请看上面的注意事项:
@?/rdbms/admin/catcdb.sql
注意事项:
1. 在 catcdb.pl 执行过中须要输出两个参数,文档中并没有指出是什么参数,
第一个参数应输出:$ORACLE_HOME/rdbms/admin
第二个参数应输出:catcdb.pl
2. 环境变量中必须将 $ORACLE_HOME/perl/bin 指定到 PATH 中,否则报如下谬误:
Can’t locate Term/ReadKey.pm
3. 须要将 $ORACLE_HOME/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash 中的 catcdb.pl 文件内容:
use Data::Dumper;
use util qw(trim, splitToArray);
use catcon qw(catconSqlplus);
更改为
use Data::Dumper;
use Util qw(trim, splitToArray);
use catcon qw(catconSqlplus);
4. 切换到 $ORACLE_HOME/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash 目录中,而后 sqlplus 连贯到数据,在执行 catcdb.sql,否则报如下谬误:
Can’t locate Util.pm
5. 开启 local undo mode(因为下面再创立 CDB 时没有退出 local undo mode 子句)*
sys. ora12c>shutdown immediate
sys. ora12c>startup upgrade
sys. ora12c>alter database local undo on;
Database altered.
Elapsed: 00:00:00.72
查看是否为 local undo mode:
SELECT property_name, property_value
FROM database_properties
WHERE property_name=’LOCAL_UNDO_ENABLED’;
PROPERTY_NAME PROPERTY_VALUE
LOCAL_UNDO_ENABLED TRUE
Elapsed: 00:00:00.02
sys. ora12c>
重启数据库
shutdown immediate
startup
启动数据库的过程中会在 PDB$SEED 中主动创立 UNDO 表空间,提供给起初采纳 PDB$SEED 形式创立 PDB 所应用。
PS:如果 CDB 中曾经存在多个 PDB,当在根容器中应用 alter database local undo on; 开启 local undo mode 时会主动为每个 PDB 创立 local undo。
6. 查看 CDB 是否曾经创立胜利
sys. ora12c>SELECT dbid, name, open_mode, cdb, con_id FROM v$database;
DBID NAME OPEN_MODE CDB CON_ID
323027068 ORA12C READ WRITE YES 0
Elapsed: 00:00:00.11
sys. ora12c>
此时 CDB 中含有两个容器:根容器 CDB$ROOT 和种子容器 PDB$SEED,如下:
sys. ora12c>SELECT con_id, dbid, con_uid, guid, name FROM v$containers;
CON_ID DBID CON_UID GUID NAME
1 323027068 1 50A57CDEFD150C96E0530838A8C0206E CDB$ROOT
2 1453953285 1453953285 50A57CDEFD160C96E0530838A8C0206E PDB$SEED
Elapsed: 00:00:00.00
sys. ora12c>SELECT con_id, tablespace_name, file_id, file_name
FROM cdb_data_files;
CON_ID TABLESPACE_NAME FILE_ID FILE_NAME
1 SYSTEM 1 /u01/app/oracle/oradata/ora12c/system01.dbf
1 SYSAUX 3 /u01/app/oracle/oradata/ora12c/sysaux01.dbf
1 UNDOTBS1 5 /u01/app/oracle/oradata/ora12c/undotbs01.dbf
1 DEFTBS 6 /u01/app/oracle/oradata/ora12c/deftbs01.dbf
Elapsed: 00:00:00.01
sys. ora12c>show con_id con_name user
CON_ID
1
CON_NAME
CDB$ROOT
USER is “SYS”
sys. ora12c>