最简单的方法就是使用dbca来生产建库的脚本,然后手工执行这些脚本。具体过程如下
1,手工创建相关目录和环境变量
#!/bin/sh
OLD_UMASK=`umask`
umask 0027
mkdir -p $ORACLE_BASE/admin/hrdb/adump
mkdir -p $ORACLE_BASE/admin/hrdb/dpdump
mkdir -p $ORACLE_BASE/admin/hrdb/hdump
mkdir -p $ORACLE_BASE/admin/hrdb/pfile
mkdir -p $ORACLE_BASE/cfgtoollogs/dbca/hrdb
umask ${OLD_UMASK}
ORACLE_SID=hrdb1; export ORACLE_SID
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
PATH=$ORACLE_HOME/bin:$PATH; export PATH
是否使用数据库自动启动,这里设置为false
echo You should Add this entry in the /etc/oratab:
hrdb: /u01/app/oracle/product/11.2.0/dbhome_1:N
2,创建参数文件、密码文件
密码文件
$ORACLE_HOME/bin/orapwd file=$ORACLE_HOME/dbs/orapwhrdb1 force=y
参数文件$ORACLE_HOME/dbs/inithrdb1.ora
*.db_name='orcl'
*.cluster_database=FALSE
*.db_create_file_dest='+DATA'
*.db_recovery_file_dest='+FRA'
*.db_recovery_file_dest_size=1024M
*.memory_max_target=200M
*.remote_listener='cluster01-scan:1521'
orcl1.instance_number=1
orcl2.instance_number=2
orcl1.thread=1
orcl2.thread=2
orcl2.undo_tablespace='UNDOTBS2'
orcl1.undo_tablespace='UNDOTBS1'
*.control_files='+DATA/orcl/controlfile/current.275.850740049','+FRA/orcl/controlfile/current'
启动到nomount状态
sqlplus "/as sysdba"
startup nomount pfile="$ORACLE_HOME/dbs/inithrdb1.ora";
3,开始建库
CREATE DATABASE "hrdb" (可以不带参数,然后手工创建UNDO和TEMP Tablespace)
MAXINSTANCES 32
MAXLOGHISTORY 1
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 1024
DATAFILE SIZE 700M AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE SIZE 600M AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE SIZE 20M AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
SMALLFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE SIZE 1024M AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
CHARACTER SET ZHS16GBK
NATIONAL CHARACTER SET AL16UTF16
LOGFILE GROUP 1 SIZE 512M,
GROUP 2 SIZE 512M,
USER SYS IDENTIFIED BY oracle USER SYSTEM IDENTIFIED BY manager;
4,参数文件中添加控制文件选项
hrdb1>column ctl_files NEW_VALUE ctl_files;
hrdb1>select concat('control_files=''', concat(replace(value, ', ', ''','''), '''')) ctl_files from v$parameter where name ='control_files';
CTL_FILES
----------------------------------------------------------------------------------------------
control_files='+DATA/hrdb/controlfile/current.388.791301537','+FRA/hrdb/controlfile/current.361.791301537'
host echo &ctl_files >> $ORACLE_HOME/dbs/inithrdb1.ora;
5,创建数据字典
connect / as sysdba;
spool /tmp/CreateDBCatalog.log append
@?/rdbms/admin/catalog.sql;
@?/rdbms/admin/catblock.sql;
@?/rdbms/admin/catproc.sql;
@?/rdbms/admin/catoctk.sql;
@?/rdbms/admin/owminst.plb;
spool off
connect "SYSTEM"/"oracle"
spool /tmp/system.log append
@?/sqlplus/admin/pupbld.sql;
@?/sqlplus/admin/help/hlpbld.sql helpus.sql;
spool off
6,创建spfile,存放于asm磁盘
create spfile='+DATA/hrdb/spfilehrdb.ora' FROM pfile='$ORACLE_HOME/dbs/inithrdb1.ora';
cp $ORACLE_HOME/dbs/inithrdb1.ora $ORACLE_HOME/dbs/inithrdb1.ora.bak
echo "SPFILE='+DATA/hrdb/spfilehrdb.ora'" > $ORACLE_HOME/dbs/inithrdb1.ora
7,psu升级,重新编译
spool /tmp/postDBCreation.log append
@?/rdbms/admin/catbundle.sql psu apply;
select 'utl_recomp_begin: ' || to_char(sysdate, 'HH:MI:SS') from dual;
execute utl_recomp.recomp_serial();
select 'utl_recomp_end: ' || to_char(sysdate, 'HH:MI:SS') from dual;
8,重新启动,从spfile文件启动,修改为归档模式
shutdown immediate;
connect / as SYSDBA
startup mount;
alter database archivelog;
alter database open;
单实例的数据库已经正常启动了,如果是rac数据库,还需要以下过程
9、添加log file和undo
--添加log thread 2
ALTER DATABASE ADD LOGFILE THREAD 2
GROUP 3 SIZE 512M,
GROUP 4 SIZE 512M;
ALTER DATABASE ENABLE PUBLIC THREAD 2;
-- undo tablespace
CREATE SMALLFILE UNDO TABLESPACE "UNDOTBS2" DATAFILE SIZE 1024M AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED;
10,CreateClustDBViews
spool $ORACLE_BASE/admin/epmdb/scripts/CreateClustDBViews.log append
@?/rdbms/admin/catclust.sql;
spool off
11,修改rac相关的参数
alter system set cluster_database=true scope=spfile;
alter system set remote_listener="dtydb-scan2:1521" scope=spfile;
alter system set instance_number=2 scope=spfile sid='hrdb2';
alter system set thread=2 scope=spfile sid='hrdb2';
alter system set undo_tablespace=UNDOTBS2 scope=spfile sid='hrdb2';
也可通过修改pfile文件完成
epmdb1.instance_number=1
epmdb2.instance_number=2
epmdb1.thread=1
epmdb2.thread=2
epmdb1.undo_tablespace=UNDOTBS1
epmdb2.undo_tablespace=UNDOTBS2
create spfile='+DATA/hrdb/spfilehrdb.ora' FROM pfile ='/tmp/init.ora';
12,删除默认的spfile,让数据库从pfile启动,实际从asm上的spfile上启动
shutdown immediate;
mv spfilehrdb1.ora spfilehrdb1.ora.bak
db2上
vi inithrdb2.ora
SPFILE='+DATA/hrdb/spfilehrdb.ora'
13,注册到crs中
/oracle/11.2.0/grid/bin/setasmgidwrap o=$ORACLE_HOME/bin/oracle
$ORACLE_HOME/bin/srvctl add database -d hrdb -o $ORACLE_HOME -p +DATA/hrdb/spfilehrdb.ora -n hrdb -a DATA,FRA
$ORACLE_HOME/bin/srvctl add instance -d hrdb -i hrdb1 -n dtydb3
$ORACLE_HOME/bin/srvctl add instance -d hrdb -i hrdb2 -n dtydb4
$ORACLE_HOME/bin/srvctl enable database -d hrdb;
$ORACLE_HOME/bin/srvctl start database -d hrdb;
Drop database: 10g版本以上,数据库要处于mount状态,RESTRICTED 模式下
SQL> startup mount exclusive restrict;
SQL> drop database;
说明:
1,10g以上才能有drop database命令
2,The DROP DATABASE command deletes these files from operating system.
* Datafiles
* Online Redo Log Files
* Controlfiles
* SPFILE (if it exists)
The DROP DATABASE command does not delete the following files:
* init.ora (text version of the Oracle initialization file)
* password file
* entries in listener files
* entries in oratab file
3,win NT环境下文件不会自动删除