使用create database语句创建数据库的详细操作步骤

使用create database语句创建数据库的步骤如下:
1.指定一个实例标识符SID
2.确保设置了必要的环境变量
3.选择一个数据库管理员验证方法
4.创建一个初始化参数文件
5.(只用于windows平台)创建一个实例
6.连接实例
7.创建一个服务器参数文件
8.启动实例
9.执行create database
10.创建额外的表空间
11.运行脚本来创建数据字典视图
12.(可选项)运行脚本来安装可选项
13.备份数据库
14.(可选项)启用自动实例启动

步骤1:指定一个实例标识符(SID)
对于你的实例定义一个唯一的oracle系统标识符(SID),打开一个命令窗口并设置ORACLE_SID环境变量.ORACLE_SID用来与相同主机上其它的实例进行区分.ORACLE_SID在特定平台上有些字符是被限制使用的.在有些平台上,SID是区分大小写的.注意:最常见的做法是将SID设置为与数据库名称相同.数据库的最大字符个数是8

在UNIX和Linux操作系统中设置SID的语法如下:
如果是Bourne, Bash, or Korn shell
ORACLE_SID=mynewdb
export ORACLE_SID

如果是C shell
setenv ORACLE_SID mynewdb

在windows操作系统中设置SID的语法如下:
set ORACLE_SID=mynewdb

步骤2:确保设置了必要的环境变量
依赖于你的操作系统,在你启动SQL*Plus之前,必须要设置环境变量或者至少要验证设置的正确性

例如,在大多数平台中,ORACLE_SID和ORACLE_HOME必须要设置.另外建议设置PATH变量包含ORACLE_HOME/bin目录.
在UNIX和Linux平台上必须手工设置这些环境变量.在windows平台中,OUI自动在windows注册表中指定ORACLE_HOME
和ORACLE_SID的值.如果在安装时不创建数据库,OUI不会在注册表中设置ORACLE_SID,当在以后创建数据库时要设置
ORACLE_SID环境变量.

步骤3:选择一个数据库管理员验证方法
为了能创建一个数据库你必须被验证且被授予合适的系统权限.作为一个管理员可以用以下几种方式来验证
.使用密码文件来验证
.使用操作来验证
在这一步你要决定一个验证方法

为了使用密码文件来进行验证需要创建一个密码文件.为了使用操作系统来进行验证你要确保你登录主机的用户是一个
合适的操作系统用户组的成员.在UNIX和Linux平台中通常是dba用户组,在windows平台上安装软件的用户会自动的添加到所要求的用户组中.

步骤4:创建初始化参数文件
当oracle实例启动时会读取一个初始化参数文件.这个文件可以是文本文件它可以使用文本编辑器来编辑,也可以是二进制文件它是由数据库创建和动态修改的.二进制文件也叫服务器参数文件.在这一步你可以创建一个文本参数文件.在最后一步通过文本文件创建服务器参数文件.

如果手工创建初始化参数文件,确保它包含下面列表中的参数,所有其它没有列出的参数都有缺省值

---------------------------------------------------------------------------------------------
参数值                        强制             注意
---------------------------------------------------------------------------------------------
DB_NAME                       Yes              数据库标识符.它的值必须与create database
                                               语句中的值相对应.最大长度为8个字符

CONTROL_FILES                 No               强烈建议设置这个参数.如果没有提供,那么数据库
                                               实例将在初始化参数文件相同的目录创建一个控制
                                               文件.提供这个参数可以多路复用控制文件

MEMORY_TARGET                 No               启用自动内存管理设置实例使用的内存总量.可以选
                                               择其它的初始化参数来手工控制内存的使用
---------------------------------------------------------------------------------------------

为了方便起见,在oracle数据库的缺省值位置存储初始化参数文件且使用缺省的文件名.在启动数据库时,它将不需要
在执行startup命令时指定pfile子句.因为oracle数据库会自动在缺省位置查找初始化参数文件.

步骤5:(只适用于windows)创建一个实例
在windows平台上在你连接到一个实例之前如果这个实例不存在你必须手工创建它.使用oradim命令将创建一个oracle
实例

