zoukankan      html  css  js  c++  java
  • Oracle 11g R2创建数据库之手工建库方式--转发

    目录


    正文

    在之前的博文当中梳理了关于DBCA静默方式创建数据库的过程,本文就手工通过SQL*PLUS客户端采用CREATE DATABASE语句创建数据库。这种建库方式就是完全使用手工SQL语句创建数据库,通常而言都会推荐DBCA图形界面方式创建,因为更为直观,但并非所有场景都有图形界面。DBCA也可以使用静默方式进行创建数据库,详细可参考我另一篇博文:Oracle 11g R2创建数据库之DBCA静默方式

    手工方式是采用执行CREATE DATABASESQL语句完成的。相比较DBCA工具建库而言,手工方式可以将建库语句编写成脚本语句,可以通过执行脚本来完成建库。在完成手工方式创建数据库之前还需进行额外的操作以保证数据库可用性:

    • 创建数据字典以及基于数据字典视图;
    • 创建标准的PL/SQL包。

    这些操作也都可以写进脚本当中执行,简化了操作步骤。

    关于手工方式创建数据库详细步骤可以参考官方文档:Creating a Database with the CREATE DATABASE Statement

    环境准备

    1. 操作系统(OS):CentOS Linux release 7.5.1804 (Core)
    2. 数据库版本(Oracle Database):Oracle Database 11g R2(11.2.0.4.0)

    其中监听也已经通过静默方式配置启动成功。

    总体步骤

    1. 指定数据库实例的SID
    2. 配置系统环境变量
    3. 指定数据库管理员认证方式
    4. 创建初始化参数文件(pfile)
    5. 连接数据库实例
    6. 创建服务器参数文件(spfile)
    7. 启动数据库实例
    8. 执行CREATE DATABASE建库语句
    9. 创建额外的表空间(如索引表空间)
    10. 执行脚本创建数据字典视图

    步骤解析

    指定数据库实例(SID)

    SID是Oracle数据库在同一服务器上的唯一标识。通过环境变量ORACLE_SID指定,在Linux系统下ORACLE_SID是区分大小写的,长度最大为8个字符,有两种方式配置:

    • 环境变量配置文件中指定,环境变量文件一般是oracle用户home目录下的.bash_profile
    $ grep ORACLE_SID /home/oracle/.bash_profile
    export ORACLE_SID=dbabd                                  #实例SID 
    
    • 会话级别直接使用命令export指定。
    $ export ORACLE_SID=dbabd
    

    配置系统环境变量

    主要是配置ORACLE_HOME环境变量值,并且将oracle命令路径 $ORACLE_HOME/bin加入系统PATH变量中方便以使用,可以参考SID配置写入环境变量文件当中。

    $ grep ORACLE_HOME /home/oracle/.bash_profile
    export ORACLE_HOME=/data/app/oracle/product/11.2.0/db_1  #Oracle Home目录
    export PATH=$PATH:$ORACLE_HOME/bin                       #命令加入系统环境变量中
    

    指定管理员认证方式

    根据官方文档的描述,数据库管理员的认证方式有如下方式:

    • 通过密码文件认证;
    • 通过操作系统级别认证。

    如果是通过操作系统认证,则用户要是属于dba组的成员,如果是密码文件认证必须创建密码文件:

    $ orapwd file=$ORACLE_HOME/dbs/orapwdbabd password=oracle entries=10
    

    创建初始化参数文件

    这里的初始化参数文件指的pfile,pfile可以能过文本编辑器进行编辑与修改,待实例启动成功之后根据pfile创建服务器参数文件(spfile)。spfile使有的数据库参数能够在实例运行中动态修改并且生效,大大增加了数据库参数的可维护性。pfile和spfile文件默认存储的路径为 $ORACLE_HOME/dbs。pfile的命名格式为initSID.ora,本文创建的pfile文件名为initdbabd.ora,根据官方文档的要求,初始化参数文件最少都要包含如下参数DB_NAMECONTROL_FILESMEMORY_TARGETinitdbabd.ora内容如下:

    DB_NAME=dbabd
    CONTROL_FILES=(/data/app/oracle/data/dbabd/control01.ctl,/data/app/oracle/data/dbabd/control02.ctl)
    MEMORY_TARGET=300M
    

    也可以通过模板参数文件init.ora进行修改,init.ora内容如下:

    $ cat init.ora | grep -v ^$ | grep -v ^#
    db_name='ORCL'
    memory_target=1G
    processes = 150
    audit_file_dest='<ORACLE_BASE>/admin/orcl/adump'
    audit_trail ='db'
    db_block_size=8192
    db_domain=''
    db_recovery_file_dest='<ORACLE_BASE>/flash_recovery_area'
    db_recovery_file_dest_size=2G
    diagnostic_dest='<ORACLE_BASE>'
    dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
    open_cursors=300
    remote_login_passwordfile='EXCLUSIVE'
    undo_tablespace='UNDOTBS1'
    control_files = (ora_control1, ora_control2)
    compatible ='11.2.0'
    

    连接数据库实例

    在连接之前确保当前环境变量的配置,主要检查的是数据库实例SID变量ORACLE_SID的值:

    $ echo $ORACLE_SID
    dbabd
    
    $ sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.4.0 Production on Fri Jan 11 15:16:12 2019
    
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    
    Connected to an idle instance.
    
    SQL>                      
    

    创建服务器参数文件

    通过create spfile from pfile语句从初始化参数文件创建服务器参数文件,路径也是保存在 $ORACLE_HOME/dba目录下:

    $ sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.4.0 Production on Fri Jan 11 15:20:04 2019
    
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    
    Connected to an idle instance.
    
    SQL> create spfile from pfile;
    
    File created.
    
    $ pwd
    /data/app/oracle/product/11.2.0/db_1/dbs
    $ ls *.ora
    initdbabd.ora  init.ora  spfiledbabd.ora
    

    启动数据库实例

    启动数据库实例,因为当前只有参数文件,所以只能将实例启动到NOMOUNT状态:

    SQL> startup nomount;
    ORACLE instance started.
    
    Total System Global Area  313159680 bytes
    Fixed Size                  2252824 bytes
    Variable Size             222302184 bytes
    Database Buffers           83886080 bytes
    Redo Buffers                4718592 bytes
    
    SQL> select status from v$instance;
    
    STATUS
    ------------------------------------
    STARTED
    
    

    即使直接执行命令startup也是只能启动到NOMOUNT状态,并会报ORA-00205错误,因为当前只有参数文件。

    SQL> startup;
    ORACLE instance started.
    
    Total System Global Area  313159680 bytes
    Fixed Size                  2252824 bytes
    Variable Size             222302184 bytes
    Database Buffers           83886080 bytes
    Redo Buffers                4718592 bytes
    ORA-00205: error in identifying control file, check alert log for more info
    
    

    执行建库语句

    最关键的一个步骤,就是执行CREATE DATABASE建库语句。开始创建数据库之前检查确保:

    • 数据文件目录存在
    • 日志文件目录存在
    • 控制文件目录存在

    本文以上三类文件的路径统一为 /data/app/oracle/data/dbabd

    官方文档上有CREATE DATABASE语句的模板:Issue the CREATE DATABASE Statement,也可以根据需求自定义CREAET DATABASE语句,以下是通过模板进行修改的语句:

    CREATE DATABASE dbabd                          -- 数据库名,DB_NAME
       USER SYS IDENTIFIED BY oracle               -- sys用户密码
       USER SYSTEM IDENTIFIED BY oracle            -- system用户密码
       LOGFILE GROUP 1 ('/data/app/oracle/data/dbabd/redo01.log') SIZE 100M BLOCKSIZE 512,     -- 在线日志
               GROUP 2 ('/data/app/oracle/data/dbabd/redo02.log') SIZE 100M BLOCKSIZE 512,
               GROUP 3 ('/data/app/oracle/data/dbabd/redo03.log') SIZE 100M BLOCKSIZE 512
       MAXLOGFILES 5
       MAXLOGMEMBERS 5
       MAXLOGHISTORY 1
       MAXDATAFILES 100
       CHARACTER SET AL32UTF8                      -- 数据库字符集        
       NATIONAL CHARACTER SET AL16UTF16
       EXTENT MANAGEMENT LOCAL
       DATAFILE '/data/app/oracle/data/dbabd/system01.dbf' SIZE 325M REUSE           -- 各个表空间数据文件
       SYSAUX DATAFILE '/data/app/oracle/data/dbabd/sysaux01.dbf' SIZE 325M REUSE
       DEFAULT TABLESPACE users
          DATAFILE '/data/app/oracle/data/dbabd/users01.dbf'
          SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
       DEFAULT TEMPORARY TABLESPACE temp
          TEMPFILE '/data/app/oracle/data/dbabd/temp01.dbf'
          SIZE 20M REUSE
       UNDO TABLESPACE undotbs
          DATAFILE '/data/app/oracle/data/dbabd/undotbs01.dbf'
          SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
    

    以上注释只是为了更好解析语句的内容,实际语句当中并不存在注释内容。

    执行以上CREATE DATABASE语句:

    SQL> CREATE DATABASE dbabd
      2     USER SYS IDENTIFIED BY oracle
      3     USER SYSTEM IDENTIFIED BY oracle
      4     LOGFILE GROUP 1 ('/data/app/oracle/data/dbabd/redo01.log') SIZE 100M BLOCKSIZE 512,
      5             GROUP 2 ('/data/app/oracle/data/dbabd/redo02.log') SIZE 100M BLOCKSIZE 512,
      6             GROUP 3 ('/data/app/oracle/data/dbabd/redo03.log') SIZE 100M BLOCKSIZE 512
      7     MAXLOGFILES 5
      8     MAXLOGMEMBERS 5
      9     MAXLOGHISTORY 1
     10     MAXDATAFILES 100
     11     CHARACTER SET AL32UTF8
     12     NATIONAL CHARACTER SET AL16UTF16
     13     EXTENT MANAGEMENT LOCAL
     14     DATAFILE '/data/app/oracle/data/dbabd/system01.dbf' SIZE 325M REUSE
     15     SYSAUX DATAFILE '/data/app/oracle/data/dbabd/sysaux01.dbf' SIZE 325M REUSE
     16     DEFAULT TABLESPACE users
     17        DATAFILE '/data/app/oracle/data/dbabd/users01.dbf'
     18        SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
     19     DEFAULT TEMPORARY TABLESPACE temp
     20        TEMPFILE '/data/app/oracle/data/dbabd/temp01.dbf'
     21        SIZE 20M REUSE
     22     UNDO TABLESPACE undotbs
     23        DATAFILE '/data/app/oracle/data/dbabd/undotbs01.dbf'
     24        SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
    
    Database created.
    

    创建额外表空间(可选)

    这一步是可选的,如果建库语句创建的数据库已经满足需求,这步可以跳过,本文这一步创建一个索引表空间:

    SQL> create tablespace idx_tbs datafile '/data/app/oracle/data/dbabd/idx_tbs01.dbf' size 100M;
    
    Tablespace created.
    

    创建数据字典视图

    执行额外的SQL脚本创建数据字典、视图、同义词、PL/SQL包等。脚本所在路径为 ORACLE_HOME/rdbms/admin$ORACLE_HOME/sqlplus/admin,关于执行的SQL脚本及其作用可以参考官方文档:Run Scripts to Build Data Dictionary Views

    以SYS用户执行:

    @?/rdbms/admin/catalog.sql
    @?/rdbms/admin/catproc.sql
    @?/rdbms/admin/utlrp.sql
    

    执行完成后切换到SYSTEM用户执行:

    @?/sqlplus/admin/pupbld.sql
    

    在SQL*PLUS当中,?代表的是$ORACLE_HOME。

    至此,手工方式创建数据库完成,可以通过sqlplus进行查询实例状态:

    SQL> select instance_name,startup_time,status from v$instance;
    
    INSTANCE_NAME                                    STARTUP_TIME        STATUS
    ------------------------------------------------ ------------------- ------------------------------------
    dbabd                                            2019-01-11 15:26:49 OPEN
    

    也可以通过监听查看实例状态:

    $ lsnrctl status
    
    LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 11-JAN-2019 16:53:17
    
    Copyright (c) 1991, 2013, Oracle.  All rights reserved.
    
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
    Start Date                11-JAN-2019 10:35:36
    Uptime                    0 days 6 hr. 17 min. 41 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /data/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
    Listener Log File         /data/app/oracle/diag/tnslsnr/dbabd/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dbabd)(PORT=1521)))
    Services Summary...
    Service "dbabd" has 1 instance(s).
      Instance "dbabd", status READY, has 1 handler(s) for this service...
    The command completed successfully
    

    参考

    https://docs.oracle.com/cd/E11882_01/server.112/e25494/create.htm#ADMIN11073

    转发:https://www.cnblogs.com/dbabd/p/10256074.html

    ☆〖本人水平有限,文中如有错误还请留言批评指正!〗☆

  • 相关阅读:
    CnSharp代码生成器。
    C#后台调用前台javascript的五种方法
    winfrom如何做一个语法着色控件
    Delphi AdvStringGrid表格保存和TClientDataSet发生关系的构想。
    Oracle 修改数据库字段的类型的语句
    structs 标签库(html)(转帖)
    Android Unable to resolve target 'android8'
    Android SDL_app: emulatorarm.exe 应用程序错误
    如何MyEclipse中显示WEBINF文件夹下的classes目录以及目录中的class文件
    Android conversion to dalvik format failed with error 1的解决办法
  • 原文地址:https://www.cnblogs.com/xiaoyaojinzhazhadehangcheng/p/15098191.html
Copyright © 2011-2022 走看看