Oracle 12c中怎么手动创建CDB

71次阅读
没有评论

共计 12155 个字符,预计需要花费 31 分钟才能阅读完成。

这期内容当中丸趣 TV 小编将会给大家带来有关 Oracle 12c 中怎么手动创建 CDB,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

使用 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

[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. 创建密码文件

[oracle@jytest3 dbs]$ orapwd file=$ORACLE_HOME/dbs/orapwtest password=abcdefg format=12.2 entries=20

3. 创建初始化参数

[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

[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 文件的文件名与目录。

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

SQL  @$ORACLE_HOME/rdbms/admin/catcdb.sql
SQL  Rem The script relies on the caller to have connected to the DB
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  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  Rem OS-dependent slash SQL  column slash new_value slash noprint SQL  select sys_context(userenv ,  platform_slash) as slash from dual;
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  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  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.

对于这种错误参考了杨建荣的解决方法,抛出的错误提示找不到 ReadKey.pm,Linux,Unix 其实都是自带 Perl 的,但这里需要的文件在 $ORACLE_HOME 下的 Perl 目录,只需要把这个目录引用到 PATH 变量中就可以了,比如:
export PATH=$PATH:$ORACLE_HOME/OPatch:$ORACLE_HOME/perl/bin:$ORACLE_HOME/jdk/bin

[oracle@jytest3 dbs]$ export PATH=$PATH:$ORACLE_HOME/OPatch:$ORACLE_HOME/perl/bin:$ORACLE_HOME/jdk/bin
[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 22:12:56 2017
Copyright (c) 1982, 2016, Oracle. All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL  @$ORACLE_HOME/rdbms/admin/catcdb.sql SQL  Rem The script relies on the caller to have connected to the DB 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  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  Rem OS-dependent slash SQL  column slash new_value slash noprint SQL  select sys_context(userenv ,  platform_slash) as slash from dual;
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  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  host perl -I  rdbms_admin  rdbms_admin_catcdb --logDirectory  1 --logFilename  2 Enter value for 1: Enter value for 2: Can t locate util.pm in @INC (you may need to install the util module) (@INC contains: /u01/app/oracle/product/12.2.0/db/rdbms/admin /u01/app/oracle/product/12.2.0/db/perl/lib/site_perl/5.22.0/x86_64-linux-thread-multi /u01/app/oracle/product/12.2.0/db/perl/lib/site_perl/5.22.0 /u01/app/oracle/product/12.2.0/db/perl/lib/5.22.0/x86_64-linux-thread-multi /u01/app/oracle/product/12.2.0/db/perl/lib/5.22.0 .) at /u01/app/oracle/product/12.2.0/db/rdbms/admin/catcdb.pl line 35. BEGIN failed--compilation aborted at /u01/app/oracle/product/12.2.0/db/rdbms/admin/catcdb.pl line 35.

这个问题把 util 改为 Util

[oracle@jytest3 ~]$ find $ORACLE_HOME -name util.pm | wc -l
[oracle@jytest3 ~]$ find $ORACLE_HOME -name Util.pm | wc -l
[oracle@jytest3 ~]$ find $ORACLE_HOME -name Util.pm
/u01/app/oracle/product/12.2.0/db/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash/Util.pm
/u01/app/oracle/product/12.2.0/db/perl/lib/5.22.0/x86_64-linux-thread-multi/List/Util.pm
/u01/app/oracle/product/12.2.0/db/perl/lib/5.22.0/x86_64-linux-thread-multi/Scalar/Util.pm
/u01/app/oracle/product/12.2.0/db/perl/lib/5.22.0/x86_64-linux-thread-multi/Sub/Util.pm
/u01/app/oracle/product/12.2.0/db/perl/lib/site_perl/5.22.0/HTTP/Headers/Util.pm

这个过程中到底该选哪个目录下的 Util.pm 呢,如果多点耐心仔细看看里面的内容还是能够找到一些头绪的,最后选择的是:

/u01/app/oracle/product/12.2.0/db/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash/Util.pm

需要手工修改 catcdb.pl 脚本
那么问题来了,这个 catcdb.pl 脚本是不是要改动呢。修改文件 catcdb.pl,把下面的 util 修改为 Util

use Term::ReadKey; # to not echo password
use Getopt::Long;
use Cwd;
use File::Spec;
use Data::Dumper;
use Utilqw(trim, splitToArray);
use catcon qw(catconSqlplus);

再来一轮测试,结果发现还是会有报错,这种尝试会让你开始怀疑自己的选择到底是不是正确的方向。如果还是没有找到,说明在当前的环境变量中没有匹配到相关的内容,我们需要直接切换到目录 Hash 下,然后运行脚本才可以,这个时候输出才算有了改观,提示你输入密码。

[oracle@jytest3 Hash]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Fri Aug 4 22:25:23 2017
Copyright (c) 1982, 2016, Oracle. All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL  @$ORACLE_HOME/rdbms/admin/catcdb.sql
SQL  Rem
SQL  Rem $Header: rdbms/admin/catcdb.sql /main/7 2016/06/23 11:38:38 akruglik Exp $
SQL  Rem
SQL  Rem catcdb.sql
SQL  Rem
SQL  Rem Copyright (c) 2013, 2016, Oracle and/or its affiliates.
SQL  Rem All rights reserved.
SQL  Rem
SQL  Rem NAME
SQL  Rem catcdb.sql - 
SQL  Rem
SQL  Rem DESCRIPTION
SQL  Rem invoke catcdb.pl
SQL  Rem
SQL  Rem NOTES
SQL  Rem 
SQL  Rem
SQL  Rem PARAMETERS:
SQL  Rem - log directory
SQL  Rem - base for log file name
SQL  Rem
SQL  Rem MODIFIED (MM/DD/YY)
SQL  Rem akruglik 06/21/16 - Bug 22752041: pass --logDirectory and
SQL  Rem --logFilename to catcdb.pl
SQL  Rem akruglik 11/10/15 - use catcdb.pl to collect passowrds and pass them
SQL  Rem on to catcdb_int.sql using env vars
SQL  Rem aketkar 04/30/14 - remove SQL file metadata
SQL  Rem cxie 08/16/13 - remove SQL_PHASE
SQL  Rem cxie 07/10/13 - 17033183: add shipped_file metadata
SQL  Rem cxie 03/19/13 - create CDB with all options installed
SQL  Rem cxie 03/19/13 - Created
SQL  Rem
SQL  set echo on
SQL  Rem The script relies on the caller to have connected to the DB
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  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  Rem OS-dependent slash
SQL  column slash new_value slash noprint
SQL  select sys_context(userenv ,  platform_slash) as slash from dual;

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  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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计12155字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)