要使用可插拔数据库,必须在创建CBD时,设置可插拔选项。创建CDB,可以有如下方式:
1,使用create database命令手工创建;
2,使用DBCA;
3,通过DBCA生成脚本,然后修改并手工执行;
4,使用RMAN复制现有的CDB。
这里我们只阐述前两种创建CDB的方式,其他方式,各位小伙伴可以自己琢磨。
使用create database命令创建CDB,实际上就是手工建库了。
手工建库的内容,在官方文档的管理员手册中的第二章中的
Creating a Database with the CREATE DATABASE Statement
已有详细描述。这里不做赘述。只说在创建普通数据库也就是non-CDB和CDB时的区别。
1,参数文件部分:
需要添加enable_pluggable_database,并且该参数必须为true。
2,create database语句部分(注意目录需要事先创建):
CREATE DATABASE newcdb
USER SYS IDENTIFIED BY sys_password USER SYSTEM IDENTIFIED BY system_password LOGFILE GROUP 1 ('/u01/logs/my/redo01a.log','/u02/logs/my/redo01b.log')
SIZE 100M,
GROUP 2 ('/u01/logs/my/redo02a.log','/u02/logs/my/redo02b.log')
SIZE 100M,
GROUP 3 ('/u01/logs/my/redo03a.log','/u02/logs/my/redo03b.log')
SIZE 100M
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 1024
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/oradata/newcdb/system01.dbf'
SIZE 700M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
SYSAUX DATAFILE '/u01/app/oracle/oradata/newcdb/sysaux01.dbf'
SIZE 550M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
DEFAULT TABLESPACE deftbs
DATAFILE '/u01/app/oracle/oradata/newcdb/deftbs01.dbf'
SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/app/oracle/oradata/newcdb/temp01.dbf'
SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
UNDO TABLESPACE undotbs1
DATAFILE '/u01/app/oracle/oradata/newcdb/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED ENABLE PLUGGABLE DATABASE SEED FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/newcdb/', '/u01/app/oracle/oradata/pdbseed/') SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED SYSAUX DATAFILES SIZE 100M USER_DATA TABLESPACE usertbs DATAFILE '/u01/app/oracle/oradata/pdbseed/usertbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
这里,着重看一下黑体部分的内容。
需要指定种子容器的文件存放路径。
3,脚本执行部分
原来手工建库完成之后,需要以sys用户执行$ORACLE_HOME/rdbms/admin下面的catalog.sql,以及catproc.sql,当然,还可以执行$ORACLE_HOME/sqlplus/admin下面的pupbld.sql。
但是在创建CDB的时候,oracle建议使用perl脚本运行所有上述sql。
[oracle@ora12 ~]$ cd /u01/oracle/product/11.2.0/rdbms/admin/ [oracle@ora12 admin]$ ls -lrt|grep catcon.pl -rw-r--r--. 1 oracle oinstall 13220 Jun 14 2014 catcon.pl [oracle@ora12 admin]$ more catcon.pl
运行命令如下:
[oracle@ora12 admin]$ perl catcon.pl -u sys/oracle -s -e -d $ORACLE_HOME/rdbms/admin -b catalog1 catalog.sql > catalog.log; [oracle@ora12 admin]$ perl catcon.pl -u sys/oracle -s -e -d $ORACLE_HOME/rdbms/admin -b catproc1 catproc.sql > catproc.log; [oracle@ora12 admin]$ perl catcon.pl -u system/oracle -s -e -d $ORACLE_HOME/sqlplus/admin -b pupbld1 pupbld.sql > pupbld.log;
完成之后,就可以连接CDB进行维护及后继操作了。
需要记得前面选择了高级安装模式,然后在这里,你就可以设置数据库为CDB,并且指定pdb的个数及其名称的前缀。
CDB创建完成之后,
SYS@ora12c> select name,cdb from v$database; NAME CDB --------- --- ORA12C YES
可以看到,我们创建的就是CDB。
SYS@ora12c> select con_id,name from v$containers; CON_ID NAME ---------- ------------------------------ 1 CDB$ROOT 2 PDB$SEED 3 ORA12C_PDB1
我这里的环境,是使用DBCA方式创建了一个带有一个PDB的CDB。
也可以使用SYS_CONTEXT函数:
SYS@ora12c> SELECT SYS_CONTEXT ('USERENV', 'CON_NAME') FROM DUAL; SYS_CONTEXT('USERENV','CON_NAME') -------------------------------------------------------------------------------- CDB$ROOT
管理CDB时,通常需要使用sys用户连接到根容器。只有在使用具有sysdba权限的用户,才可以执行如下操作:
1,实例的启动和关闭;
2,归档的启用和关闭;
3,管理所有与CDB相关的设置,比如修改内存设置;
4,对数据文件进行备份和恢复操作;
5,管理控制文件;
6,管理redo log;
7,管理根容器的undo 表空间;
8,管理根容器的临时表空间;
9,创建公共用户及角色。
ok,我们来看相关的实验:
[oracle@ora12 ~]$ sqlplus / as sysdba SQL*Plus: Release 12.1.0.2.0 Production on Thu Dec 17 09:13:35 2015 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to an idle instance. SYS@ora12c> startup ORACLE instance started. Total System Global Area 838860800 bytes Fixed Size 2929936 bytes Variable Size 687868656 bytes Database Buffers 142606336 bytes Redo Buffers 5455872 bytes Database mounted. Database opened. SYS@ora12c> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORA12C_PDB1 MOUNTED SYS@ora12c> alter pluggable database ora12c_pdb1 open;
--打开某一个可插拔数据库。
SYS@ora12c> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORA12C_PDB1 READ WRITE YES SYS@ora12c> alter pluggable database all open; Pluggable database altered.
--当然,也可以打开所有的可插拔数据库。
接下来,看容器切换:
SYS@ora12c> show con_name;
CON_NAME
------------------------------
CDB$ROOT
当前容器为根容器。
切换到种子容器:
SYS@ora12g> alter session set container=PDB$SEED; Session altered. SYS@ora12g> select file_name from dba_data_files; FILE_NAME -------------------------------------------------------------------------------- /u01/oracle/oradata/ora12g/pdbseed/system01.dbf /u01/oracle/oradata/ora12g/pdbseed/sysaux01.dbf SYS@ora12g> select file_name from dba_temp_files; FILE_NAME -------------------------------------------------------------------------------- /u01/oracle/oradata/ora12g/pdbseed/pdbseed_temp012015-10-08_07-32-05-PM.dbf
--可见,种子容器中默认只有system,sysaux以及temp表空间。
SYS@ora12c> shutdown immediate; ORA-65017: seed pluggable database may not be dropped or altered
切换到可插拔数据库:
SYS@ora12c> alter session set container=ORA12C_PDB1; Session altered. SYS@ora12c> shutdown immediate; Pluggable Database closed.
---可插拔数据库是可以关闭或者打开的,但是种子容器就不行了。
本文来自云栖社区合作伙伴“DBGEEK”