Oracle 12c如何实现手工建库而非CDB及CDB创建

52次阅读
没有评论

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

自动写代码机器人,免费开通

这篇文章给大家分享的是有关 Oracle 12c 如何实现手工建库而非 CDB 及 CDB 创建的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。

相信大家应该都知道,对于 Oracle 数据库的创建,Oracle 除了支持 dbca(GUI 界面),同时也支持手工方式创建数据库,即使用 CREATE DATABASE 语句创建数据库。使用此语句对使用 DBCA 的一个优点是可以从脚本内创建数据库。

在 Oracle 12c 版本中支持 12c 之前的非 CDB 数据库以及 CDB 容器数据库。因此创建方式略有不同。本文同时描述 2 种不同数据库的手工创建方法。下面话不多说了,来一起看看详细的介绍吧。

一、12c 手工创建非 CDB 数据库

步骤 1:指定实例标识符(SID)

ORACLE_SID 的环境变量用于该实例从稍后可能创建并同时在同一主机计算机上运行其他 Oracle Database 实例区分开来。

$ export ORACLE_SID=nocdb
$ export ORACLE_UNQNAME=nocdb

步骤 2:确保设置所需的环境变量

根据您的平台,在启动 SQL * Plus 之前(根据后续步骤的要求),您可能必须设置环境变量,或至少验证它们是否正确设置。如下查看当前已设定的环境变量,如果未设定,请使用 export 命令方式设定之。

$ env|grep ORA
ORACLE_UNQNAME=nocdb
ORACLE_SID=nocdb
ORACLE_BASE=/app/oracle/ora12c
ORACLE_HOSTNAME=ydq05.ydq.com
ORACLE_HOME=/app/oracle/ora12c/db_1

步骤 3:选择数据库管理员身份验证方法

您必须进行身份验证并授予相应的系统权限才能创建数据库。

通常情况下,使用以下方式具有所需权限的管理员进行身份验证:

使用密码文件

具有操作系统认证 (此演示中使用操作系统认证)

$ id oracle
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba)

步骤 4:创建初始化参数文件

当 Oracle 实例启动时,它读取一个初始化参数文件。该文件可以是文本文件,可以使用文本编辑器或二进制文件进行创建和修改,该文件由数据库创建和动态修改。优选的二进制文件称为服务器参数文件。在此步骤中,您将创建一个文本初始化参数文件。在后面的步骤中,您可以从文本文件创建一个服务器参数文件。

$ mkdir -pv /app/oracle/ora12c/oradata/nocdb # 创建存放数据文件的目录
$ vi $ORACLE_HOME/dbs/initnocdb.ora
DB_NAME=nocdb
CONTROL_FILES= /app/oracle/ora12c/oradata/nocdb/contorl01.ctl 
MEMORY_TARGET=380m

步骤 5:(仅限 Windows)创建实例

在 Windows 平台上,连接到实例之前,必须手动创建它,如果它不存在。该 ORADIM 命令通过创建一个新的 Windows 服务创建一个 Oracle 数据库实例。

oradim -NEW -SID sid -STARTMODE MANUAL -PFILE file

步骤 6:连接到实例

启动 SQL * Plus 并使用管理权限连接到 Oracle 数据库实例 SYSDBA。

$ sqlplus / as sysdba -- 演示环境为 12.1 版本
SQL*Plus: Release 12.1.0.1.0 Production on Wed May 31 10:44:41 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to an idle instance.
SQL

步骤 7:创建服务器参数文件

服务器参数文件使您可以使用该 ALTER SYSTEM 命令更改初始化参数,并在数据库关闭和启动时保留更改。您可以从编辑的文本初始化文件创建服务器参数文件。

SQL  create spfile from pfile= /app/oracle/ora12c/db_1/dbs/initnocdb.ora

步骤 8:启动实例

启动实例而不安装数据库。

SQL  startup nomount;
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2296576 bytes
Variable Size 641729792 bytes
Database Buffers 419430400 bytes
Redo Buffers 5480448 bytes

步骤 9:发出 CREATE DATABASE 语句

要创建新数据库,请使用该 CREATE DATABASE 语句。

