分类: Oracle
2007-08-20 15:42:09
四 创建数据库
在设置环境并配置 initsid.ora 后,就可以创建数据库了。Oracle 数据库是通过执行 CREATE DATABASE 命令创建的。CREATE DATABASE 命令指定了日志文件的数量和位置、SYSTEM 表空间、UNDO 表空间和 TEMP 表空间的位置和大小,以及数据库使用的字符集(这并不是一个详尽的列表)。
可使用 Oracle 实用程序 SQL*Plus 创建数据库。UNIX 的 SQL*Plus 可执行程序是 sqlplus。
在创建数据库时,Oracle9i 服务器仅识别 SYS 用户和 SYSDBA 角色。要创建数据库,必须以用户 SYS 和角色 SYSDBA 的身份连接到 SQL*Plus。可以使用以下两种方法之一完成该操作。
1.如果连接 SQL*Plus 的 UNIX 用户是管理员组的成员(在 Oracle9i Server 安装期间定义),则使用以下语法:
$ sqlplus '/ as sysdba '
或者
$ sqlplus /nolog
SQL> connect / as sysdba
2. 如果连接 SQL*Plus 的 UNIX 用户不是管理员组的成员,则管理员必须创建数据库的口令文件,并且必须使用在口令文件中给 SYS 分配的口令。以下语法假定在口令文件中给 SYS 分配的口令是 oracle。
$ sqlplus 'sys/change_on_install as sysdba'
或者
$ sqlplus /nolog
SQL> connect sys/change_on_install as sysbda
创建和执行 SQL 语句的步骤是:
1.创建一个包含 CREATE DATABASE 命令的 SQL 脚本。(附录 A 的结尾附有一个创建数据库的示例脚本。)
2.使用上面所示的两种方法之一,以 SYS AS SYSDBA 的身份连接到 SQL*Plus。
3.在 NOMOUNT 模式下启动数据库。
4.执行 SQL 脚本。
示例
% sqlplus 'sys/change_on_install as sysdba'
SQL> startup nomount
ORACLE instance started.
Total System Global Area 21790532 bytes
Fixed Size 278340 bytes
Variable Size 16777216 bytes
Database Buffers 4194304 bytes
Redo Buffers 540672 bytes
SQL> @crdbtestdb.sql
SQL> CREATE DATABASE testdb
2 LOGFILE
3 GROUP 1 ('$HOME/ORADATA/testdb/redolog_testdb_01.rdo') SIZE
4 GROUP 2 ('$HOME/ORADATA/testdb/redolog_testdb_02.rdo') SIZE
5 DATAFILE '$HOME/ORADATA/testdb/system_01_testdb.dbf' SIZE
6 AUTOEXTEND ON NEXT
7 DEFAULT TEMPORARY TABLESPACE temp
8 TEMPFILE '$HOME/ORADATA/testdb/temp_testdb_01.dbf' SIZE
9 AUTOEXTEND ON NEXT
10 CHARACTER SET WE8ISO8859P1
11 NATIONAL CHARACTER SET AL16UTF16
12 ;
Statement processed.
五 运行脚本
必须在创建数据库之后运行脚本 catalog.sql 和 catproc.sql,这两个脚本位于 $ORACLE_HOME/rdbms/admin 目录中。catalog.sql 脚本用于创建数据字典视图;catproc.sql 用于创建使用 PL/SQL 所需的程序包和过程。
必须以 SYS 的身份运行这两个脚本。在创建脚本之前,确保数据库已打开。
示例
% sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> @$ORACLE_HOME/rdbms/admin/catalog.sql
SQL> @$ORACLE_HOME/rdbms/admin/catproc.sql
在系统不忙的时候,运行这两个脚本总共需要 35 到 65 分钟。
在运行这些脚本后,验证对象是否有效。以下查询可返回所有无效的对象。
SQL> SELECT owner,object_name,object_type
2 FROM dba_objects
3 WHERE status = 'INVALID'
4 ORDER BY owner,object_type,object_name;
运行 pupbld.sql
pupbld.sql 脚本用于创建 “产品用户配置文件” (Product User Profile) 表以及相关的过程,该脚本位于 $ORACLE_HOME/sqlplus/admin 目录中。运行此脚本还可在每次用户连接到 SQL*Plus 时防止生成警告消息。必须以用户 SYSTEM 的身份运行此脚本。
$ sqlplus system/manager
SQL> @$ORACLE_HOME/sqlplus/admin/pupbld.sql
创建表空间
创建安装所需的其它表空间。
在数据库的安装过程中,通常创建以下表空间:
• users 用户数据
• tools 用户 SYSTEM 创建的对象(可选)
应该创建这两个表空间。
示例
SQL> create tablespace USERS
2 datafile '$HOME/ORADATA/testdb/users_testdb_01.dbf' SIZE
3 PERMANENT
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K
5 SEGMENT SPACE MANAGEMENT auto;
六 小结
• 设置 ORACLE_HOME、 ORACLE_SID、PATH 和 LD_LIBRARY_PATH。
• 编辑 initsid.ora。
• 执行 CREATE DATABASE 命令。
• 运行 catalog.sql 和 catproc.sql 脚本。
• 运行 pupbld.sql 脚本。
• 创建数据库所需的表空间。
•
示例 inittestdb.ora
background_dump_dest=$HOME/ADMIN/BDUMP
compatible=
control_files=$HOME/ORADATA/testdb/ctrl_01_sid.ctl
core_dump_dest=$HOME/ADMIN/CDUMP
db_block_size=4096
db_cache_size=
db_domain=world
db_name=testdb
global_names=TRUE
instance_name=testdb
max_dump_file_size=10240
remote_login_passwordfile=exclusive
service_names=testdb
shared_pool_size=
undo_management=AUTO
user_dump_dest=$HOME/ADMIN/UDUMP
创建数据库的示例脚本
CREATE DATABASE testdb
LOGFILE
GROUP 1 ('$HOME/ORADATA/testdb/redolog_testdb_01.rdo') SIZE
GROUP 2 ('$HOME/ORADATA/testdb/redolog_testdb_01.rdo') SIZE
DATAFILE '$HOME/ORADATA/testdb/system_testdb_01.dbf' SIZE
AUTOEXTEND ON NEXT
DEFAULT TEMPORARY TABLESPACE temp
TEMPFILE '$HOME/ORADATA/testdb/temp_testdb_01.dbf' SIZE
AUTOEXTEND ON NEXT
CHARACTER SET ZHS16CGB231280
NATIONAL CHARACTER SET AL16UTF16