为了创建一个实例:
在一个windows命令提示符处输入下面的命令:
oradim -NEW -SID sid -STARTMODE MANUAL -PFILE pfile
sid是期待的SID(例如newdb),pfile是完全路径的文本初始化参数文件.这个命令只会创建实例不会启动实例.

注意:在这里没有将-startmode参数设置为auto是因为它会让新的实例启动并试图挂载数据库.

步骤6:连接实例
启动SQL*Plus并使用sysdba系统权限来连接到oracle实例.
.使用密码文件验证输入下面的命令且输入sys密码:

[oracle@jyrac1 ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 9 09:59:55 2014

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> conn sys as sysdba
Enter password:
Connected to an idle instance.

.使用操作系统验证输入下面命令:

[oracle@jyrac1 ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 9 09:59:08 2014

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> conn / as sysdba
Connected to an idle instance.

SQL*Plus输出下面信息:
Connected to an idle instance

注意:SQL*Plus可能输出类似于下面的信息:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

如果是这样,实例已经启动了.你可能连接到一个错误的实例了.执行exit命令退出SQL*Plus,检查ORACLE_SID的值
然后重复这个步骤

步骤7:创建服务器参数文件
服务器参数文件能让你使用alter system命令来修改初始化参数且让改变在数据库重新启动后仍然生效.可以通过
一个文本参数文件来创建一个服务器参数文件.

下面的SQL*Plus命令将从缺省位置使用缺省名称来读取一个文本初始化参数文件(pfile),通过文本初始化参数文件
来创建一个服务器参数文件(spfile)并将spfile使用缺省的spfile名称写到缺省位置.
create spfile from pfile;

如果不使用缺省的名字和位置也可以对pfile和spfile提供文件名和路径

注意:在服务器参数文件起作用之前必须要重启数据库.虽然在这里创建一个服务器参数文件是一个可选项,但是建议
创建一个服务器参数文件.如果不创建服务器参数文件那么实例在启动时将继续读取文本初始化参数文件

更重要的:如果正使用oracle管理文件功能且初始化参数文件不包含control_files参数,那么在执行create database语句时就必须创建一个服务器参数文件数据库能保存控制文件的名字和位置.

步骤8:启动实例
启动实例不加载数据库.通常只在数据库创建或者执行数据库维护操作时使用.使用带有nomount子句的startup命令.
在下面的例子中,因为初始化参数文件或服务器参数文件存放在缺省位置所以不需要指定pfile子句.

SQL> startup nomount
ORACLE instance started.

Total System Global Area  217157632 bytes
Fixed Size                  2211928 bytes
Variable Size             159387560 bytes
Database Buffers           50331648 bytes
Redo Buffers                5226496 bytes

步骤9:执行create database语句
为了创建一个新的数据库使用create database语句
例1:
下面的语句创建数据库jy.这个数据库名必须与初始化参数文件中的db_name相同.这个例子假设下面的条件成立:
.初始化参数文件使用control_files参数指定了控制文件的数量和位置
.存在目录/u01/app/oracle/oradata/jy

SQL> CREATE DATABASE jy
  2  USER SYS IDENTIFIED BY "zzh_2046"
  3  USER SYSTEM IDENTIFIED BY "zzh_2046"
  4  LOGFILE GROUP 1 ('/u01/app/oracle/oradata/jy/redo01a.log','/u01/app/oracle/oradata/jy/redo01b.log') SIZE 50M BLOCKSIZE 512,
  5  GROUP 2 ('/u01/app/oracle/oradata/jy/redo02a.log','/u01/app/oracle/oradata/jy/redo02b.log') SIZE 50M BLOCKSIZE 512,
  6  GROUP 3 ('/u01/app/oracle/oradata/jy/redo03a.log','/u01/app/oracle/oradata/jy/redo03b.log') SIZE 50M BLOCKSIZE 512
  7  MAXLOGFILES 5
  8  MAXLOGMEMBERS 5
  9  MAXLOGHISTORY 1
 10  MAXDATAFILES 100
 11  CHARACTER SET ZHS16GBK
 12  NATIONAL CHARACTER SET AL16UTF16
 13  EXTENT MANAGEMENT LOCAL
 14  DATAFILE '/u01/app/oracle/oradata/jy/system01.dbf' SIZE 325M REUSE
 15  SYSAUX DATAFILE '/u01/app/oracle/oradata/jy/sysaux01.dbf' SIZE 325M REUSE
 16  DEFAULT TABLESPACE users
 17  DATAFILE '/u01/app/oracle/oradata/jy/users01.dbf'
 18  SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
 19  DEFAULT TEMPORARY TABLESPACE tempts1
 20  TEMPFILE '/u01/app/oracle/oradata/jy/temp01.dbf'
 21  SIZE 20M REUSE
 22  UNDO TABLESPACE undotbs
 23  DATAFILE '/u01/app/oracle/oradata/jy/undotbs01.dbf'
 24  SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

Database created.

创建的数据库有以下特征:
.数据库名为jy.

.由于在参数文件中没有指定control_files参数,数据库自动地在参数文件位置创建了一个控制文件

.sys和system用户的密码为指定的zzh_2046.从oracle11g开始密码是区分大小写的.两个指定sys和
system用户的密码的子句不是强制性的.然而如果你指定子句就必须对它们都指定.

.新创建的数据库有三组重做日志文件,每一组有两个成员由logfile子句指定.maxlogfiles,maxlogmembers和
maxloghistory指定了重做日志的限制.重做日志文件的块大小被设置为了512 bytes.和磁盘上的物理块大小相同.
如果块大小与物理块大小相同(缺省值)那么blocksize子句是一个可选项.物理块的大小通常是512,1024和4096.
对于磁盘使用4K的块大小可以选择指定blocksize为4096

.maxdatafiles指定了在数据库中能打开的数据文件的最大个数.这个值的大小会影响控制文件的大小.
注意:在创建数据库时可以设置多个限制.有些限制通过操作系统限制来实现的.例如,如果设置了maxdatafiles,
oracle数据库会在控制文件中分配足够的空间来存储maxdatafiles参数所指定个数的文件名.即使数据库一开始
只有一个数据文件.然而因为控制文件的最大大小与操作系统相关,在create database的参数中可能无法设置为
理论上的最大值.

.字符集ZHS16GBK用来在数据库中存储数据

.字符集AL16UTF16用来指定national character set,用来存储nchar,nclob或nvarchar2类型的数据

.system表空间由操作系统文件组成/u01/app/oracle/oradata/jy/system01.dbf由datafile子句来创建.如果已经
存在一个相同的文件名那么它将会被覆盖.

.system表空间创建为本地管理表空间

.sysaux表空间由操作系统文件组成/u01/app/oracle/oradata/jy/sysaux01.dbf由sysaux datafile子句来创建

.default tablespace子句对数据库创建和命名一个缺省的永久表空间

.default temporary tablespace了句对数据库创建和命名一个缺省的临时表空间

.如果在初始化参数文件中指定了undo_management=auto,unod tablespace子句创建和命名一个undo表空间用来
存储数据库的undo数据.如果忽略这个参数缺省值就是auto.

.重做日志文件在初始化时不进行归档,因为archivelog子句在create database语句中没有指定.在创建数据库时
这是常见的行为.可以在创建数据库之后使用alter database语句来切换到archivelog模式.在初始化参数文件中
与归档有关的初始化参数为log_archive_dest_1和log_archive_format.

注意:
.确保在create database语句的所用的所有目录都已经创建好.create database语句不会创建目录
.如果没有使用oracle管理文件,那么每一个子句必须包括一个datafile或tempfile子句
.如果数据库创建失败,那么可以查看告警日志来判断失败的原因且修正.
.为了在失败后重新提交create database语句你必须首先关闭实例且删除之前create database语句所创建的任何
文件

示例2
这个例子将使用oracle管理文件来创建一个数据库.它能让你使用一个更简单的create database语句来创建一个
数据库.为了使用oracle管理文件必须指定初始化参数db_create_file_dest.这个参数定义了在创建数据库各种
文件的存储目录和名称.下面的语句就是在初始化参数文件中设置这个参数:
db_create_file_dest=’/u01/app/oracle/oradata’

使用oracle管理文件和下面的create database语句,数据库将创建system和syaaux表空间,还可以创建语句中所
指定的额外的表空间,且会对所有数据文件,控制文件和重做日志文件使用缺省的大小和属性.注意这些属性和其它
缺省的数据库属性通过这种方法进行设置可能不能满足你生产环境的要求,所以建议你根据需要修改配置.

SQL> startup nomount
ORACLE instance started.

Total System Global Area  217157632 bytes
Fixed Size                  2211928 bytes
Variable Size             159387560 bytes
Database Buffers           50331648 bytes
Redo Buffers                5226496 bytes
SQL> show parameter db_create_file_dest

NAME                                 TYPE                    VALUE
------------------------------------ ----------------------  ------------------------------
db_create_file_dest                  string                  /u01/app/oracle/oradata

SQL> CREATE DATABASE cs
  2  USER SYS IDENTIFIED BY "zzh_2046"
  3  USER SYSTEM IDENTIFIED BY "zzh_2046"
  4  EXTENT MANAGEMENT LOCAL
  5  DEFAULT TEMPORARY TABLESPACE temp
  6  UNDO TABLESPACE undotbs1
  7  DEFAULT TABLESPACE users;

Database created.

使用oracle管理文件时会将控制文件,数据文件,重做日志文件以不同的目录来存储

[oracle@jyrac1 CS]$ pwd
/u01/app/oracle/oradata/CS

[oracle@jyrac1 CS]$ ls
controlfile  datafile  onlinelog

[oracle@jyrac1 datafile]$ ls -lrt
total 318828
-rw-r----- 1 oracle oinstall 104865792 Apr  9 11:40 o1_mf_temp_9n9jb02z_.tmp
-rw-r----- 1 oracle oinstall 104865792 Apr  9 11:41 o1_mf_users_9n9jb08d_.dbf
-rw-r----- 1 oracle oinstall 104865792 Apr 10 08:31 o1_mf_system_9n9j9p4h_.dbf
-rw-r----- 1 oracle oinstall  10493952 Apr 10 08:41 o1_mf_undotbs1_9n9j9y6l_.dbf
-rw-r----- 1 oracle oinstall 104865792 Apr 10 08:41 o1_mf_sysaux_9n9j9tj4_.dbf

[oracle@jyrac1 controlfile]$ ls -lrt
total 7676
-rw-r----- 1 oracle oinstall 7847936 Apr 10 08:46 o1_mf_9n9j9lxs_.ctl

[oracle@jyrac1 onlinelog]$ ls
o1_mf_1_9n9j9m5x_.log  o1_mf_2_9n9j9mfv_.log

注意:如果create database语句失败且如果不能完成步骤7,那么确保对于这个实例这里不存在服务器参数文件(spfile)
例如,一个spfile包含了所有控制文件的完全路径,如果create database语句失败,如果这些控制文件不存在,确保你在重启实例之后删除一个你不使用的spfile文件

步骤10:创建额外的表空间
为了使用数据库的功能你必须为你的应用数据创建额外的表空间.下面的脚本用来创建额外的表空间:

SQL> CREATE TABLESPACE apps_tbs LOGGING
  2  DATAFILE '/u01/app/oracle/oradata/jy/apps01.dbf'
  3  SIZE 50M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED
  4  EXTENT MANAGEMENT LOCAL;

Tablespace created.

SQL> CREATE TABLESPACE indx_tbs LOGGING
2 DATAFILE '//u01/app/oracle/oradata/jy/indx01.dbf'
3 SIZE 50M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED
4 EXTENT MANAGEMENT LOCAL;

Tablespace created.

步骤11:运行脚本创建数据字典视图
运行必要的脚本来创建数据字典视图,同义词,PL/SQL包

SQL> @$ORACLE_HOME/rdbms/admin/catalog.sql
SQL> @$ORACLE_HOME/rdbms/admin/catproc.sql
SQL> @$ORACLE_HOME/sqlplus/admin/pupbld.sql

catalog.sql脚本创建数据字典表的视图,动态性能视图和许多视图的公共同义词.授予public来访问同义词
catproc.sql运行所有要使用的PL/SQL的创建脚本
pupbld.sql SQL*Plus所要求的脚本

步骤12:(可选项)运行脚本来安装额外的选项
你可能想运行其它的脚本.这些脚本是由你选择使用或安装的功能所决定的.如果你想安装其它的oracle产品与
数据库一起工作那么你将要运行其它的脚本来创建一些额外的数据字典表.

步骤13:备份数据库
对数据库执行一个完全备份来确保如果出现介质故障能够有一个完整的文件备份.可以使用rman进行备份

步骤14:(可选项)启用自动实例启动
你可能想配置oracle实例在操作系统重启之后自动启动.可以查看操作系统相关的文档.例如对于windows平台
可以使用下面的命令来配置数据库根据操作系统重启而重启实例:
ORADIM -EDIT -SID sid -STARTMODE AUTO -SRVCSTART SYSTEM [-SPFILE]
如果想让实例在自动重启时使用spfile必须指定-spfile参数

指定create database语句的子句
当执行create database语句时,oracle数据库会执行一些操作.实际操作的执行依赖于在create database语句中指定的子句和你设置的初始化参数.oracle数据库至少执行以下操作:
创建数据库的数据文件
创建数据库的控制文件
创建数据库的重做日志文件和建立archivelog模式
创建system表空间
创建sysaux表空间
创建数据字典
设置数据库存储数据的字符集
设置数据库的时区
加载数据库和打开数据库

指定sys和system用户的密码来保护数据库
create database语句中有子句可以指定sys和system用户的密码:
.user sys identified by password
.user system identified by password
如果忽略这些子句那么这些用户将会使用缺省的密码change_on_install和manager,且会在告警日志文件中写入一条记录来指示缺省密码已经被使用.为了保持数据库你必须在数据库创建之后使用alter user语句来修改密码.

oracle建议你指定这些子句即使它们是可选项.缺省的密码是通用的,如果你忘记了修改那么你的数据库处于很容易攻击的状态.

当你选择密码时要注意在oracle 11g中密码是区分大小写的.也可能数据库对密码有格式要求.

创建本地管理的system表空间
在create database语句中指定extent management local子句来创建一个本地管理的system表空间.初始化参数compatible必须设置为10.0.0或都更高的值这个创建语句才能执行成功.如果你不指定extent management local子句,那么缺省情况下会创建一个字典管理system表空间.字典管理表空间已经被弃用.

如果你使用本地管理的system表空间来创建数据库而不使用oracle管理文件那么要确保满足下面的条件:
.在create database语句中指定default temporary tablespace子句
.在create database语句中指定undo tablespace子句

sysaux表空间
sysaux表空间总是在数据库创建时被创建的.sysaux表空间作为system表空间的辅助表空间来使用的.因为它是许多数据库的功能和产品所要求的缺省表空间,它减少了数据库要求的表空间数.它还会减少system表空间的负载.

可以在create database语句中使用sysaux datafile子句来指定sysaux表空间的数据文件属性.在数据库中sysaux表空间的强制属性包括:
permanent
read write
extent management local
segment space management auto

不能使用alter tablespace语句来修改这些属性任何试图修改的操作都会返回一个错误信息.不能对sysaux表空间重命名也不能删除sysaxu表空间.

sysaux表空间的大小取决于数据库组件占用sysaux表空间的大小.可以通过查询v$sysaux_occupants视图来查看这些组件.基于这些组件的初始大小,sysaux表空间在数据库创建时至少在400MB以上.在数据库完全部署后依赖于它的使用和工作负载对sysaux表空间的所要求的大小会增加.

SQL> select sum(space_usage_kbytes)/1024 MB from v$sysaux_occupants;

        MB
----------
   623.875

如果对system表空间包含了datafile子句那么必须指定sysaux datafile子句否则create database语句将会失败.这个要求如果使用oracle管理文件就不是必须的.sysaux表空间与system表空间有相同的安全属性.

使用自动undo管理:创建一个undo表空间
自动undo管理需要使用一个undo表空间.为了启用自动undo管理需要将初始化参数undo_management设置为auto.或者忽略这个参数数据库缺省值就是使用自动undo管理是.

SQL> show parameter undo_management

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO

在自动undo管理模式下,undo数据被存储在undo表空间中由oracle数据库来管理.为了定义和命名一个undo表空间必须在create database语句中包含一个undo tablespace子句.如果忽略这个子句自动undo管理会被启用那么数据库会创建一个缺省undo表空间名叫sys_undotbs

创建一个缺省的永久表空间
create database语句中的default tablespace子句用来对数据库指定一个缺省的永久表空间.oracle数据库对非system用户指定到这个表空间不用显式的指定不同的永久表空间.如果你不指定这个子句,那么对于非system用户来说system表空间是缺省的永久表空间.oracle建议创建一个缺省的永久表空间.

创建一个缺省临时表空间
create database语句中的default temporary tablespace子句用来创建一个缺省的临时表空间.oracle将这个表空间指定为用户的临时表空间而不用再显式的来指定临时表空间.例如我们在创建数据库jy的语句中指定了缺省永久表空间users和临时表空间temp.下面来创建一个新的用户并查看它的永久表空间和临时表空间是不是为users和temp.

SQL> create user test identified by test;

User created.

SQL> select username,default_tablespace,temporary_tablespace from dba_users where username='TEST';

USERNAME                       DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
TEST                           USERS                          TEMP

可以看到我们创建一个用户test,没有显式地指定永久表空间和临时表空间,数据库自动指定了永久表空间和临时表空间.

在create user语句中可以显式的指定一个临时表空间或表空间组给用户.然而如果你不这样做且没有对数据库指定缺省的临时表空间,那么数据库会对这些用户指定system表空间来作为它们的临时表空间.在system表空间中存储临时数据不是一种可取的方法.而且给每一个用户单独指定临时表空间的很麻烦的.因此oracle建议在create database语句中使用default temporary tablespace子句.
注意:当指定system表空间为本地管理表空间后,system表空间不能用作临时表空间.在这种情况下你必须创建一个缺省的临时表空间.

在创建数据库时指定oracle管理文件
通过使用oracle管理文件这个功能可以在使用create database语句时使用最少数量的子句和参数.可以对由oracle数据库创建和管理的文件指定一个目录或者一个oracle asm磁盘组.

在你的初始化参数文件中通过db_create_file_dest,db_create_online_log_dest_n或db_recovery_file_dest参数中的任何一个来指示oracle数据库来创建和管理数据库的底层操作系统文件.oracle数据库将按照你指定的初始化参数和create database语句中指定的子句所指定的数据库结构来创建和管理操作系统文件.
.表空间和它们的数据文件
.临时表空间和它们的临时文件
.控制文件
.重做日志文件
.归档重做日志文件
.闪回日志
.块改变跟踪文件
.rman备份

下面的create database语句在假设你已经指定必要的初始化参数后oracle管理文件是怎样工作的情况

CREATE DATABASE cs
USER SYS IDENTIFIED BY "zzh_2046"
USER SYSTEM IDENTIFIED BY "zzh_2046"
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE temp
UNDO TABLESPACE undotbs1
DEFAULT TABLESPACE users;

.system表空间创建为本地管理表空间.如果不使用extent management local子句,system表空间将创建为字典管理表空间这是不建议的

.没有指定datafile子句,所以数据库对system表空间创建一个oracle管理数据文件

.没有指定logfile子句,所以数据库将创建两组oracle管理的重做日志组.

SQL> select  group# from v$log;

    GROUP#
----------
         1
         2
[oracle@jyrac1 onlinelog]$ ls -lrt
total 205016
-rw-r----- 1 oracle oinstall 104858112 Apr  9 11:40 o1_mf_2_9n9j9mfv_.log
-rw-r----- 1 oracle oinstall 104858112 Apr 10 10:22 o1_mf_1_9n9j9m5x_.log

.没有包括sysaux datafile子句,所以数据库将对sysaux表空间创建一个oracle管理的数据文件

.对于undo tablespace和default tablespace子句没有指定datafile子句,所以数据库对这些表空间中的每一个都创建一个oracle管理的数据文件.

.对于default temporaray tablespace子句没有指定tempfile子句,所以数据库将会创建一个oracle管理的临时文件.

.如果在初始化参数文件中没有指定control_files参数那么数据库也会创建一个oracle管理的控制文件

.如果你正在使用一个服务器参数文件那么数据库将会自动设置适当的初始化参数

在创建数据库时支持大数文件表空间
oracle数据库为了简化表空间的管理通过创建大文件表空间来支持超大型数据库的管理.大文件表空间只包含一个数据文件,但是这个数据文件最多可以包含4G个数据块.在oracle数据库中最多的数据文件个数被限制了(通常是64K个文件).因此大文件表空间可能显著的增加一个oracle数据库的存储容量.

下面将介绍在create database语句中如何支持大文件表空间
指定缺省的表空间类型在create database语句中的set default … tablespace子句将决定后续的create tablespace语句的缺省表空间类型.可以设置为set default bigfile tablespacea或者set default smallfile tablespace.如果你忽略这个子句,那么缺省的是小文件表空间,它是传统的oracle数据库表空间类型.一个小文件表空间最多能包含1022个数据文件,每个数据文件最多能包含4M个数据块.

下面的create database语句被修改为使用大文件表空间:

SQL> startup nomount
ORACLE instance started.

Total System Global Area  217157632 bytes
Fixed Size                  2211928 bytes
Variable Size             159387560 bytes
Database Buffers           50331648 bytes
Redo Buffers                5226496 bytes
SQL> CREATE DATABASE cs
  2  USER SYS IDENTIFIED BY "zzh_2046"
  3  USER SYSTEM IDENTIFIED BY "zzh_2046"
  4  EXTENT MANAGEMENT LOCAL
  5  SET DEFAULT BIGFILE TABLESPACE
  6  DEFAULT TEMPORARY TABLESPACE temp
  7  UNDO TABLESPACE undotbs1
  8  DEFAULT TABLESPACE users;

Database created.

SQL> select name,bigfile from v$tablespace;

NAME                                                         BIGFIL
------------------------------------------------------------ ------
SYSTEM                                                       YES
SYSAUX                                                       YES
UNDOTBS1                                                     YES
TEMP                                                         YES
USERS                                                        YES

从上面信息可以看到数据库cs中的表空间都是大文件表空间

在数据库创建之后可以使用带有set default tablespace了句的alter database语句来动态的改变缺省的表空间类型

SQL> ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE;

Database altered

可以通过查询database_properties数据字典视图来查询数据库当前的缺省表空间类型

SQL> SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_TBS_TYPE';

PROPERTY_VALUE
--------------------------------------------------------------------------------
BIGFILE

覆盖缺省的表空间类型
system和sysaux表空间总是使用缺省的表空间类型来创建的.然而对于create database操作中的undo和default temporary表空间可以显式的覆盖缺省的表空间类型.

例如,可以在缺省表空间类型为小文件表空间的情况下创建一个大文件类型的undo表空间:

SQL> startup nomount
ORACLE instance started.

Total System Global Area  217157632 bytes
Fixed Size                  2211928 bytes
Variable Size             159387560 bytes
Database Buffers           50331648 bytes
Redo Buffers                5226496 bytes
SQL> CREATE DATABASE cs
  2  USER SYS IDENTIFIED BY "zzh_2046"
  3  USER SYSTEM IDENTIFIED BY "zzh_2046"
  4  EXTENT MANAGEMENT LOCAL
  5  DEFAULT TEMPORARY TABLESPACE temp
  6  BIGFILE UNDO TABLESPACE undotbs1
  7  DEFAULT TABLESPACE users;

Database created.

也可以在缺省表空间类型为大文件表空间的情况下创建一个小文件类型的缺省临时表空间:

SQL> startup nomount
ORACLE instance started.

Total System Global Area  217157632 bytes
Fixed Size                  2211928 bytes
Variable Size             159387560 bytes
Database Buffers           50331648 bytes
Redo Buffers                5226496 bytes
SQL> CREATE DATABASE cs
  2  USER SYS IDENTIFIED BY "zzh_2046"
  3  USER SYSTEM IDENTIFIED BY "zzh_2046"
  4  EXTENT MANAGEMENT LOCAL
  5  SET DEFAULT BIGFILE TABLESPACE
  6  DEFAULT TEMPORARY TABLESPACE temp
  7  UNDO TABLESPACE undotbs1
  8  SMALLFILE DEFAULT TABLESPACE users;

Database created.

发表评论

电子邮件地址不会被公开。