分类: Oracle
2010-04-17 20:46:04
对于RAC的数据库创建,和单实例的数据库创建,大致上是一样的步骤,不过其中有些是特定的RAC的需要注意有些不同而已。
一般来说,RAC的手工建库有如下步骤。
1. 创建admin的目录
包括其中的目录adump,bdump,cdump,dpdump,udump,pfile
[oracle@solaris admin]mkdir racdb
[oracle@solaris admin]cd racdb
[oracle@solaris racdb]adump bdump cdump dpdump pfile udump
2. 生成密码文件
[oracle@solaris racdb]orapwd file=$ORACLE_HOME/dbs/orapwracdb1 password=pwd
注意我这里的db_name是racdb,实例名师racdb1
3. 创建pfile文件,以创建数据库
这里pfile和普通的实例的pfile一样,cluster_database先设置为false,创建成功后再修改。
racdb1.__db_cache_size=88080384
racdb1.__java_pool_size=4194304
racdb1.__large_pool_size=4194304
racdb1.__shared_pool_size=83886080
racdb1.__streams_pool_size=0
*.audit_file_dest=’/u01/app/oracle/admin/racdb/adump’
*.background_dump_dest=’/u01/app/oracle/admin/racdb/bdump’
*.compatible=’10.2.0.1.0′
*.control_files=’+DG1/racdb/controlfile/current.1′
*.core_dump_dest=’/u01/app/oracle/admin/racdb/cdump’
*.db_block_size=8192
*.db_create_file_dest=’+DG1′
*.db_domain=”
*.db_file_multiblock_read_count=16
*.db_name=’racdb’
*.db_recovery_file_dest=’+DG1′
*.db_recovery_file_dest_size=2147483648
*.dispatchers=’(PROTOCOL=TCP) (SERVICE=racdbXDB)’
*.job_queue_processes=10
*.local_listener=’(ADDRESS=(PROTOCOL=tcp)(HOST=solaris)(PORT=31521))’
*.log_archive_dest_1=’LOCATION=+DG1/racdb/’
*.log_archive_format=’%t_%s_%r.dbf’
“pfile/init.ora” 36 lines, 1230 characters
*.processes=150
*.remote_login_passwordfile=’EXCLUSIVE’
#*.service_names=’racdb,crmdb,salesdb’
*.sga_target=188743680
*.undo_management=’AUTO’
racdb1.undo_tablespace=’UNDOTBS1′
*.user_dump_dest=’/u01/app/oracle/admin/racdb/udump’
*.cluster_database=false
#*.cluster_database_instances=1
#racdb1.instance_number=1
racdb1.thread=1
通过pfile创建spfile文件到指定的dg上,然后再$ORACLE_HOME/dbs/下建立init
touch /u01/app/oracle/product/10.2.0/db_1/dbs/initracdb1.ora
[oracle@solaris ~]echo “spfile=’+DG1/racdb/spfile/spfileracdb.ora’” > /u01/app/oracle/product/10.2.0/db_1/dbs/initracdb1.ora
这样就可以直接从spfile启动了。
设定环境变量ORACLE_SID
export ORACLE_SID=racdb1
4. 启动数据库到nomount状态
[oracle@solaris racdb]ORACLE_SID=racdb1
[oracle@solaris racdb]sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Apr 15 21:40:45 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL>startup nomount;
ORACLE instance started.
Total System Global Area 188743680 bytes
Fixed Size 2019448 bytes
Variable Size 92278664 bytes
Database Buffers 88080384 bytes
Redo Buffers 6365184 bytes
5. 创建数据库
CREATE DATABASE racdb
LOGFILE GROUP 1 (’+DG1/RACDB/ONLINELOG/redo01_1.log’) SIZE 50M REUSE,
GROUP 2 (’+DG1/RACDB/ONLINELOG/redo02_1.log’) SIZE 50M REUSE,
GROUP 3 (’+DG1/RACDB/ONLINELOG/redo03_1.log’) SIZE 50M REUSE
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
MAXINSTANCES 1
CHARACTER SET US7ASCII
NATIONAL CHARACTER SET AL16UTF16
DATAFILE ‘+DG1/RACDB/DATAFILE/system01′ SIZE 325M AUTOEXTEND ON NEXT 20M MAXSIZE UNLIMITED
SYSAUX DATAFILE ‘+DG1/RACDB/DATAFILE/sysaux01′ SIZE 100M AUTOEXTEND ON NEXT 20M MAXSIZE UNLIMITED
UNDO TABLESPACE undotbs1
DATAFILE ‘+DG1/RACDB/DATAFILE/undotbs01.1′
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
在执行前,先使用asmcmd把这里提到的相关目录都请到。
6. 添加temp ts
SQL> create temporary tablespace temp tempfile ‘+DG1/RACDB/TEMPFILE/tempts.1′ size 100m autoextend on next 10m maxsize 1g;
7. 设置默认表空间
SQL>alter database default temporary tablespace temp;
8. 创建Users表空间,可选。
SQL> create tablespace users tempfile ‘+DG1/RACDB/DATAFILE/user.1′ size 100m autoextend on next 10m maxsize 500m;
SQL>alter database default tablespace users;
9 创建节点2的undo
SQL>create UNDO TABLESPACE undotbs2 DATAFILE ‘+DG1/RACDB/DATAFILE/undotbs02.1′ SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
10 执行数据字典脚本sql
SQL>@?/rdbms/admin/catalog.sql (数据字典,必选)
SQL>@?/rdbms/admin/catproc.sql (系统标准存储过程,必选)
SQL>@?/rdbms/admin/catblock.sql (锁的视图)
SQL>@?/rdbms/admin/catexp.sql (exp)
SQL>@?/rdbms/admin/catexp7.sql (兼容exp7)
SQL>@?/rdbms/admin/catoctk.sql (oracle crypto toolkit)
SQL>@?/rdbms/admin/owminst.plb (描述里好像是和export有关的)
有关rac的数据字典脚本
SQL>@?/rdbms/admin/catclust.sql (有时候没有执行,也没有出现什么错误?,不过其中有register rac component的动作,还是执行吧)
SQL>@?/rdbms/admin/utlrp.sql (编译所有invalid对象)
基本上数据库实例的创建大功告成了。
现在来做些后备工作,
11. 修改cluster_database
SQL> alter system set cluster_database=true scope=spfile;
12 根据你其他的节点的情况,设置cluster_datababase_instances的数值
SQL> alter system set cluster_database_instances=2 scope=spfile;
13 为其他节点创建redo group
SQL> alter database add logfile thread 2 group 4 (’+DG1/racdb/onlinelog/redo01_2′) size 50M reuse;
Database altered.
SQL> alter database add logfile thread 2 group 5 (’+DG1/racdb/onlinelog/redo02_2′) size 50M reuse;
Database altered.
SQL> alter database add logfile thread 2 group 6 (’+DG1/racdb/onlinelog/redo03_2′) size 50M reuse;
注意这里是给节点2添加的loggroup, 其中的thread 2就是对应的节点2
14 给节点2制定undots 上面以及创建了节点2的undots,这里指定就可以了
SQL>alert system set undo_tablespace=undotbs2 sid=’racdb2′;
15 给节点2指定redo log的thread,这样就可以对应上面的loggroup了。
SQL>alter system set thread=2 sid=’racdb2′ ;
关闭数据库。
shutdown immediate
再次启动数据库
startup.
16 节点2建立admin目录,创建密码文件,pfile文件pfile文件一样只有spfile=’+DG1/racdb/spfile/spfileracdb.ora’
启动节点2的实例
17 注册database
在一个节点上执行
srvctl add database -d racdb -o $ORACLE_HOME
18 注册实例
srvctl add instance -d racdb -i racdb1 -n node1
srvctl add instance -d racdb -i racdb2 -n node2
19 crs_stat -t可以看到注册进行的database和instance了