查看: 646|回复: 0

[Oracle数据库] Oracle 12c实现手工建库而非CDB及CDB创建的方法

发表于 2018-3-28 08:00:06

前言

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

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

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

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

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

  1. $ export ORACLE_SID=nocdb
  2. $ export ORACLE_UNQNAME=nocdb
复制代码

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

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

  1. $ env|grep ORA
  2. ORACLE_UNQNAME=nocdb
  3. ORACLE_SID=nocdb
  4. ORACLE_BASE=/app/oracle/ora12c
  5. ORACLE_HOSTNAME=ydq05.ydq.com
  6. ORACLE_HOME=/app/oracle/ora12c/db_1
复制代码

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

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

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

使用密码文件

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

  1. $ id oracle
  2. uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba)
复制代码

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

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

  1. $ mkdir -pv /app/oracle/ora12c/oradata/nocdb #创建存放数据文件的目录
  2. $ vi $ORACLE_HOME/dbs/initnocdb.ora
  3. DB_NAME=nocdb
  4. CONTROL_FILES='/app/oracle/ora12c/oradata/nocdb/contorl01.ctl'
  5. MEMORY_TARGET=380m
复制代码

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

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

  1. oradim -NEW -SID sid -STARTMODE MANUAL -PFILE file
复制代码

步骤6:连接到实例

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

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

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

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

  1. SQL> create spfile from pfile='/app/oracle/ora12c/db_1/dbs/initnocdb.ora';
复制代码

步骤8:启动实例

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

  1. SQL> startup nomount;
  2. ORACLE instance started.
  3. Total System Global Area 1068937216 bytes
  4. Fixed Size 2296576 bytes
  5. Variable Size 641729792 bytes
  6. Database Buffers 419430400 bytes
  7. Redo Buffers 5480448 bytes
复制代码

步骤9:发出CREATE DATABASE语句

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

  1. SQL> CREATE DATABASE nocdb
  2. USER SYS IDENTIFIED BY pass
  3. USER SYSTEM IDENTIFIED BY pass
  4. LOGFILE GROUP 1 ('/app/oracle/ora12c/oradata/nocdb/redo01a.log',
  5. '/app/oracle/ora12c/oradata/nocdb/redo01b.log') SIZE 100M BLOCKSIZE 512,
  6. GROUP 2 ('/app/oracle/ora12c/oradata/nocdb/redo02a.log',
  7. '/app/oracle/ora12c/oradata/nocdb/redo02b.log') SIZE 100M BLOCKSIZE 512
  8. MAXLOGHISTORY 1
  9. MAXLOGFILES 16
  10. MAXLOGMEMBERS 3
  11. MAXDATAFILES 1024
  12. CHARACTER SET AL32UTF8
  13. NATIONAL CHARACTER SET AL16UTF16
  14. EXTENT MANAGEMENT LOCAL
  15. DATAFILE '/app/oracle/ora12c/oradata/nocdb/system01.dbf' SIZE 700M
  16. SYSAUX DATAFILE '/app/oracle/ora12c/oradata/nocdb/sysaux01.dbf' SIZE 550M
  17. DEFAULT TABLESPACE users
  18. DATAFILE '/app/oracle/ora12c/oradata/nocdb/users01.dbf' SIZE 500M
  19. DEFAULT TEMPORARY TABLESPACE tempts1
  20. TEMPFILE '/app/oracle/ora12c/oradata/nocdb/temp01.dbf' SIZE 20M
  21. UNDO TABLESPACE undotbs1
  22. DATAFILE '/app/oracle/ora12c/oradata/nocdb/undotbs01.dbf' SIZE 200M
  23. USER_DATA TABLESPACE usertbs
  24. DATAFILE '/app/oracle/ora12c/oradata/nocdb/usertbs01.dbf' SIZE 200M;
复制代码

步骤10:创建其他表空间

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

  1. SQL> CREATE TABLESPACE apps_tbs LOGGING
  2. DATAFILE '/app/oracle/ora12c/oradata/nocdb/apps01.dbf'
  3. SIZE 500M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED
  4. EXTENT MANAGEMENT LOCAL;
复制代码

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

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

使用sysdba权限执行以下脚本

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

使用SYSTEM用户执行以下脚本

  1. SQL> @?/sqlplus/admin/pupbld.sql --SQL*Plus相关
  2. --验证结果
  3. SQL> SELECT name,
  4. 2 DECODE (cdb,
  5. 3 'YES', 'Multitenant Option enabled',
  6. 4 'Regular 12c Database: ')
  7. 5 "Multitenant Option",
  8. 6 open_mode,
  9. 7 con_id
  10. 8 FROM v$database;
  11. NAME Multitenant Option OPEN_MODE CON_ID
  12. --------- -------------------------- -------------------- ----------
  13. 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表空间中的种子。从根继承的值用于尚未提供其值的任何属性。

如下示例

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

