Oracle 11G手工建库

Oracle除自带的DBCA可以创建数据库以外,还可以利用Oracle手动创建数据库,也是作为DBA人员必须要掌握的。
下面就介绍一下手动创建数据库的步骤:

  • 创建必要的相关目录
  • 创建初始化参数文件
  • 设置环境变量ORACLE_SID
  • 创建口令文件
  • 启动数据库到nomount(实例)状态
  • 执行建库脚本
  • 执行catalog脚步本创建数据字典
  • 执行catproc创建package包
  • 执行pupbld
  • 由初始化参数文件创建spfile文件

下面以创建一个名为“RAC1”的数据库为例

1、 创建必要的相关目录

shell> cd $ORACLE_BASE;
shell> mkdir -p oradata/rac1            #存放数据库文件
shell> mkdir -p flash_recovery_area
shell> mkdir -p admin/rac1

2. 创建初始化参数文件

数据库系统启动时须要用初始化参数文件的设置分配内存、启动必要的后台进程的。
因此,初始化参数文件创建的是否正确、参数设置是否正确关系着整个建库的“命运”。
创建初始化参数文件可以通过拷贝现在的初始化参数文件并将其做适当的修改即可,从而不必要用
手工去一句一句地写出来,因为初始化参数文件的结构体系基本上都是一样的。

shell> cp $ORACLE_HOME/dbs/init.ora $ORACLE_HOME/dbs/initRAC1.ora
shell> vi $ORACLE_HOME/dbs/initRAC1.ora

修改其内容如下:
db_name='RAC1'
memory_target=1G
processes = 150
audit_file_dest='/db/oracle/admin/rac1/adump'
audit_trail ='db'
db_block_size=8192
db_domain='RAC1'
db_recovery_file_dest='/db/oracle/flash_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/db/oracle'
dispatchers='(PROTOCOL=TCP) (SERVICE=RAC1XDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
undo_management=auto
# You may want to ensure that control files are created on separate physical
# devices
control_files = ('/db/oracle/oradata/rac1/control01.ctl',
                 '/db/oracle/oradata/rac1/control02.ctl',
                 '/db/oracle/flash_recovery_area/control03.ctl')
compatible ='11.2.0'

注意:参数文件不能包含中文,否则会出现:

SQL> startup pfile='/db/oracle/product/11.2.0/db_1/dbs/initRAC1.ora';
LRM-00123: invalid character 146 found in the input file
ORA-01078: failure in processing system parameters

3. 设置环境变量ORACLE_SID

shell> export ORACLE_SID=RAC1
shell> echo $ORACLE_SID
RAC1

4. 创建口令文件

shell> orapwd file=$ORACLE_HOME/dbs/pwdRAC1.ora password=oracle entries=2 force=y

orapwd是Oracle提供的创建口令文件的工具各称,file参数指定口令文件所在的目录和文件名称,
password参数指定sys用户的口令,entries参数指定数据库拥用DBA权限的用户的个数,当然还有一个force参数。
请注意,这里的命令要一行输入,中间不得换行,否则会出现不必要的错误。
口令文件是专门存放sys用户的口令,因为sys用户要负责建库、启动数据库、关闭数据库等特殊任务,把以sys用户的中令单独存放于口令文件中,这样数据库末打开时也能进行口令验证。

5. 启动数据库到nomount(实例)状态

shell> sqlplus sys/oracle as sysdba
startup nomount
ORA-00845: MEMORY_TARGET not supported on this system

查询资料发现:在oracle 11g中新增的内存自动管理的参数MEMORY_TARGET,它能自动调整SGA和PGA,
这个特性需要用到/dev/shm共享文件系统,而且要求/dev/shm必须大于MEMORY_TARGET,如果/dev/shm
比MEMORY_TARGET小就会报错,可以增大/dev/shm解决

shell> df -h |grep shm
tmpfs                1011M     0 1011M   0% /dev/shm

shell> vi /etc/fstab
将tmpfs /dev/shm tmpfs defaults 0 0修改为
tmpfs  /dev/shm tmpfs   defaults,size=6G  0 0
保存退出
重新mount下shm使其生效
shell> mount -o remount /dev/shm
shell> df -h |grep shm
tmpfs                 6.0G     0  6.0G   0% /dev/shm

SQL> startup nomount
ORACLE instance started.

Total System Global Area 1071333376 bytes
Fixed Size            1341312 bytes
Variable Size          620759168 bytes
Database Buffers      444596224 bytes
Redo Buffers            4636672 bytes

6. 执行建库脚本

