在Oracle中,什么是手动建库?手动建库有哪些步骤?
有时候因为环境的缘故不能使用图形界面或者不能使用DBCA的静默方式来创建一个新库,那么这个时候可以考虑使用“CREATE DATABASE”这种SQL命令行来创建数据库,该方式称为手动建库方式。使用手动建库的优点是:可以用脚本来创建数据库。另外,在OCM的考试中也要求DBA进行手动建库。
CREATE DATABASE命令详解如下所示:
1CREATE DATABASE {DB_NAME} --> #数据库名,一般与ORACLE_SID相同 2USER SYS IDENTIFIED BY {密码} --> #若不设置则默认为“change_on_install” 3USER SYSTEM IDENTIFIED BY {密码} --> #若不设置则默认为“manager” 4MAXLOGFILES 5 --> #最大日志组数 5MAXLOGMEMBERS 5 --> #日志组中最多成员数 6MAXLOGHISTORY 1 --> #RAC环境下有效 7MAXDATAFILES 100 --> #最大数据文件数,在Oracle 9i后,由DB_FILES参数来控制“最大数据文件数” 8LOGFILE GROUP 1 ('/oradata/orcl/redo01a.log','/oradata/orcl/redo01b.log') size 50M, GROUP 2 ('/oradata/orcl/redo02a.log','/oradata/orcl/redo02b.log') size 50M, GROUP 3 ('/oradata/orcl/redo03a.log','/oradata/orcl/redo03b.log') size 50M --> #创建日志组及组中成员 12CHARACTER SET ZHS16GBK --> #数据库字符集 13NATIONAL CHARACTER SET AL16UTF16 --> #国家字符集 14EXTENT MANAGEMENT LOCAL --> #指定SYSTEM表空间中扩展段的管理方式 [ LOCAL | DICTIONARY ] 15DATAFILE '/oradata/orcl/system01.dbf' SIZE 500M --> #创建“SYSTEM表空间” 16SYSAUX DATAFILE '/oradata/orcl/sysaux01.dbf' SIZE 500M --> #创建“SYSAUX表空间” 17DEFAULT TABLESPACE USERS DATAFILE '/oradata/orcl/users01.dbf' SIZE 500M AUTOEXTEND ON MAXSIZE UNLIMITED --> #创建“默认(永久)表空间” 18DEFAULT TEMPORARY TABLESPACE TEMPTBS 19TEMPFILE '/oradata/orcl/temp01.dbf' SIZE 300M --> #创建“默认临时表空间” 20UNDO TABLESPACE UNDOTBS1 DATAFILE '/oradata/orcl/undotbs01.dbf' SIZE 300M AUTOEXTEND ON MAXSIZE UNLIMITED --> #创建“UNDO表空间”,这里的UNDO表空间名,一定要与“参数文件中的UNDO表空间”名称一样,否则创建失败 21SET TIME_ZONE = '+08:00'; --> #指定时区
CREATE DATABASE的其它子句:
1MAXINSTANCES --> #用于RAC下,表示一个数据库最多可以有多少个实例 2NOARCHIVELOG / ARCHIVELOG --> #非归档模式 / 归档模式 3FORCE LOGGING --> #除了对临时表空间的操作,对其他对象的所有操作都需要记到日志中 4SET DEFAULT SMALLFILE | BIGFILE TABLESPACE --> #指定表空间的物理实现方式,SMALLFILE表示一个表空间可以有一个或多个数据文件组成,BIGFILE表示一个表空间只能有一个数据文件组成(一般用于ASM环境下)
下面给出手动建库的一般过程:
(一)指定实例标示符(SID)
为实例设置一个唯一的Oracle系统标示符(SID),以下命令为在Linux系统中为实例设置SID的方式。需要说明的是,数据库名称最大支持8个字符,若超过8个字符,则在数据库启动的时候会报“ORA-01127: database name 'lhrdba11g' exceeds size limit of 8 characters”的错误。
1[oracle@rhel6lhr ~]$ export ORACLE_SID=lhrdb11g
(二)确保环境变量设置设置正确
不同的操作系统平台,在启动SQL*Plus之前,首先需要配置Oracle用户的环境变量。在大多数操作系统平台上,ORACLE_HOME和ORACLE_SID是必须设置的环境变量。此外,最好将ORACLE_HOME/bin加入PATH环境变量中。在Linux操作系统中,这些环境变量必须手动设置;在Windows平台上,OUI会自动在Windows注册表中指定这些环境变量的值。以下示例为Linux环境的Oracle用户变量设置:
1[oracle@rhel6lhr ~]$ pwd 2/home/oracle 3[oracle@rhel6lhr ~]$ more .bash_profile 4# .bash_profile 5# Get the aliases and functions 6if [ -f ~/.bashrc ]; then 7. ~/.bashrc 8fi 9export ORACLE_SID=lhrdb11g 10export ORACLE_BASE=/u01/app/oracle 11export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 12export LD_LIBRARY_PATH=/u01/app/oracle/11g/lib:/lib:/usr/lib:/usr/local/lib:/usr/X11R6/lib 13export TNS_ADMIN=/u01/app/oracle/11g/network/admin 14export PATH=$PATH:$ORACLE_HOME/bin
(三)创建密码文件
在用SQL*Plus连接创建数据库时,当前操作系统用户必须被授予相应的系统权限进行权限认证,可以通过以下两种方式来实现管理权限认证:
① 密码文件认证:可以通过orapwd命令创建密码文件
② 操作系统认证:确保当前登录的操作系统用户已经加入对应的操作系统用户组
示例如下所示:
1[oracle@rhel6lhr ~]$ id oracle 2uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba) 3[oracle@rhel6lhr ~]$ orapwd file=$ORACLE_HOME/dbs/orapwlhrdb11g password=lhr force=y #创建密码文件
(四)创建初始化参数文件和相关路径
创建文本形式的初始化参数文件(PFILE),在后面的步骤中,可以根据该文本文件来创建服务器参数文件(SPFILE)。如果是手动创建初始化参数文件,确保其至少包含DB_NAME、CONTROL_FILES和MEMORY_TARGET这三个参数。
为了方便,初始化参数文件存储在Oracle默认的位置($ORACLE_HOME/dbs/),使用默认的文件名。这样,在打开数据库的时候,Oracle会自动查找默认初始化参数路径,就不需要指定pfile参数即可。
PFILE示例如下所示:
1[oracle@rhel6lhr ~]$ more $ORACLE_HOME/dbs/initlhrdb11g.ora 2db_name='lhrdb11g' 3memory_target=400437056 4processes = 300 5audit_file_dest='/u01/app/oracle/admin/lhrdb11g/adump' 6audit_trail ='db' 7db_block_size=8192 8db_recovery_file_dest='/u01/app/oracle/flash_recovery_area' 9db_recovery_file_dest_size=2G 10diagnostic_dest='/u01/app/oracle' 11dispatchers='(PROTOCOL=TCP) (SERVICE=MYNEWDBXDB)' 12open_cursors=300 13remote_login_passwordfile='EXCLUSIVE' 14undo_tablespace='UNDOTBS1' 15control_files = '/u01/app/oracle/oradata/lhrdb11g/control01.ctl','/u01/app/oracle/flash_recovery_area/lhrdb11g/control02.ctl' 16compatible ='11.2.0'
创建相关路径:
1mkdir -p /u01/app/oracle/admin/lhrdb11g/adump 2mkdir -p /u01/app/oracle/flash_recovery_area/lhrdb11g/ 3mkdir -p /u01/app/oracle/oradata/lhrdb11g/
(五)连接实例
如果是Windows操作系统环境,在连接实例之前需要使用oradim命令创建一个实例,命令格式如下:
1oradim -NEW -SID sid -STARTMODE MANUAL -PFILE pfile
这里使用的是Linux系统,所以上面的步骤就不需要了,直接通过下面的命令来连接数据库实例:
1[oracle@rhel6lhr ~]$ sqlplus / as sysdba 2SQL*Plus: Release 11.2.0.3.0 Production on Sun Mar 19 12:54:16 2017 3Copyright (c) 1982, 2011, Oracle. All rights reserved. 4Connected to an idle instance. 5SYS@lhrdb11g >
(六)创建服务器参数文件(SPFILE)
可以通过ALTER SYSTEM命令修改服务器参数文件(SPFILE),而且需要重启数据库后才生效,可以通过文本初始化文件来创建服务器参数文件。
1SYS@lhrdb11g > CREATE SPFILE FROM PFILE; 2File created.
上面的命令会自动从默认位置的默认名称读取文本初始化参数文件(PFILE),然后根据初始化参数文件来创建服务器参数文件;同时服务器参数文件(SPFILE)的存放路径和命名格式会采用Oracle默认的。
(七)启动实例
在不启动数据库的情况下,以NOMOUNT选项加载数据库,因为初始化参数文件或服务器参数文件被存储在默认的路径,所以这里不需要指定PFILE参数。而且这里只是加载实例内存和启动实例进程,数据库本身还是不存在的。
1SYS@lhrdb11g > startup nomount 2ORACLE instance started. 3Total System Global Area 400846848 bytes 4Fixed Size 2228784 bytes 5Variable Size 268438992 bytes 6Database Buffers 121634816 bytes 7Redo Buffers 8544256 bytes
(八)执行CREATE DATABASE命令
1SYS@lhrdba11g> @/tmp/create_db.sql 2Database created. 3SYS@lhrdba11g > select status from v$instance; 4STATUS 5------------------------ 6OPEN 7SYS@lhrdba11g> !more /tmp/create_db.sql 8CREATE DATABASE lhrdb11g 9USER SYS IDENTIFIED BY lhrdb11g 10USER SYSTEM IDENTIFIED BY lhrdb11g 11LOGFILE GROUP 1('/u01/app/oracle/oradata/lhrdb11g/redo01a.log','/u01/app/oracle/oradata/lhrdb11g/redo01b.log') SIZE 10M BLOCKSIZE 512, 12GROUP 2('/u01/app/oracle/oradata/lhrdb11g/redo02a.log','/u01/app/oracle/oradata/lhrdb11g/redo02b.log') SIZE 10M blocksize 512, 13GROUP 3('/u01/app/oracle/oradata/lhrdb11g/redo03a.log','/u01/app/oracle/oradata/lhrdb11g/redo03b.log') SIZE 10M BLOCKSIZE 512 14MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXLOGHISTORY 1 MAXDATAFILES 100 15CHARACTER SET AL32UTF8 16NATIONAL CHARACTER SET AL16UTF16 17EXTENT MANAGEMENT LOCAL 18DATAFILE '/u01/app/oracle/oradata/lhrdb11g/system01.dbf' SIZE 200M REUSE 19SYSAUX DATAFILE '/u01/app/oracle/oradata/lhrdb11g/sysaux01.dbf' SIZE 100M REUSE 20DEFAULT TABLESPACE users DATAFILE '/u01/app/oracle/oradata/lhrdb11g/users01.dbf' SIZE 10M 21REUSE AUTOEXTEND ON MAXSIZE UNLIMITED 22DEFAULT TEMPORARY TABLESPACE tempts1 23TEMPFILE '/u01/app/oracle/oradata/lhrdb11g/temp01.dbf' 24SIZE 20M REUSE 25UNDO TABLESPACE undotbs1 26DATAFILE '/u01/app/oracle/oradata/lhrdb11g/undotbs01.dbf' 27SIZE 20M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED 28/
这里根据需要也可以创建BIGFILE形式的表空间,但是常见的错误有“ORA-01519”和“ORA-32772”,该错误主要是由于语句“SET DEFAULT BIGFILE TABLESPACE”的位置不对引起的。如下给出一个正确的脚本:
1CREATE DATABASE lhrasm 2USER SYS IDENTIFIED BY lhr 3USER SYSTEM IDENTIFIED BY lhr 4CONTROLFILE REUSE 5CONTROLFILE REUSE 6CHARACTER SET ZHS16GBK 7NATIONAL CHARACTER SET AL16UTF16 8EXTENT MANAGEMENT LOCAL 9ARCHIVELOG 10MAXLOGFILES 192 MAXLOGMEMBERS 5 MAXLOGHISTORY 292 MAXDATAFILES 1024 MAXINSTANCES 32 11LOGFILE GROUP 1('+DATA','+DATA') SIZE 50M BLOCKSIZE 512, GROUP 2('+DATA','+DATA') SIZE 50M blocksize 512, GROUP 3('+DATA','+DATA') SIZE 50M BLOCKSIZE 512 14DATAFILE '+DATA' SIZE 300M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED 15SYSAUX DATAFILE '+DATA' SIZE 100M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED 16SET DEFAULT bigfile TABLESPACE 17DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '+DATA' SIZE 20M REUSE AUTOEXTEND OFF 18UNDO TABLESPACE UNDOTBS1 DATAFILE '+DATA'SIZE 50M REUSE AUTOEXTEND OFF 19DEFAULT TABLESPACE USERS DATAFILE '+DATA' SIZE 500M REUSE AUTOEXTEND OFF 20;
(九)创建其它表空间
1SQL> CREATE TABLESPACE apps_tbs LOGGING DATAFILE '/u01/app/oracle/oradata/lhrdb11g/apps01.dbf' SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL; 5Tablespace created.
(十)运行脚本创建数据字典视图
运行如下脚本创建数据字典,该过程比较慢:
1SPOOL /tmp/dictionary_tmp.sql 2@?/rdbms/admin/catalog.sql 3@?/rdbms/admin/catproc.sql 4@?/rdbms/admin/catclust.sql 5@?/rdbms/admin/dbmspool.sql 6@?/rdbms/admin/catblock.sql 7@?/rdbms/admin/caths.sql 8@?/rdbms/admin/owminst.plb 9@?/sqlplus/admin/plustrce.sql 10@?/rdbms/admin/utlrp.sql 11@?/rdbms/admin/utlsampl.sql 12conn system/lhr 13@?/sqlplus/admin/pupbld.sql 14@?/sqlplus/admin/help/hlpbld.sql helpus.sql 15SPOOL off
下表是有关手动建库过程中常见脚本的用途:
脚本名称 | 运行用户 | 简介 |
@?/rdbms/admin/catalog.sql | SYS | 创建数据字典和公共同义词,创建数据库字典的核心脚本之一 |
@?/rdbms/admin/catproc.sql | SYS | 创建PL/SQL程序包,创建数据库字典的核心脚本之一 |
@?/rdbms/admin/catclust.sql | SYS | 创建RAC环境的数据字典 |
@?/rdbms/admin/catblock.sql | SYS | 可动态展示锁的信息 |
@?/rdbms/admin/dbmspool.sql | SYS或SYSDBA | 创建DBMS_SHARED_POOL系统包,DBA可以将PL/SQL包、SQL语句或触发器放入Shared Pool中,也可以清除它们 |
@?/rdbms/admin/caths.sql | SYS | 监控各种服务的包 |
@?/rdbms/admin/utlrp.sql | SYS | 重新编译所有INVALID状态的PL/SQL程序,包括包、存储过程和TYPES |
@?/rdbms/admin/owminst.plb | SYS | 创建WMSYS用户 |
@?/rdbms/admin/utlsampl.sql | SYS | 重建SCOTT用户 |
@?/rdbms/admin/utlxplan.sql | SYS | 创建PLAN_TABLE表用于查询执行计划,报错信息有:“SP2-0613: Unable to verify PLAN_TABLE format or existence”和“SP2-0611: Error enabling EXPLAIN report” |
@?/sqlplus/admin/pupbld.sql | SYSTEM | 该脚本用于解决在登录数据库时报有关PRODUCT_USER_PROFILE的错误:“Error accessing PRODUCT_USER_PROFILE,Warning: Product user profile information not loaded!” |
@?/sqlplus/admin/plustrce.sql | SYS | 创建创建PLUSTRACE角色,赋予普通用户执行“set autot on”的权限,报错信息有:“SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled”和“SP2-0611: Error enabling STATISTICS report” |
@?/sqlplus/admin/help/hlpbld.sql helpus.sql | SYSTEM | SQL*Plus的帮助文档 |
安装完成后,可以根据需要安装一些组件,详情请参考【3.2.19.7 在Oracle中有哪些常见组件?】。另外,在dbca静默安装中有个参数是sampleSchema,若设置为true,则安装后数据库中有EXAMPLE表空间,有HR、OE、PM、SH、IX用户,大约占用350M的空间,若设置为false,则后续可以参考文档(http://blog.itpub.net/26736162/viewspace-2098222/)来安装。
& 说明:
有关手动建库的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2121981/、http://blog.itpub.net/26736162/viewspace-2098205/
本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
DB宝分享的IT资料:https://mp.weixin.qq.com/s/Iwsy-zkzwgs8nYkcMz29ag
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:230161599、618766405
● 微信:lhrbestxh
● 微信公众号:DB宝
● 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:DB宝,学习最实用的数据库技术。
本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。