创建数据库
可以运行dbca用图形界面来创建,也可以用命令行来创建.
因为以前没有创建过集群下的数据库,因此我用图形界面来创建脚本,修改后用命令行来创建.
先确认ORACM和GSD已经启动:
$ ps -ef | grep oracm
root 3056 1 0 10:50 pts/1 00:00:00 oracm
root 3057 3056 0 10:50 pts/1 00:00:00 oracm
root 3059 3057 0 10:50 pts/1 00:00:00 oracm
root 3060 3057 0 10:50 pts/1 00:00:00 oracm
root 3061 3057 0 10:50 pts/1 00:00:00 oracm
root 3062 3057 0 10:50 pts/1 00:00:00 oracm
root 3063 3057 0 10:50 pts/1 00:00:00 oracm
root 3064 3057 0 10:50 pts/1 00:00:00 oracm
root 3065 3057 0 10:50 pts/1 00:00:00 oracm
root 3338 3057 0 11:36 pts/1 00:00:00 oracm
root 3362 3057 0 11:36 pts/1 00:00:00 oracm
oracle 3482 2932 0 11:38 pts/1 00:00:00 grep oracm
$ gsdctl stat
GSD is running on the local node
然后运行dbca启动数据库配置助手.
在欢迎画面中,选择Oracle cluster database, 然后一路继续就可以了.
在最后的总结画面上,可以选择创建数据库,也可以选择创建脚本.我选择了创建脚本.
手工修改脚本为自己想要的样子,然后跟非集群环境一样手工创建数据库.数据文件使用本地管理,不用数据字典管理.并创建缺省的撤消表空间(undo tablespace)和临时表空间.
注意:
根据我的经验,SGA太小,在创建数据字典的时候会失败,因此SGA可以大一些.但因为是集群,需要启动多个instance,所以在数据字典创建完以后,即catalog.sql,catproc.sql,catclust.sql运行完以后,需要将SGA改小一点.
修改init.ora文件,并拷贝到$ORACLE_HOME/dbs下,改名字为initrac.ora.
我是一个instance对应一个listener.也可以一个listener响应多个instnce.
其余参数可以自己根据自己的情况进行设置,以下是cluster的参数:
undo_management=AUTO
undo_retention=10800
cluster_database=true
cluster_database_instances=5
rac1.instance_name=rac1
rac1.instance_number=1
rac1.local_listener=lsnr1
rac1.thread=1
rac1.undo_tablespace=UNDOTBS1
rac2.instance_name=rac2
rac2.instance_number=2
rac2.local_listener=lsnr2
rac2.thread=2
rac2.undo_tablespace=UNDOTBS2
rac3.instance_name=rac3
rac3.instance_number=3
rac3.local_listener=lsnr3
rac3.thread=3
rac3.undo_tablespace=UNDOTBS3
如果要多个instance都由一个listener来响应,则改以下两行:
rac2.local_listener=lsnr1
rac3.local_listener=lsnr1
注意:
尽管数据库名字叫rac,但启动的实例名字不能叫rac.我将ORACLE_SID分别设置成了rac1,rac2,rac3.
然后启动第一个实例,创建数据库:
$ export ORACLE_SID=rac1
$ sqlplus /nolog
SQL*Plus: Release 9.2.0.4.0???j? - Production on Fri Nov 21 13:43:22 2003
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn / as sysdba;
Connected to an idle instance.
SQL> startup pfile=/u01/app/oracle/product/9.2.0.4.0/dbs/initrac.ora;
ORACLE instance started.
Total System Global Area 38867968 bytes
Fixed Size 451584 bytes
Variable Size 33554432 bytes
Database Buffers 4194304 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL>
创建数据库的命令:
CREATE DATABASE rac
MAXINSTANCES 32
MAXLOGHISTORY 100
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 1024
DATAFILE '/u02/oradata/rac/rac/system01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE 1000M
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/u02/oradata/rac/rac/temp01.dbf' SIZE 40M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE 1000M
UNDO TABLESPACE "UNDOTBS1" DATAFILE '/u02/oradata/rac/rac/undotbs01.dbf' SIZE 50M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE 1000M
CHARACTER SET ZHS16GBK
LOGFILE GROUP 1 ('/u02/oradata/rac/rac/redo01.log') SIZE 10M REUSE,
GROUP 2 ('/u02/oradata/rac/rac/redo02.log') SIZE 10M REUSE,
GROUP 3 ('/u02/oradata/rac/rac/redo03.log') SIZE 10M REUSE;
然后创建数据字典.
以sysdba身份运行:
SQL> @?/rdbms/admin/catalog.sql;
SQL> @?/rdbms/admin/catproc.sql;
SQL> @?/rdbms/admin/catclust.sql;
以system身份运行:
SQL> @?/sqlplus/admin/pupbld.sql;