使用CREATEDATABASE SQL语句来创建数据库是更手工化的方式。优势之一是相比DBCA建库,你可以仅用脚本来创建数据库。
如果你使用CREATE DATABASE语句,在你拥有一个可用的数据库之前你必须完成一些附加的任务。这些任务包括在数据字典表上建立视图和安装标准PL/SQL包。你可以通过运行提供的脚本来完成这些任务。
如果你有现成的脚本,考虑进行适当编辑以充分利用新的数据库特性。
本节的内容仅适合单实例数据库的安装。
根据下面的步骤来用CREATEDATABASE完成数据库的创建,示例数据库名为mynewdb。
Step 1: Specify an Instance Identifier (SID)
Step 2: Ensure That the Required Environment Variables Are Set
Step 3: Choose a Database Administrator Authentication Method
Step 4: Create the Initialization Parameter File
Step 5: (Windows Only) Create an Instance
Step 6: Connect to the Instance
Step 7: Create a Server Parameter File
Step 9: Issue the CREATE DATABASE Statement
Step 10: Create Additional Tablespaces
Step 11: Run Scripts to Build Data Dictionary Views
Step 12: (Optional) Run Scripts to Install Additional Options
Step 13: Back Up the Database.
Step 14: (Optional) Enable Automatic Instance Startup
Step 1: 指定实例ID (SID)
为实例选择一个唯一的Oracle系统标识(SID),打开一个命令行窗口,设置ORACLE_SID环境变量。使用这个命令行窗口完成后续的步骤。
ORACLE_SID用来将本实例跟其它你将来可能在同一主机创建并运行的的Oracle数据库实例区分开。关于ORACLE_SID的有效字符限制与平台相关。在某些平台,SID还是大小写敏感的。
Unix和Linux设置SID的方式:
-
Bourne, Bash, or Korn shell:
ORACLE_SID=mynewdbexport ORACLE_SID
-
C shell:
setenv ORACLE_SID mynewdb
Windows设置SID:
set ORACLE_SID=mynewdb
Step 2: Ensure That the Required Environment Variables Are Set
根据你的平台,在你启动SQL*Plus之前,你需要设定一些环境变量,或者至少验证这些环境变量是否设置合适。
例如,在多数平台上,ORACLE_SID和ORACLE_HOME必须设置。此外,建议将PATH路径设置为包含ORACLE_HOME/bin目录。在Unix和Linux平台上,你必须手动设置这些环境变量。在Windows平台,OUI会自动在Windows注册表中为ORACLE_HOME和ORACLE_SID赋值。如果你在安装软件的时候不创建数据库,OUI不会在注册表中设置ORACLE_SID,因此你必须在之后你创建数据库的时候设置ORACLE_SID环境变量。
Step 3: Choose a Database Administrator Authentication Method
要创建一个数据库,你必须被赋予合适的操作系统权限。通过以下方式你可以被授权为有相关权限的管理员:
-
拥有一个密码文件
-
拥有操作系统授权
Step 4: Create the Initialization Parameter File
当数据库实例启动时,它读取初始化参数文件。这个文件可以是文本文件,可以用文本编辑器来创建和修改;也可以是二进制文件,由数据库创建和动态修改。建议优先使用二进制文件,又被称为服务器参数文件。在这个步骤中,先创建一个文本初始化参数文件。在后续的步骤中,可以从文本参数文件中创建服务器参数文件。
创建文本初始化参数文件的一个方法是编辑"Sample Initialization Parameter File"中的示例。如果你手动创建一个初始化参数文件,确保它至少包含Table 2-2所示的参数。所有未列出的参数保持为其默认值。
Table 2-2 Recommended Minimum Initialization Parameters
| Parameter Name | Mandatory | Notes |
|---|---|---|
|
DB_NAME |
Yes |
数据库标识。必须与CREATEDATABASE语句中设定值一致。最大8个字符 |
|
CONTROL_FILES |
No |
强烈建议设置。如不设置,数据库实例会在初始化参数文件所在路径下创建一个控制文件。这个参数可以使用多个控制文件副本。 |
|
MEMORY_TARGET |
No |
设置实例使用的内存总量,同时启用自动内存管理。你也可以选择其它初始化参数以实现更多的手动控制内存的使用。 |
方便起见,将初始化参数文件存储在数据库默认的位置,使用默认的文件名。然后当你启动数据库时不需要用带pfile子句的startup命令,因为Oracle数据库会自动查找初始化参数文件的默认位置。
Step 5: (Windows Only) Create an Instance
On the Windows platform, before you can connect to an instance, you must manually create it if it does not already exist. The ORADIM command creates an Oracle instance by creating a new Windows service.
在Windows平台,在你连接一个实例之前,如果实例不存在,你必须手动创建它。ORADIM通过创建一个新的Windows服务来创建一个Oracle实例。
-
在Windows命令行输入下列命令:
oradim -NEW -SID sid -STARTMODE MANUAL -PFILE pfile
其中,sid是要设置的SID(例如mynewdb),pfile是文本初始化参数文件的完整路径。这条命令创建实例但不启动实例。
Step 6: Connect to the Instance
启动SQL*Plus,以sysdba系统权限连接数据库实例。
-
以密码文件的验证方式验证,输入下列命令,然后根据提示输入sys密码:
$ sqlplus /nologSQL> CONNECT SYS AS SYSDBA
-
以操作系统方式验证,输入下列命令:
$ sqlplus /nologSQL> CONNECT / AS SYSDBA
SQL*Plus会输出如下信息:
Connected to an idle instance.
注意:
SQL*Plus 可能会输出下列类似信息:Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining options
如果是这样,说明实例已经启动了。你可能连接到了错误的实例。用exit命令退出SQL*Plus,确认ORACLE_SID设置正确,然后重复这个步骤。
Step 7: Create a Server Parameter File
服务器参数文件可以通过ALTERSYSTEM 修改初始化参数,并通过重启数据库将参数修改永久保留。你可以从你编辑的文本初始化文件来创建服务器参数文件。
下面的SQL*Plus命令读取默认路径下的文本初始化参数文件(pfile),从文本初始化参数文件创建一个服务器参数文件(spfile),并默认的名字命名spfile并将其放在默认路径下。
CREATE SPFILE FROM PFILE;
如果你不使用默认的名称和路径,你也可以为pfile和spfile指定对应的文件名和路径。
Tip:
Note:
Important—如果你正在使用Oracle Managed Files并且你的初始化参数文件不包括参数CONTROL_FILES,那么你必须现在就创建一个服务器参数文件,这样数据库才能将CREATEDATABASE语句创建的名称和路径保存在控制文件中。
Step 8: Start the Instance
启动实例,但不加载数据库。一般来说,只有在创建数据库或者进行数据库维护的时候才会这么做。使用带mount子句的startup命令。在这个例子中,因为初始化参数文件或服务器参数文件存储在默认的路径,所以不要求指定pfile子句:
STARTUP NOMOUNT
在这个时候,实例内存已经分配,进程也已启动。但数据库自身还不存在。
Step 9: Issue the CREATE DATABASE Statement
要创建新的数据库,使用CREATEDATABASE语句。
Example 1
下列语句创建名为mynewdb的数据库。数据库名必须与初始化参数文件中的参数DB_NAME保持一致。本示例假设如下:
-
初始化参数文件以CONTROL_FILES指定控制文件的数目和位置。
-
目录/u01/app/oracle/oradata/mynewdb建好
-
目录/u01/logs/my and /u02/logs/my建好
CREATE DATABASE mynewdb
USER SYS IDENTIFIED BY sys_password
USER SYSTEM IDENTIFIED BY system_password
LOGFILE GROUP 1 ('/u01/logs/my/redo01a.log','/u02/logs/my/redo01b.log') SIZE 100M BLOCKSIZE 512,
GROUP 2 ('/u01/logs/my/redo02a.log','/u02/logs/my/redo02b.log') SIZE 100M BLOCKSIZE 512,
GROUP 3 ('/u01/logs/my/redo03a.log','/u02/logs/my/redo03b.log') SIZE 100M BLOCKSIZE 512
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/oradata/mynewdb/system01.dbf' SIZE 325M REUSE
SYSAUX DATAFILE '/u01/app/oracle/oradata/mynewdb/sysaux01.dbf' SIZE 325M REUSE
DEFAULT TABLESPACE users
DATAFILE '/u01/app/oracle/oradata/mynewdb/users01.dbf'
SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/app/oracle/oradata/mynewdb/temp01.dbf'
SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE '/u01/app/oracle/oradata/mynewdb/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
该数据库具有以下特征:
-
数据库名为mynewdb。它的全局数据库名是mynewdb.us.example.com,域名部分(us.example.com) 来自初始化参数文件。
-
CONTROL_FILES参数指定了3个控制文件,在数据库创建之前就已经在初始化参数文件中指定。
-
用户sys和system的密码设定为你指定的值。从11g开始,密码区分大小写。为用户sys和system指定密码的两个语句在11g版本中不是强制的。然而,如果你指定了这两个语句中任意一个,你必须指定另外一个(要么都不指定,要么都指定)。
-
新建的数据库有三个重做日志文件组,每组两个成员,如LOGFILE语句所示。MAXLOGFILES, MAXLOGMEMBERS, and MAXLOGHISTORY参数是对重做日志的一些限定。重做日志的块大小设置为512字节,与磁盘上的物理扇区大小一致。如果块大小与物理扇区大小一致(默认的),那么BLOCKSIZE语句是可选的。典型扇区的典型块大小是512字节。允许的BLOCKSIZE值有512,1024和4096.对于新近的4K的扇区尺寸的磁盘,可选的BLOCKSIZE是4096.
-
MAXDATAFILES指定数据库能够打开的数据文件最大数目。这个参数影响控制文件的初始化大小。
Note:
- 该数据库使用AL32UTF8字符集存储数据。
-
AL16UTF16字符集被设置为国家字符集,用来存储NCHAR, NCLOB, or NVARCHAR2数据类型的列。
-
SYSTEM表空间,由系统文件/u01/app/oracle/oradata/mynewdb/system01.dbf组成,在 DATAFILE 语句中创建。如果有同名文件已经存在,那么将被覆盖。
-
SYSTEM表空间是本地管理表空间。
-
创建了SYSAUX表空间,由/u01/app/oracle/oradata/mynewdb/sysaux01.dbf组成,在SYSAUX DATAFILE语句中创建。
-
DEFAULTTABLESPACE语句为数据库创建并命名一个默认永久表空间。
-
DEFAULT TEMPORARY TABLESPACE语句为数据库创建并命名一个默认临时表空间。
-
如果你在初始化参数文件中指定了UNDO_MANAGEMENT=AUTO,UNDO TABLESPACE语句会为数据库创建并命名一个undo表空间,用来存储undo数据。
-
重做日志文件一开始不会被归档,因为ARCHIVELOG语句没有在CREATEDATABASE语句中指定。在数据库创建中这是通常的做法。之后你可以使用ALTER DATABASE语句来切换到ARCHIVELOG模式。mynewdb的初始化参数文件与归档相关的初始化参数是LOG_ARCHIVE_DEST_1和LOG_ARCHIVE_FORMAT。
Tips:
-
确保在CREATEDATABASE语句中涉及到的所有路径均存在。CREATEDATABASE语句不会创建目录。
-
如果你没有使用Oracle Managed Files,那么每个表空间语句必须包含一个DATAFILE或TEMPFILE语句。
-
如果数据库创建失败,那么你可以查看告警日志来判断失败的原因并做出合适的修改。如果你收到一个包含进程号的错误信息,那么去检查进程对应的trace文件。在trace文件名中查找包含进程号的trace文件。
-
要在失败后重新执行CREATEDATABASE语句,你必须首先关闭实例并删除先前CREATEDATABASE语句创建的任何文件。
Example 2
这个示例展示的创建一个 Oracle Managed Files的数据库,比CREATEDATABASE语句要简单得多。要使用Oracle Managed Files,初始化参数DB_CREATE_FILE_DEST必须设置。这个参数为数据库自动创建并命名的众多数据文件定义了基目录。下例展示了在初始化参数文件对这个参数的设置:
DB_CREATE_FILE_DEST='/u01/app/oracle/oradata'
通过Oracle Managed Files和下列CREATEDATABASE语句,数据库创建system和sysaux表空间,并创建在语句中指定的表空间,并为所有的数据文件、控制文件和重做日志文件选择默认的尺寸和属性。注意,用这个方式设置的这些属性和其它的默认表空间属性可能并不适合你的生产环境,所以建议检查默认的配置并做出必要的修改。
CREATE DATABASE mynewdb
USER SYS IDENTIFIED BY sys_password
USER SYSTEM IDENTIFIED BY system_password
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE temp
UNDO TABLESPACE undotbs1
DEFAULT TABLESPACE users;
Tip:
Step 10: Create Additional Tablespaces
要让数据库可用,你必须为你的应用数据创建表空间。下面的实例脚本创建了一些表空间:
CREATE TABLESPACE apps_tbs LOGGING
DATAFILE '/u01/app/oracle/oradata/mynewdb/apps01.dbf'
SIZE 500M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
-- create a tablespace for indexes, separate from user tablespace (optional)
CREATE TABLESPACE indx_tbs LOGGING
DATAFILE '/u01/app/oracle/oradata/mynewdb/indx01.dbf'
SIZE 100M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
Step 11: Run Scripts to Build Data Dictionary Views
运行必要的脚本来创建数据字典视图,同义词,PL/SQL包以及支持SQL*Plus正常工作。
在SQL*Plus中,以sysdba连接数据库实例:
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
在SQL*Plus中,以system用户连接数据库实例:
@?/sqlplus/admin/pupbld.sql
“@”是运行一个SQL*Plus脚本的速记形式。"?"是一个SQL*Plus变量,代表这Oracle home目录。下表包含对这些脚本的描述:
| Script | Description |
|---|---|
| CATALOG.SQL |
创建数据字典表的视图,动态性能视图,以及大量视图的公共同义词。赋予PUBLIC对这些同义词的访问权限。 |
| CATPROC.SQL | 運行PL / SQL所需的或與PL / SQL一起使用的所有腳本。 |
| PUPBLD.SQL | SQL*Plus所需. 啟用SQL * Plus以禁用用戶的命令。 |
Step 14: (Optional) Enable Automatic Instance Startup
你或许会想配置在主机重启的时候Oracle实例自动启动。查看你的操作系统文档来寻找方法。在Windows上,使用下列命令来配置数据库服务可以在主机重启时启动数据库实例:
ORADIM -EDIT -SID sid -STARTMODE AUTO -SRVCSTART SYSTEM [-SPFILE]
你必须使用-SPFILE参数,如果你想让实例在主机自动重启的时候读取spfile的话。