• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Oracle 12c实现手工建库而非CDB及CDB创建的方法

    前言

    相信大家应该都知道,对于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容器数据文件属性
    
    SEED
    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多租户架构及优缺点

    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

    总结

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

    您可能感兴趣的文章:
    • oracle 12c创建可插拔数据库(PDB)与用户详解
    上一篇:Oracle生成不重复票号与LPAD,RPAD与NEXTVAL函数解析
    下一篇:Oracle AWR(自动工作量资料档案库)的管理与维护详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Oracle 12c实现手工建库而非CDB及CDB创建的方法 Oracle,12c,实现,手工,建库,