SQL  CREATE DATABASE nocdb
 USER SYS IDENTIFIED BY pass
 USER SYSTEM IDENTIFIED BY pass
 LOGFILE GROUP 1 ( /app/oracle/ora12c/oradata/nocdb/redo01a.log ,
 /app/oracle/ora12c/oradata/nocdb/redo01b.log ) SIZE 100M BLOCKSIZE 512,
 GROUP 2 ( /app/oracle/ora12c/oradata/nocdb/redo02a.log ,
 /app/oracle/ora12c/oradata/nocdb/redo02b.log ) SIZE 100M BLOCKSIZE 512
 MAXLOGHISTORY 1
 MAXLOGFILES 16
 MAXLOGMEMBERS 3
 MAXDATAFILES 1024
 CHARACTER SET AL32UTF8
 NATIONAL CHARACTER SET AL16UTF16
 EXTENT MANAGEMENT LOCAL
 DATAFILE  /app/oracle/ora12c/oradata/nocdb/system01.dbf  SIZE 700M
 SYSAUX DATAFILE  /app/oracle/ora12c/oradata/nocdb/sysaux01.dbf  SIZE 550M 
 DEFAULT TABLESPACE users
 DATAFILE  /app/oracle/ora12c/oradata/nocdb/users01.dbf  SIZE 500M 
 DEFAULT TEMPORARY TABLESPACE tempts1
 TEMPFILE  /app/oracle/ora12c/oradata/nocdb/temp01.dbf  SIZE 20M 
 UNDO TABLESPACE undotbs1
 DATAFILE  /app/oracle/ora12c/oradata/nocdb/undotbs01.dbf  SIZE 200M
 USER_DATA TABLESPACE usertbs
 DATAFILE  /app/oracle/ora12c/oradata/nocdb/usertbs01.dbf  SIZE 200M;

步骤 10:创建其他表空间

要使数据库起作用,必须为应用程序数据创建其他表空间。

SQL  CREATE TABLESPACE apps_tbs LOGGING 
 DATAFILE  /app/oracle/ora12c/oradata/nocdb/apps01.dbf  
 SIZE 500M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED 
 EXTENT MANAGEMENT LOCAL;

步骤 11:运行脚本以构建数据字典视图

运行构建数据字典视图,同义词和 PL / SQL 包所必需的脚本,并支持 SQL * Plus 的正常运行。

使用 sysdba 权限执行以下脚本

SQL  @?/rdbms/admin/catalog.sql -- 数据库字典,动态视图创建等
SQL  @?/rdbms/admin/catproc.sql --PL/SQL 存过过程相关代码
SQL  @?/rdbms/admin/utlrp.sql -- 编译 

使用 SYSTEM 用户执行以下脚本

SQL  @?/sqlplus/admin/pupbld.sql --SQL*Plus 相关
-- 验证结果
SQL  SELECT name,
 2 DECODE (cdb,
 3  YES ,  Multitenant Option enabled ,
 4  Regular 12c Database:  )
 5  Multitenant Option ,
 6 open_mode,
 7 con_id
 8 FROM v$database;
NAME Multitenant Option OPEN_MODE CON_ID
--------- -------------------------- -------------------- ----------
NOCDB Regular 12c Database: READ WRITE 0

步骤 12 :(可选)运行脚本以安装其他选项 ( 此处略)

您可能需要运行其他脚本。您运行的脚本由您选择使用或安装的功能和选项决定。

步骤 13:备份数据库对数据库 (此处略)

进行完整备份,以确保您有一套完整的文件,如果发生介质故障,可以从中恢复。

步骤 14:(可选)启用自动实例启动 (此处略)

您可能希望将 Oracle 实例配置为在其主机重新启动时自动启动。

二、12c 下手工创建 CDB 数据库

1、CDB 创建相关说明

使用 CREATE DATABASESQL 语句创建 CDB 非常类似于创建非 CDB。使用 CREATE DATABASESQL 语句创建 CDB 时,必须启用 PDB 并指定根文件和种子文件的名称和位置。

要创建 CDB,CREATE DATABASE 语句必须包含 ENABLE PLUGGABLE DATABASE 子句。当包含此子句时,该语句使用根和种子创建 CDB。如果未指定 ENABLE PLUGGABLE DATABASE 子句 那新创建的数据库是非 CDB。该语句不会创建根和种子,非 CDB 永远不会包含 PDB。

以下为几个主要差异部分

1、CDB 数据库创建时应指定 ENABLE PLUGGABLE DATABASE 子句

2、CDB 数据库应指定根文件和种子文件的名称和位置

  CREATE DATABASE 语句使用根文件(如数据文件)生成种子文件的名称。您必须指定根文件和种子文件的名称和位置。

  CREATE DATABASE 语句成功完成后,您可以使用种子及其文件创建新的 PDB。种子在创建后不能被修改。

  可以通过以下方式之一指定种子文件的名称和位置

    使用 seed FILE_NAME_CONVERT 子句

    如 SEED FILE_NAME_CONVERT = (‘/app/oracle/ora12c/oradata/cdb1/ , /app/oracle/ora12c/oradata/pdbseed/) 表示将 cdb1 目录下的文件转换到 pdbseed 目录下

    基于 oracle 文件托管方式 (OMF)

    使用 PDB_FILE_NAME_CONVERT 初始化参数

3、可以为 PDB 种子数据库制定不同的属性

  根 SYSTEM 和 SYSAUX 表空间的数据文件的属性可能不适合种子。在这种情况下,您可以使用子句为种子的数据文件指定不同的属性 tablespace_datafile。使用这些子句指定所有数据文件包含的属性 SYSTEM 和 SYSAUX 表空间中的种子。从根继承的值用于尚未提供其值的任何属性。

如下示例