2、创建cdb数据库

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

  1. --设定环境变量
  2. $ export ORACLE_SID=cdb1
  3. $ export ORACLE_UNQNAME=cdb1
  4. --创建相应目录
  5. $ mkdir -pv /app/oracle/ora12c/oradata/cdb1
  6. $ mkdir -pv /app/oracle/ora12c/oradata/pdbseed
  7. --生成参数文件
  8. $ vi $ORACLE_HOME/dbs/initcdb1.ora
  9. DB_NAME=cdb1
  10. CONTROL_FILES='/app/oracle/ora12c/oradata/cdb1/contorl01.ctl'
  11. MEMORY_TARGET=380m
  12. ENABLE_PLUGGABLE_DATABASE=true
  13. --开始建库
  14. $ sqlplus / as sysdba
  15. SQL> create spfile from pfile='$ORACLE_HOME/dbs/initcdb1.ora';
  16. SQL> startup nomount;
  17. SQL> CREATE DATABASE cdb1
  18. USER SYS IDENTIFIED BY pass
  19. USER SYSTEM IDENTIFIED BY pass
  20. LOGFILE GROUP 1 ('/app/oracle/ora12c/oradata/cdb1/redo01a.log','/app/oracle/ora12c/oradata/cdb1/redo01b.log')
  21. SIZE 100M BLOCKSIZE 512,
  22. GROUP 2 ('/app/oracle/ora12c/oradata/cdb1/redo02a.log','/app/oracle/ora12c/oradata/cdb1/redo02b.log')
  23. SIZE 100M BLOCKSIZE 512
  24. MAXLOGHISTORY 1
  25. MAXLOGFILES 16
  26. MAXLOGMEMBERS 3
  27. MAXDATAFILES 1024
  28. CHARACTER SET AL32UTF8
  29. NATIONAL CHARACTER SET AL16UTF16
  30. EXTENT MANAGEMENT LOCAL
  31. DATAFILE '/app/oracle/ora12c/oradata/cdb1/system01.dbf' SIZE 700M
  32. SYSAUX DATAFILE '/app/oracle/ora12c/oradata/cdb1/sysaux01.dbf' SIZE 550M
  33. DEFAULT TABLESPACE deftbs
  34. DATAFILE '/app/oracle/ora12c/oradata/cdb1/deftbs01.dbf' SIZE 500M
  35. DEFAULT TEMPORARY TABLESPACE tempts1
  36. TEMPFILE '/app/oracle/ora12c/oradata/cdb1/temp01.dbf' SIZE 20M
  37. UNDO TABLESPACE undotbs1
  38. DATAFILE '/app/oracle/ora12c/oradata/cdb1/undotbs01.dbf' SIZE 200M
  39. ENABLE PLUGGABLE DATABASE
  40. SEED
  41. FILE_NAME_CONVERT = ('/app/oracle/ora12c/oradata/cdb1/',
  42. '/app/oracle/ora12c/oradata/pdbseed/')
  43. SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
  44. SYSAUX DATAFILES SIZE 100M
  45. USER_DATA TABLESPACE usertbs
  46. DATAFILE '/app/oracle/ora12c/oradata/pdbseed/usertbs01.dbf' SIZE 200M;
  47. --填充数据字典,如果是12cR2版本,则直接执行catcdb.sql代替以下脚本
  48. --使用sysdba权限执行以下脚本
  49. SQL> @?/rdbms/admin/catalog.sql --数据库字典,动态视图创建等
  50. SQL> @?/rdbms/admin/catproc.sql --PL/SQL存过过程相关代码
  51. SQL> @?/rdbms/admin/utlrp.sql --编译
  52. --使用SYSTEM用户执行以下脚本
  53. SQL> @?/sqlplus/admin/pupbld.sql #SQL*Plus相关
  54. SQL> select 'Leshami' Author,'http://blog.csdn.net/leshami' Blog,
  55. 2 '645746311' QQ from dual;
  56. AUTHOR BLOG QQ
  57. ------- ---------------------------- ---------
  58. Leshami http://blog.csdn.net/leshami 645746311
  59. --验证结果
  60. SQL> SELECT name,
  61. 2 DECODE (cdb,
  62. 3 'YES', 'Multitenant Option enabled',
  63. 4 'Regular 12c Database: ')
  64. 5 "Multitenant Option",
  65. 6 open_mode,
  66. 7 con_id
  67. 8 FROM v$database;
  68. NAME Multitenant Option OPEN_MODE CON_ID
  69. --------- -------------------------- -------------------- ----------
  70. CDB1 Multitenant Option enabled READ WRITE 0
复制代码

三、更多参考

Oracle 12c多租户架构及优缺点

http://docs.oracle.com/database/122/ADMIN/creating-and-configuring-an-oracle-database.htm

http://docs.oracle.com/database/122/ADMIN/creating-and-configuring-a-cdb.htm

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对程序员之家的支持。



回复

使用道具 举报