Oracle除自带的DBCA可以创建数据库以外,还可以利用Oracle手动创建数据库,也是作为DBA人员必须要掌握的。
下面就介绍一下手动创建数据库的步骤:
下面以创建一个名为“RAC1”的数据库为例
shell> cd $ORACLE_BASE;
shell> mkdir -p oradata/rac1 #存放数据库文件
shell> mkdir -p flash_recovery_area
shell> mkdir -p admin/rac1
数据库系统启动时须要用初始化参数文件的设置分配内存、启动必要的后台进程的。
因此,初始化参数文件创建的是否正确、参数设置是否正确关系着整个建库的“命运”。
创建初始化参数文件可以通过拷贝现在的初始化参数文件并将其做适当的修改即可,从而不必要用
手工去一句一句地写出来,因为初始化参数文件的结构体系基本上都是一样的。
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
shell> export ORACLE_SID=RAC1
shell> echo $ORACLE_SID
RAC1
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用户的中令单独存放于口令文件中,这样数据库末打开时也能进行口令验证。
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
执行建库脚本,首先要有建库的脚本。 得到一个符合自己要求的建库脚本有两种方法,一种方法是在自己的电脑上用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账号、建立数据字典基础表、建立数据字典索引、创建预定义角色等。
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看看有什么不可接受的错误没有。
在执行pupbld之前要把当前用户(sys)转换成system,即以system账户连接数据库。因为此数据库是刚建的,所以system的口令是系统默认的口令,即manager。你可以在数据库建好以后再来重新设置此账户的口令。
SQL> connect system/manager
Connected.
SQL> @?/sqlplus/admin/pupbld.sql
SQL> @?/sqlplus/admin/help/hlpbld.sql helpus.sql
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;
SQL> execute utl_recomp.recomp_serial();
PL/SQL procedure successfully completed.
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