共计 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 问一下细节