执行建库脚本,首先要有建库的脚本。 得到一个符合自己要求的建库脚本有两种方法,一种方法是在自己的电脑上用DBCA来建,接照它的提示一步步地去做,选择“生成建库脚本”,然后就大功告成,你就可以到相应的目录上去找到那个脚本并适当地修它便可便用。另一种方法就是自己手工去写一份建库脚本,这也是这里要建议使用的方法,用记事本编辑如下的内容,并将其保存为文件名任取而后缀名为(*.sql)的SQL脚本

SQL> create database RAC1
     controlfile reuse
     maxinstances 1
     maxloghistory 100
     maxlogfiles 5
     maxlogmembers 5
     maxdatafiles 1000
     character set zhs16gbk national character set al16utf16
     logfile  group 1('/db/oracle/oradata/rac1/redo01.log') size 100m reuse,
              group 2('/db/oracle/oradata/rac1/redo02.log') size 100m reuse,
              group 3('/db/oracle/oradata/rac1/redo03.log') size 100m reuse
    datafile '/db/oracle/oradata/rac1/system.dbf' size 1024m autoextend on next 100m 
             maxsize unlimited
    sysaux datafile '/db/oracle/oradata/rac1/sysaux.dbf' size 1024m autoextend on 
             next 100m maxsize unlimited
    default tablespace users datafile '/db/oracle/oradata/rac1/user01.dbf' size 2048m
         autoextend on next 100m maxsize unlimited extent management local 
         segment space management auto
    default temporary tablespace temp tempfile '/db/oracle/oradata/rac1/temp01.dbf'
        size 100m autoextend on next 10m maxsize unlimited
    undo tablespace UNDOTBS1 datafile '/db/oracle/oradata/rac1/undotbs01.dbf' 
     size 100m autoextend on next 10m maxsize unlimited;

Database created.

在执行create database 语句的同时,自动执行$ORACLE_HOME/rdbms/admin/sql.bsq脚本,创建SYSTEM表空间
和SYSTEM回退段、建立SYS和SYSTEM账号、建立数据字典基础表、建立数据字典索引、创建预定义角色等。

7. 运行数据字典脚本

SQL> spool /home/oracle/create_rac1.log
SQL> @?/rdbms/admin/catalog.sql ;      (建数据字典视图,必须执行)
SQL> @?/rdbms/admin/catproc.sql ;      (建存储过程包,必须执行)
SQL> @?/rdbms/admin/catblock.sql ;   (建锁相关的几个视图,可选择执行)
SQL> @?/rdbms/admin/catoctk.sql ;       (建密码工具包dbms_crypto_toolkit,可选择执行)
SQL> @?/rdbms/admin/owminst.plb ;      (建工作空间管理相关对象,如dmbs_wm,可选择执行)
SQL> spool off

执行完后检查/home/oracle/create_rac1.log看看有什么不可接受的错误没有。

8. 创建sqlplus属性和帮助

在执行pupbld之前要把当前用户(sys)转换成system,即以system账户连接数据库。因为此数据库是刚建的,所以system的口令是系统默认的口令,即manager。你可以在数据库建好以后再来重新设置此账户的口令。

SQL> connect system/manager
Connected.

SQL> @?/sqlplus/admin/pupbld.sql
SQL> @?/sqlplus/admin/help/hlpbld.sql helpus.sql

9. 修改为归档模式

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> connect /as sysdba
Connected to an idle instance.
SQL> startup mount
ORACLE instance started.

Total System Global Area 1071333376 bytes
Fixed Size                  1341312 bytes
Variable Size             620759168 bytes
Database Buffers          444596224 bytes
Redo Buffers                4636672 bytes
Database mounted.

SQL> alter database archivelog;

SQL> alter database open;

修改数据库默认表空间
SQL> ALTER DATABASE DEFAULT TABLESPACE USERS;

由初始化参数文件创建spfile文件
SQL> create spfile from pfile;

10. 重新编译所有失效过程

SQL> execute utl_recomp.recomp_serial();

PL/SQL procedure successfully completed.

11. 查看数据库的状态信息测试是否安装成功

SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
RAC1             OPEN

1 row selected.

SQL> select tablespace_name,contents,status from dba_tablespaces;

TABLESPACE_NAME                CONTENTS  STATUS
------------------------------ --------- ---------
SYSTEM                         PERMANENT ONLINE
SYSAUX                         PERMANENT ONLINE
UNDOTBS1                       UNDO      ONLINE
TEMP                           TEMPORARY ONLINE
USERS                          PERMANENT ONLINE

5 rows selected.

至此,整个数据库就已经建好了。接着就可以在此数据库上建立自己的账户和表空间以及数据库对象

整理自网络

Svoid
2014-11-17

你可能感兴趣的:(Oracle)