DATAFILE  /u01/app/oracle/oradata/newcdb/system01.dbf  SIZE 325M REUSE
SYSAUX DATAFILE  /u01/app/oracle/oradata/newcdb/sysaux01.dbf  SIZE 325M REUSE
-- 下面的 seed 部分使用了不同于上面 root 容器的配置,-- 如 system 数据文件此处大小为 125M,而 root 容器中为 352M
--seed 中开启了自动扩展,sysaux 也同样使用了一些不同于 root 容器的属性
-- 对于在 seed 中未明确指定的属性,则继承 root 容器数据文件属性
SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
SYSAUX DATAFILES SIZE 100M

2、创建 cdb 数据库

详细步骤参考 12c 下手工创建非 cdb 数据库,以下部分省略每一步骤详细描述,后面列出差异

-- 设定环境变量
$ export ORACLE_SID=cdb1
$ export ORACLE_UNQNAME=cdb1
-- 创建相应目录
$ mkdir -pv /app/oracle/ora12c/oradata/cdb1
$ mkdir -pv /app/oracle/ora12c/oradata/pdbseed
-- 生成参数文件
$ vi $ORACLE_HOME/dbs/initcdb1.ora
DB_NAME=cdb1
CONTROL_FILES= /app/oracle/ora12c/oradata/cdb1/contorl01.ctl 
MEMORY_TARGET=380m
ENABLE_PLUGGABLE_DATABASE=true
-- 开始建库
$ sqlplus / as sysdba
SQL  create spfile from pfile= $ORACLE_HOME/dbs/initcdb1.ora 
SQL  startup nomount;
SQL  CREATE DATABASE cdb1
 USER SYS IDENTIFIED BY pass
 USER SYSTEM IDENTIFIED BY pass
 LOGFILE GROUP 1 (/app/oracle/ora12c/oradata/cdb1/redo01a.log , /app/oracle/ora12c/oradata/cdb1/redo01b.log) 
 SIZE 100M BLOCKSIZE 512,
 GROUP 2 (/app/oracle/ora12c/oradata/cdb1/redo02a.log , /app/oracle/ora12c/oradata/cdb1/redo02b.log) 
 SIZE 100M BLOCKSIZE 512
 MAXLOGHISTORY 1
 MAXLOGFILES 16
 MAXLOGMEMBERS 3
 MAXDATAFILES 1024
 CHARACTER SET AL32UTF8
 NATIONAL CHARACTER SET AL16UTF16
 EXTENT MANAGEMENT LOCAL
 DATAFILE  /app/oracle/ora12c/oradata/cdb1/system01.dbf  SIZE 700M
 SYSAUX DATAFILE  /app/oracle/ora12c/oradata/cdb1/sysaux01.dbf  SIZE 550M
 DEFAULT TABLESPACE deftbs
 DATAFILE  /app/oracle/ora12c/oradata/cdb1/deftbs01.dbf  SIZE 500M
 DEFAULT TEMPORARY TABLESPACE tempts1
 TEMPFILE  /app/oracle/ora12c/oradata/cdb1/temp01.dbf  SIZE 20M 
 UNDO TABLESPACE undotbs1
 DATAFILE  /app/oracle/ora12c/oradata/cdb1/undotbs01.dbf  SIZE 200M 
 ENABLE PLUGGABLE DATABASE 
 SEED
 FILE_NAME_CONVERT = ( /app/oracle/ora12c/oradata/cdb1/ , 
 /app/oracle/ora12c/oradata/pdbseed/ )
 SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
 SYSAUX DATAFILES SIZE 100M
 USER_DATA TABLESPACE usertbs
 DATAFILE  /app/oracle/ora12c/oradata/pdbseed/usertbs01.dbf  SIZE 200M;
-- 填充数据字典,如果是 12cR2 版本,则直接执行 catcdb.sql 代替以下脚本  
-- 使用 sysdba 权限执行以下脚本
SQL  @?/rdbms/admin/catalog.sql -- 数据库字典,动态视图创建等
SQL  @?/rdbms/admin/catproc.sql --PL/SQL 存过过程相关代码
SQL  @?/rdbms/admin/utlrp.sql -- 编译 
-- 使用 SYSTEM 用户执行以下脚本
SQL  @?/sqlplus/admin/pupbld.sql #SQL*Plus 相关
SQL  select  Leshami  Author, http://blog.csdn.net/leshami  Blog,
 2  645746311  QQ from dual;
AUTHOR BLOG QQ
------- ---------------------------- ---------
Leshami http://blog.csdn.net/leshami 645746311
-- 验证结果
SQL  SELECT name,
 2 DECODE (cdb,
 3  YES ,  Multitenant Option enabled ,
 4  Regular 12c Database:  )
 5  Multitenant Option ,
 6 open_mode,
 7 con_id
 8 FROM v$database;
NAME Multitenant Option OPEN_MODE CON_ID
--------- -------------------------- -------------------- ----------
CDB1 Multitenant Option enabled READ WRITE 0

感谢各位的阅读!关于“Oracle 12c 如何实现手工建库而非 CDB 及 CDB 创建”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向 AI 问一下细节

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