之前的2篇:【DB宝24】在Oracle 19c中创建容器数据库(1)--DBCA静默创建CDB
【DB宝25】在Oracle 19c中创建容器数据库(2)--DBCA图形化创建CDB
这是Oracle OCP课件给出的创建CDB的过程:
使用DBCA或SQL*Plus创建新CDB所需的步骤相同。
•对于任何数据库(非CDB或CDB)来说,第一步都是使用init.ora参数文件配置实例。
•第二步是启动实例。
•第三步是使用CREATE DATABASE命令和新子句ENABLE PLUGGABLE DATABASE指定数据库为容器数据库而不是非CDB,从而创建CDB。此操作会在装载阶段创建根容器及控制文件,并在打开阶段创建重做日志文件和根数据文件。根数据文件用于SYSTEM表空间(其中包括Oracle提供的元数据和数据字典)以及针对AWR的SYSAUX表空间。还会创建种子可插拔数据库,及该数据库自己的数据文件(用于SYSAUX和SYSTEM表空间)。您可以使用新子句SEED FILE_NAME_CONVERT重命名种子可插拔数据库的数据文件,同时从根容器执行复制操作。该子句会创建种子可插拔数据库及该数据库自己的数据文件。种子数据文件会从根数据文件复制到另一个位置。种子数据文件可用作创建未来PDB的模板。如果省略此子句,Oracle Managed Files会决定种子文件的名称和位置。
•第四步是通过执行连接到根容器的catcdb.sql脚本创建目录和其他组件。
麦老师不建议手工建库,因为很多组件不全,而且创建过程非常麻烦。
这是手工建库后的组件:
1SYS@LHRCDB2> select comp_id,comp_name,version,status from dba_registry;
2
3COMP_ID COMP_NAME VERSION STATUS
4---------- ---------------------------------------- ------------ ------------
5CATALOG Oracle Database Catalog Views 12.2.0.1.0 VALID
6CATPROC Oracle Database Packages and Types 12.2.0.1.0 VALID
7RAC Oracle Real Application Clusters 12.2.0.1.0 OPTION OFF
8XDB Oracle XML Database 12.2.0.1.0 VALID
9OWM Oracle Workspace Manager 12.2.0.1.0 VALID
这是静默建库后的组件:
1SYS@htzxdb1> select comp_id,comp_name,version,status from dba_registry;
2
3COMP_ID COMP_NAME VERSION STATUS
4---------- ---------------------------------------- ------------ ------------
5CATALOG Oracle Database Catalog Views 18.0.0.0.0 VALID
6CATPROC Oracle Database Packages and Types 18.0.0.0.0 VALID
7RAC Oracle Real Application Clusters 18.0.0.0.0 VALID
8JAVAVM JServer JAVA Virtual Machine 18.0.0.0.0 VALID
9XML Oracle XDK 18.0.0.0.0 VALID
10CATJAVA Oracle Database Java Packages 18.0.0.0.0 VALID
11APS OLAP Analytic Workspace 18.0.0.0.0 VALID
12XDB Oracle XML Database 18.0.0.0.0 VALID
13OWM Oracle Workspace Manager 18.0.0.0.0 VALID
14CONTEXT Oracle Text 18.0.0.0.0 VALID
15ORDIM Oracle Multimedia 18.0.0.0.0 VALID
16SDO Spatial 18.0.0.0.0 VALID
17XOQ Oracle OLAP API 18.0.0.0.0 VALID
18OLS Oracle Label Security 18.0.0.0.0 VALID
19DV Oracle Database Vault 18.0.0.0.0 VALID
手动创建CDB可以使用新子句SEED FILE_NAME_CONVERT,也可以使用新实例参数PDB_FILE_NAME_CONVERT,或者使用OMF格式。下面给出一种使用OMF格式来手动创建CDB的示例。
如果不使用明确的数据文件名,则使用 Oracle Managed Files (OMF)。使用在语句中指定的SYSTEM、SYSAUX、UNDO和USERS表空间的数据文件的目标目录值设置DB_CREATE_FILE_DEST实例参数。Oracle为所有数据文件、控制文件和重做日志文件选择默认大小和属性。
1、创建参数文件并启动到NOMOUNT阶段
启动实例之前,使用常用参数准备init<SID>.ora参数文件:DB_NAME、CONTROL_FILES(如果不使用OMF)以及DB_BLOCK_SIZE。root的全局数据库名是CDB的全局数据库名。需要使用一个新参数,定义已启动实例可用于创建CDB而不是非CDB。ENABLE_PLUGGABLE_DATABASE参数必须设置为TRUE。设置ORACLE_SID环境变量。启动SQL*Plus,以属于DBA OS组的OS验证用户的身份进行连接,然后执行STARTUP NOMOUNT命令。
常用命令如下:
1export ORACLE_SID=LHRCDB3
2orapwd file=$ORACLE_HOME/dbs/orapwLHRCDB3 password=lhr format=12 entries=20
3
4vi $ORACLE_HOME/dbs/initLHRCDB3.ora
5DB_NAME=LHRCDB3
6DB_BLOCK_SIZE=8192
7DB_CREATE_FILE_DEST ='/u01/app/oracle/oradata'
8ENABLE_PLUGGABLE_DATABASE=true
9
10sqlplus / as sysdba
11startup nomount
2、使用create database创建数据库
通过使用CREATE DATABASE命令和新子句ENABLE PLUGGABLE DATABASE创建CDB。该子句指定数据库为CDB而不是非CDB。此时会创建根容器和种子可插拔数据库。您可以使用另一个子句SEED FILE_NAME_CONVERT指定种子文件的位置。如果省略此子句,OMF会决定种子文件的名称和位置。FILE_NAME_CONVERT指定复制到目标种子目录的根数据文件的源目录。
在本例中,/oracle/dbs和/oracle/seed目录必须存在。在语句中定义的字符集依然是CDB的唯一字符集,如果不指定字符集,那么默认的字符集为US7ASCII:
1create database LHRCDB3
2extent management local
3CHARACTER SET AL32UTF8
4enable pluggable database
5;
3、运行catcdb.sql SQL脚本
1---12.2之前和之后都可以运行:
2SQL> @?/rdbms/admin/catalog.sql --数据库字典,动态视图创建等
3SQL> @?/rdbms/admin/catproc.sql --PL/SQL存过过程相关代码
4SQL> @?/rdbms/admin/utlrp.sql --编译
5SQL> @?/sqlplus/admin/pupbld.sql --system运行
6---如果需要安装其他组件,则还需要跑其他的组件脚本
7
8---12.2开始可以只运行:
9@?/rdbms/admin/catcdb.sql
从12.2开始可以只运行如下脚本:
1@?/rdbms/admin/catcdb.sql
若是其他版本,那么也可以运行:
1---12.2之前和之后都可以运行:
2SQL> @?/rdbms/admin/catalog.sql --数据库字典,动态视图创建等
3SQL> @?/rdbms/admin/catproc.sql --PL/SQL存过过程相关代码
4SQL> @?/rdbms/admin/utlrp.sql --编译
5SQL> @?/sqlplus/admin/pupbld.sql --system运行
6---如果需要安装其他组件,则还需要跑其他的组件脚本
运行catcdb.sql时需要输入几个参数:
1SQL> host perl -I &&rdbms_admin &&rdbms_admin_catcdb --logDirectory &&1 --logFilename &&2
2Enter value for 1: /tmp
3Enter value for 2: create_cdb.log
4Enter new password for SYS: ********
5Enter new password for SYSTEM: ********
6Enter temporary tablespace name: TEMP
脚本跑完后,查询组件的脚本如下:
1col comp_id format a10
2col comp_name format a40
3col version format a12
4col status format a12
5select comp_id,comp_name,version,status from dba_registry;
跑脚本非常慢,安装组件也非常麻烦,最后需要保证所有的组件状态都是VALID,所以,麦老师不建议使用这种办法。手工建库只是在特殊场景中才会用到。
本文结束。
• 微信公众号:DB宝,作者:小麦苗
• 作者博客地址:http://blog.itpub.net/26736162/
• 作者微信:db_bao• 作者QQ:646634621,QQ群:230161599、618766405
• 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL DBA培训
• 版权所有,欢迎分享本文,转载请保留出处• 若有侵权请联系小麦苗删除
★DB宝分享的IT资料:https://mp.weixin.qq.com/s/Iwsy-zkzwgs8nYkcMz29ag★DB宝笔试面试详解:https://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w
长按下图识别二维码,关注小麦苗的微信公众号:DB宝,学习最实用的数据库技术。
本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。