合 Oracle 12c 手动创建CDB和非CDB
Tags: Oracle
使用 SQL*Plus 创建新 CDB 的具体步骤如下所示:
\1. 启动实例之前,使用常用参数准备 init
export ORACLE_SID=LHRCDB1
orapwd file=$ORACLE_HOME/dbs/orapw LHRCDB1 password=lhr format=12 entries=20
vi $ORACLE_HOME/dbs/initLHRCDB1.ora
DB_NAME = LHRCDB1
DB_BLOCK_SIZE =8192
ENABLE_PLUGGABLE_DATABASE =true
db_create_file_dest='+DATA'
sqlplus / as sysdba
startup nomount
\2. 通过使用 CREATE DATABASE 命令和新子句 ENABLE PLUGGABLE DATABASE 创建 CDB 。该子句指定数据库为 CDB 而不是非 CDB 。此时会创建根容器和种子可插入数据库。您可以使用另一个子句 SEED FILE_NAME_CONVERT 指定种子文件的位置。如果省略此子句, OMF 会决定种子文件的名称和位置。 FILE_NAME_CONVERT 指定复制到目标种子目录的根数据文件的源目录。如果使用新的 init.ora 参数 PDB_FILE_NAME_CONVERT 将根数据文件的名称映射到种子数据文件,则会忽略 SEED FILE_NAME_CONVERT 子句。在本例中, /oracle/dbs 和 /oracle/seed 目录必须存在。在语句中定义的字符集依然是 CDB 的唯一字符集。
create database LHRCDB1
user sys identified by lhr
user system identified by lhr
extent management local
default tablespace users
default temporary tablespace temp
undo tablespace undotbs1
enable pluggable database
seed;
\3. 运行 catcdb.sql SQL 脚本。此脚本将安装 CDB 所需的全部组件。
@? /rdbms/admin/catcdb.sql
使用create database创建CDB的具体操作如下:
1.指定实例标识(SID)
ORACLE_SID环境变量被用来区分不同的实例。
1.决定实例的唯一标识SID
2.打开命令窗口
3.设置ORACLE_SID环境变量
在Unix/Linux下设置ORACLE_SID环境变量如下:
export ORACLE_SID=mynewdb
或
setenv ORACLE_SID=mynewdb
在Windows下设置ORACLE_SID环境变量如下:
set ORACLE_SID=mynewdb
2.确保所需的环境变量被设置
依赖于平台,在启动SQL*Plus之后,可能需要设置相关的环境变量,或者验证相关的设置。例如,在大多数平台中,ORACLE_SID与ORACLE_HOME必须设置。另外,建议PATH环境变量包含ORACLE_HOME/bin目录。在Unix/Linux平
台中,必须手动设置这些环境变量。在Windows平台中,OUI会自动设置ORACLE_HOME与ORACLE_SID。如果在安装期间不创建数据库,OUI不会设置ORACLE_SID,并且在之后创建数据库时必须要设置ORACLE_SID环境变量。
3.选择数据库管理员审核方法
为了创建数据库,用户必须被审核并且被授予相关的系统权限。审核方法有以下两种:
.使用密码文件
.使用操作系统审核
4.创建初始化参数文件
当Oracle实例启动时,它将读取初始化参数文件。这个参数文件可以是文本文件可以使用文本编辑器进行编辑,或者是二进制文件,可以由数据库进行动态修改。二进制参数文件也叫服务器参数文件。对于这一步操作,可以先创建一个文本参数文件,之后通过文本参数文件来创建服务器参数文件。
5.创建实例只限于Windows平台
对于Windows平台,在连接实例之前,必须手动创建实例。ORADIM命令就是用来创建新实例,其语法如下:oradim -NEW -SID sid -STARTMODE MANUAL -PFILE file.注意在创建新实例时,不要将-STARTMODE参数指定为AUTO,因为这会造成新实例启动与mount数据库,而这时数据库是不存在的。
6.连接实例
启动SQL*Plus并且使用有sysdba权限的用户连接到数据库实例。
.使用密码文件进行审核,输入以下命令并输入sys用户的密码
$sqlplus /nolog
SQL>connect sys as sysdba
.使用操作系统审核,输入以下命令
$sqlplus /nolog
SQL>conn / as sysdba
7.创建服务器参数文件
服务器参数文件能通过alter system命令来修改参数,并且这种修改会永久生效。可以通过文本参数文件来创建服务器参数文件。
8.启动实例
启动实例但不mount数据库执行以下命令
startup nomount
9.使用create database语句来创建CDB
当使用create database语句来创建CDB时,必须在操作CDB之前完成额外的操作。这些操作包含对数据字典表创建视图,安装标准的PL/SQL包。执行catcdb.sql脚本。
使用create database语句来创建语句需要注意
9.1 将enable_pluggable_database参数设置为true。在CDB中,db_name参数指定root的名称。将SID设置为root名称是常见的做法。这个名称最多有30个字符。
9.2使用create database语句来创建新的CDB。
9.2.1 不使用OMF来创建CDB
9.2.2 使用OMF来创建CDB
不使用OMF来创建CDB
下面的例子将介绍如何不使用OMF功能来创建CDB
1.设置SID
1 2 3 4 | [root@jytest3 ~]# su - oracle Last login: Fri Aug 4 15:07:33 CST 2017 [oracle@jytest3 ~]$ cd $ORACLE_HOME/dbs [oracle@jytest3 dbs]$ export ORACLE_SID=test |
2.创建密码文件
1 | [oracle@jytest3 dbs]$ orapwd file=$ORACLE_HOME/dbs/orapwtest password=abcdefg format=12.2 entries=20 |
3.创建初始化参数
1 2 3 4 5 6 | [oracle@jytest3 dbs]$ vi inittest.ora db_name='test' memory_target=4G memory_max_target=4G control_files='+data/test/controlfile/testcdb/control01.ctl','+data/test/controlfile/testcdb/control02.ctl' enable_pluggable_database=true |
4.启动实例但不mount
1 2 3 4 5 6 7 8 9 10 11 12 | [oracle@jytest3 dbs]$ export ORACLE_SID=test [oracle@jytest3 dbs]$ sqlplus / as sysdba SQL*Plus: Release 12.2.0.1.0 Production on Fri Aug 4 20:59:37 2017 Copyright (c) 1982, 2016, Oracle. All rights reserved. Connected to an idle instance. SQL> startup pfile='$ORACLE_HOME/dbs/inittest.ora' nomount ORACLE instance started. Total System Global Area 4294967296 bytes Fixed Size 8628936 bytes Variable Size 2315257144 bytes Database Buffers 1962934272 bytes Redo Buffers 8146944 bytes |
5.执行create database语句来创建CDB
下面的语句将创建一个名为test的CDB数据库。这个名字与参数文件中的db_name同名。并且满足以下条件:
.已经设置control_files参数
.创建了+data/test/datafile/testcdb目录
.创建了+data/test/datafile/pdbseed目录
.创建了+data/test/onlinelog/testcdb目录
为了创建包含root与CDB seed的CDB库在create database语句中包含了enable pluggable database子句。在这个例子还包含了seed file_name_convert子句来指定CDB seed文件的文件名与目录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | SQL> create database test 2 user sys identified by xxzx_7817600 3 user system identified by xxzx_7817600 4 logfile group 1 ('+data/test/onlinelog/testcdb/redo01.log') 5 size 100m blocksize 512, 6 group 2 ('+data/test/onlinelog/testcdb/redo02.log') 7 size 100m blocksize 512, 8 group 3 ('+data/test/onlinelog/testcdb/redo03.log') 9 size 100m blocksize 512 10 maxloghistory 1 11 maxlogfiles 16 12 maxlogmembers 3 13 maxdatafiles 1024 14 character set al32utf8 15 national character set al16utf16 16 extent management local 17 datafile '+data/test/datafile/testcdb/system01.dbf' 18 size 700m reuse autoextend on next 10240k maxsize unlimited 19 sysaux datafile '+data/test/datafile/testcdb/sysaux01.dbf' 20 size 550m reuse autoextend on next 10240k maxsize unlimited 21 default tablespace deftbs 22 datafile '+data/test/datafile/testcdb/deftbs01.dbf' 23 size 500m reuse autoextend on maxsize unlimited 24 default temporary tablespace tempts1 25 tempfile '+data/test/datafile/testcdb/temp01.dbf' 26 size 20m reuse autoextend on next 640k maxsize unlimited 27 undo tablespace undotbs1 28 datafile '+data/test/datafile/testcdb/undotbs01.dbf' 29 size 200m reuse autoextend on next 5120k maxsize unlimited 30 enable pluggable database 31 seed file_name_convert = ('+data/test/datafile/testcdb/','+data/test/datafile/pdbseed/') 32 local undo on; Database created. |
6.执行脚本$ORACLE_HOME/rdbms/admin/catcdb.sql
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | SQL> @$ORACLE_HOME/rdbms/admin/catcdb.sql SQL> SQL> Rem The script relies on the caller to have connected to the DB SQL> SQL> Rem This script invokes catcdb.pl that does all the work, so we just need to SQL> Rem construct strings for $ORACLE_HOME/rdbms/admin and SQL> Rem $ORACLE_HOME/rdbms/admin/catcdb.pl SQL> SQL> Rem $ORACLE_HOME SQL> column oracle_home new_value oracle_home noprint SQL> select sys_context('userenv', 'oracle_home') as oracle_home from dual; SQL> SQL> Rem OS-dependent slash SQL> column slash new_value slash noprint SQL> select sys_context('userenv', 'platform_slash') as slash from dual; SQL> SQL> Rem $ORACLE_HOME/rdbms/admin SQL> column rdbms_admin new_value rdbms_admin noprint SQL> select '&&oracle_home'||'&&slash'||'rdbms'||'&&slash'||'admin' as rdbms_admin from dual; old 1: select '&&oracle_home'||'&&slash'||'rdbms'||'&&slash'||'admin' as rdbms_admin from dual new 1: select '/u01/app/oracle/product/12.2.0/db'||'/'||'rdbms'||'/'||'admin' as rdbms_admin from dual SQL> SQL> Rem $ORACLE_HOME/rdbms/admin/catcdb.pl SQL> column rdbms_admin_catcdb new_value rdbms_admin_catcdb noprint SQL> select '&&rdbms_admin'||'&&slash'||'catcdb.pl' as rdbms_admin_catcdb from dual; old 1: select '&&rdbms_admin'||'&&slash'||'catcdb.pl' as rdbms_admin_catcdb from dual new 1: select '/u01/app/oracle/product/12.2.0/db/rdbms/admin'||'/'||'catcdb.pl' as rdbms_admin_catcdb from dual SQL> SQL> host perl -I &&rdbms_admin &&rdbms_admin_catcdb --logDirectory &&1 --logFilename &&2 Enter value for 1: Enter value for 2: Can't locate Term/ReadKey.pm in @INC (you may need to install the Term::ReadKey module) (@INC contains: /u01/app/oracle/product/12.2.0/db/rdbms/admin /usr/lib/perl5/site_perl/5.22.0/x86_64-linux /usr/lib/perl5/site_perl/5.22.0 /usr/lib/perl5/5.22.0/x86_64-linux /usr/lib/perl5/5.22.0 .) at /u01/app/oracle/product/12.2.0/db/rdbms/admin/catcdb.pl line 30. BEGIN failed--compilation aborted at /u01/app/oracle/product/12.2.0/db/rdbms/admin/catcdb.pl line 30. |