一 多租户体系结构
多租户是Oracle 12c的新特性,该特性能够让您在多租户容器数据库(CDB)中创建和维护多个可插拔数据库(PDB)。
多租户容器数据库(CDB)被定义为可以容纳一个或多个插件数据库的数据库,容器被定义为存在于CDB中数据文件和元数据的集合,可插拔数据库是一种特殊类型的容器,它可以通过克隆其他数据库很容易的进行创建,如果需要,可插拔数据库也可以从一个CDB迁移到另一个CDB中。
每个CDB是由一个根容器(CDB$ROOT)、一个种子容器(PDB$SEED)和0个、一个或多个可插拔数据库组成,其中,根容器包含一组主数据文件和元数据,种子容器是用于创建其它可插拔数据库,可插拔数据库包括它自己的数据文件和应用程序对象(用户、表,索引等)。12c之前的数据库都是非容器数据库(non-CDB)。
下图展示了可插拔数据库的体系结构:
二 创建容器数据库CDB
1 使用DBCA创建
参照DBCA建库。
2 使用Create Database语句创建
1)指定实例SID
[oracle@strong ~]$ export ORACLE_SID=db01
2)设置环境变量
[oracle@strong ~]$ echo $ORACLE_SID
db01
[oracle@strong ~]$ echo $ORACLE_HOME
/u01/app/oracle/product/12.2.0/dbhome_1
3)创建密码文件
[oracle@strong ~]$ orapwd file='/u01/app/oracle/product/12.2.0/dbhome_1/dbs/orapwdb01' format=12.2
Enter password for SYS:
4)创建文本初始化参数文件
[oracle@strong ~]$ vim initdb01.ora
db_name='db01'
memory_target=400M
control_files='/u01/app/oracle/oradata/db01/control01.ctl','/u01/app/oracle/oradata/db01/control02.ctl'
enable_pluggable_database=true
5)连接实例db01
[oracle@strong ~]$ sqlplus /nolog
SQL*Plus: Release 12.2.0.1.0 Production on Tue Aug 7 13:25:18 2018
Copyright (c) 1982, 2016, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected to an idle instance.
6)创建服务器参数文件
SQL> create spfile from pfile='/home/oracle/initdb01.ora';
File created.
7)启动实例
SQL> startup nomount
ORACLE instance started.
Total System Global Area 419430400 bytes
Fixed Size 8621424 bytes
Variable Size 301990544 bytes
Database Buffers 104857600 bytes
Redo Buffers 3960832 bytes
8)创建目录
[oracle@strong ~]$ cd /u01/app/oracle/oradata/
[oracle@strong oradata]$ mkdir db01
[oracle@strong oradata]$ cd db01/
[oracle@strong db01]$ mkdir pdbseed
9)创建建库脚本
[oracle@strong ~]$ cat db01.sql
CREATE DATABASE db01
USER SYS IDENTIFIED BY "Foxconn168!"
USER SYSTEM IDENTIFIED BY "Foxconn168!"
LOGFILE GROUP 1 ('/u01/app/oracle/oradata/db01/redo01.log')
SIZE 100M BLOCKSIZE 512,
GROUP 2 ('/u01/app/oracle/oradata/db01/redo02.log')
SIZE 100M BLOCKSIZE 512,
GROUP 3 ('/u01/app/oracle/oradata/db01/redo03.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/db01/system01.dbf'
SIZE 700M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
SYSAUX DATAFILE '/u01/app/oracle/oradata/db01/sysaux01.dbf'
SIZE 550M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
DEFAULT TABLESPACE deftbs
DATAFILE '/u01/app/oracle/oradata/db01/deftbs01.dbf'
SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/app/oracle/oradata/db01/temp01.dbf'
SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
UNDO TABLESPACE undotbs1
DATAFILE '/u01/app/oracle/oradata/db01/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
ENABLE PLUGGABLE DATABASE
SEED
FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/db01/',
'/u01/app/oracle/oradata/db01/pdbseed/')
LOCAL UNDO ON;
10)执行建库脚本
SQL> @db01.sql
Database created.
注:创建容器数据库初始化参数enable_pluggable_database必须设置为TRUE,除此之外,所需的目录也必须提前创建,否则执行脚本时会出错。
11)执行脚本
SQL> @?/rdbms/admin/catcdb.sql
出现以下提示时,在参数1处输入目录,参数2处输入文件名称:
SQL> host perl -I &&rdbms_admin &&rdbms_admin_catcdb --logDirectory &&1 --logFilename &&2
Enter value for 1: /home/oracle
Enter value for 2: create_cdb.log
三 管理Root容器
1 连接Root容器
以SYS用户连接到Root容器可以执行与数据库相关的所有任务,可以通过OS身份验证或网络方式进行连接。
1)OS认证方式
[oracle@strong ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.