2 创建数据库
这一章讨论创建数据库的过程,包含以下内容:
1. 创建数据库之前的规划
2. 使用数据库配置助手
3. 手动创建数据库
4. 理解CREATE DATABASE语句
5. 数据库创建中的故障排除
6. 删除数据库
7. 创建数据库之后的规划
8. 初始化参数和数据库创建
9. 使用服务器端参数文件管理初始化参数
2.1 创建数据库之前的规划
数据库的创建准备了几个操作系统文件协同工作,来完成数据库的功能。你只需要创建一次数据库而不必理会他有多少个数据文件或者有多少个实例要访问它。创建数据库也能够删除一个已经存在的数据库的信息,然后使用相同的名字和物理结构创建一个新的数据库。这部分包含以下内容:
1. 为创建数据库作计划
2. 满足创建的要求
3. 决定如何创建数据库
2.1.1为创建数据库作计划
1. 设计数据库表和索引以及估计他们所需要的空间大小
2. 计划组成数据库的操作系统文件。通过合理的规划文件
io分布,可以大大提高数据库性能。当你安装oracle和创建数据库时,有几种可以用来分布io。例如,将重做日志文件放在独立的磁盘内;控制数据复杂度(一个数据块的行数)。
3. 考虑使用
oracle管理文件的特性创建和管理操作系统文件
4. 选择全局数据库名,这个名字表示数据库在网络中名字和位置。通过设置
DB_NAME和DB_DOMAIN初始化参数来完成。
5. 熟悉初始化参数文件中的各种参数。熟悉服务器参数文件的概念和操作。服务器参数文件允许你在服务器的磁盘上长期保存和管理初始化参数。
6. 选择数据库字符集。所有的字符数据(包括数据字典里的)都保存在数据库字符集中。创建数据库时必须指定字符集。如果使用不同字符集的用户要访问数据库,就选择一个包含所有字符集的超集。否则,字符转换会带来成本增加和潜在的数据丢失。你可以指定一个备用的字符集。
7. 考虑你的数据库支持的时间区域。
Oracle使用一个时间区域文件提供有效的时间区域。如果你确定你需要使用一个时间域,而它又不在默认的时间区域文件中(timezone.dat),但是它在大时间区域文件中(timezlrg.dat),你必须设置ORA_TZFILE环境变量来指定大时间区域文件。
8. 选择标准数据库块大小。在数据库创建过程中,用
DB_BLOCK_SIZE初始化参数指定,数据库创建之后,不能再改动。系统表空间和大多数其他表空间都使用标准数据库块大小。此外,你可以在创建数据库时指定四个非标准块大小。
9. 使用回退表空间管理你的回退日志,而不要使用回退段。
10. 准备一个备份和恢复策略来保护数据库。多重保存控制文件,选择合适的备份模式,管理在线和归档重做日志文件,都很重要。
11. 熟悉启动和关闭实例,
mount和打开数据库的概念和操作
2.1.2 满足创建的要求
为了创建新的数据库,下面的先决条件必须满足:
1. 安装所需的oracle软件,包括设置各种环境变量,为软件和数据库文件建立目录结构。
2. 你要拥有数据库管理员所必须的操作系统权限。你必须通过操作系统认证或者秘密文件认证,允许你在数据库打开之前启动或者关闭实例。
3. 必须有足够的内存启动实例。
4. 必须有足够的磁盘空间。
2.1.3 确定如何创建数据库
创建数据库包括以下几个步骤:
1. 创建信息结构,包括数据字典,
oracle通过它来访问和使用数据库。
2.
创建和初始化控制文件和重做日志文件。
3.
创建新的数据文件或者擦除之前数据文件中的数据。
4.
你可以使用
CREATE DATABASE
语句来进行这些操作,但是在数据库可用之前,其他的操作是必要的,比如创建用户和临时表空间,创建数据字典表的视图,安装oracle内置包等等。
你有以下选择来创建数据库:
1.
使用数据库配置助手(DBCA)
2.
使用脚本
3.
升级已经存在的数据库
2.2 使用DBCA创建数据库
略
2.3 手工创建数据库
这一部分讲述手工创建数据库的步骤:
1. 确定数据库实例的
SID
2. 确定数据库管理员认证方法
3. 创建初始化参数文件
4. 连接实例
5. 启动实例
6. 调用
CREATE DATABASE语句
7. 创建其余的表空间
8. 运行脚本创建数据字典视图
9. 运行脚本安装其余选项
10. 创建服务器端参数文件
11. 备份数据库
2.3.1 确定数据库的SID
确定SID,并且相应的设置好环境变量ORACLE_SID,数据库实例的SID用来将当前实例和以后可能创建的实例进行区分。
% setenv ORACLE_SID mynewdb
初始化文件中的
DB_NAME参数应该与ORACLE_SID相匹配。
2.3.2建立数据库管理员认证方法
略
2.3.3创建初始化参数文件
实例(由内存结构SAG和后台进程组成)启动过程中要读取初始化参数文件。得到初始化参数文件的一个好办法是修改一个已有的初始化参数文件。为了简化操作,将初始化参数文件放在Oracle默认的位置上,这样的话,当数据库启动时,就没有必要再指定pfile参数了,因为Oracle会自动寻找在默认位置的初始化参数文件。
Platform
Default Name Default Location
UNIX
init$ORACLE_SID.ora $ORACLE_HOME/dbs
Windows
init$ORACLE_SID.ora $ORACLE_HOME/database
如果一个数据库的名字是mynewdb,下面就是该数据库的初始化文件:
# Cache and I/O
DB_BLOCK_SIZE=4096
DB_CACHE_SIZE=20971520
# Cursors and Library Cache
CURSOR_SHARING=SIMILAR
OPEN_CURSORS=300
# Diagnostics and Statistics
BACKGROUND_DUMP_DEST=/vobs/oracle/admin/mynewdb/bdump
CORE_DUMP_DEST=/vobs/oracle/admin/mynewdb/cdump
TIMED_STATISTICS=TRUE
USER_DUMP_DEST=/vobs/oracle/admin/mynewdb/udump
# Control File Configuration
CONTROL_FILES=("/vobs/oracle/oradata/mynewdb/control01.ctl",
"/vobs/oracle/oradata/mynewdb/control02.ctl",
"/vobs/oracle/oradata/mynewdb/control03.ctl")
# Archive
LOG_ARCHIVE_DEST_1='LOCATION=/vobs/oracle/oradata/mynewdb/archive'
LOG_ARCHIVE_FORMAT=%t_%s.dbf
LOG_ARCHIVE_START=TRUE
# Shared Server
# Uncomment and use first DISPATCHES parameter below when your listener is
# configured for SSL
# (listener.ora and sqlnet.ora)
# DISPATCHERS = "(PROTOCOL=TCPS)(SER=MODOSE)",
# "(PROTOCOL=TCPS)(PRE=oracle.aurora.server.SGiopServer)"
DISPATCHERS="(PROTOCOL=TCP)(SER=MODOSE)",
"(PROTOCOL=TCP)(PRE=oracle.aurora.server.SGiopServer)",
(PROTOCOL=TCP)
# Miscellaneous
COMPATIBLE=9.2.0
DB_NAME=mynewdb
# Distributed, Replication and Snapshot
DB_DOMAIN=us.oracle.com
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
# Network Registration
INSTANCE_NAME=mynewdb
# Pools
JAVA_POOL_SIZE=31457280
LARGE_POOL_SIZE=1048576
SHARED_POOL_SIZE=52428800
# Processes and Sessions
PROCESSES=150
# Redo Log and Recovery
FAST_START_MTTR_TARGET=300
# Resource Manager
RESOURCE_MANAGER_PLAN=SYSTEM_PLAN
# Sort, Hash Joins, Bitmap Indexes
SORT_AREA_SIZE=524288
# Automatic Undo Management
UNDO_MANAGEMENT=AUTO
UNDO_TABLESPACE=undotbs
2.3.4连接到实例
$ SQLPLUS /nolog
CONNECT SYS/password AS SYSDBA
2.3.5启动实例
不mount数据库,仅仅启动实例。通常,只是在创建和维护数据库的时候才这样做。
STARTUP NOMOUNT
此时,数据库并不存在,只有SGA和后台进程被创建。
2.3.6调用create database语句
CREATE DATABASE mynewdb
USER SYS IDENTIFIED BY pz6r58
USER SYSTEM IDENTIFIED BY y1tz5p
LOGFILE GROUP 1 ('/vobs/oracle/oradata/mynewdb/redo01.log') SIZE 100M,
GROUP 2 ('/vobs/oracle/oradata/mynewdb/redo02.log') SIZE 100M,
GROUP 3 ('/vobs/oracle/oradata/mynewdb/redo03.log') SIZE 100M
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
MAXINSTANCES 1
CHARACTER SET US7ASCII
NATIONAL CHARACTER SET AL16UTF16
DATAFILE '/vobs/oracle/oradata/mynewdb/system01.dbf' SIZE 325M REUSE
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE tempts1
DATAFILE '/vobs/oracle/oradata/mynewdb/temp01.dbf'
SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE '/vobs/oracle/oradata/mynewdb/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED;
1. 数据库创建之后,数据库名称是
mynewdb,它的全局数据库名是mynewdb.us.oracle.com。
2. 控制文件通过初始化参数
CONTROL_FILES来创建。
3. SYS用户的密码是
pz6r58,SYSTEM用户的密码是y1tz5p。这两个子句在Oracle9i中是可选,但是如果设定了任何一个密码,那么两个密码都必须设定。
4. 该数据库有三个在线重做日志组,通过
LOGFILE子句来指定,MAXLOGFILES, MAXLOGMEMBERS, and MAXLOGHISTORY都是对日志文件的限制。
5. MAXDATAFILES指定了数据库可以打开的数据文件的最大数量,该数量会影响到控制文件的大小。在创建数据库的过程中所设定的参数,有些会受到其他因素的影响。比如,设定了
MAXDATAFILES之后,Oracle在控制文件中要分配空间存放数据文件的文件名,即使数据库只有一个数据文件。然而,因为控制文件本身也有大小的限制(跟操作系统有关),很有可能不能把所有CREATE DATABASE的参数都设置为他们理论上的最大值。
6.
MAXINSTANCES
指定了只有一个实例能够mount和打开这个数据库。US7ASCII字符集被指定为数据库保存数据使用的字符集。
7.
系统表空间由/vobs/oracle/oradata/mynewdb/system01.dbf组成,如果该文件已经存在,将会被重写。
8.
系统表空间是本地化管理的表空间。
9. DEFAULT_TEMPORARY_TABLESPACE子句创建并命名了一个默认的临时表空间。
10. UNDO_TABLESPACE子句创建并命名了一个撤销表空间,用来存储撤销记录,前提是在初始化参数文件中把
UNDO_MANAGEMENT设定为AUTO。
11. 因为
ARCHIVELOG子句在CREATE DATABASE语句中没有调用,因此重做日志文件并不会被归档,这是数据库创建过程的通常做法,ALTER DATABASE语句可以用来切换到ARCHIVELOG模式。初始化文件中的LOG_ARCHIVE_DEST_1,LOG_ARCHIVE_FORMAT, and LOG_ARCHIVE_START三个参数与归档有关。
2.3.7创建额外的表空间
为了使数据局效率更高,需要创建额外的表空间和文件
CONNECT SYS/password AS SYSDBA
-- create a user tablespace to be assigned as the default tablespace for users
CREATE TABLESPACE users LOGGING
DATAFILE '/vobs/oracle/oradata/mynewdb/users01.dbf'
SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
-- create a tablespace for indexes, separate from user tablespace
CREATE TABLESPACE indx LOGGING
DATAFILE '/vobs/oracle/oradata/mynewdb/indx01.dbf'
SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
EXIT
2.3.8 运行脚本创建数据字典视图
运行脚本创建视图,同义词和
pl/sql包:
CONNECT SYS/password AS SYSDBA
@/vobs/oracle/rdbms/admin/catalog.sql
@/vobs/oracle/rdbms/admin/catproc.sql
EXIT
2.3.9 运行脚本安装其他选项(可选)
略
2.3.10创建服务器参数文件
Oracle建议创建一个服务器参数文件,作为维护初始化参数的动态方式。下面的脚本根据初始化参数文件创建了一个服务器初始化参数文件,并把该初始化参数文件放在默认位置。实例关闭后重新启动时,就会使用默认位置的服务器初始化参数文件。
CONNECT SYS/password AS SYSDBA
-- create the server parameter file
CREATE SPFILE='/vobs/oracle/dbs/spfilemynewdb.ora' FROM
PFILE='/vobs/oracle/admin/mynewdb/scripts/init.ora';
SHUTDOWN
-- this time you will start up using the server parameter file
CONNECT SYS/password AS SYSDBA
STARTUP
EXIT
2.3.11 备份数据库
略
2.4 理解CREATE DATABASE语句
当你执行一个CREATE DATABASE语句时,
oracle执行了至少如下操作。更多的操作取决于在CREATE DATABASE语句中的子句和你已经设置的初始化参数。
1. 创建数据文件
2. 创建控制文件
3. 创建重做日志文件和建立归档模式
4. 创建系统表空间和系统回退段
5. 创建数据字典
6. 设置字符集
7. 设置数据库时间区域
8. Mount并打开数据库
2.4.1 保护数据库:为sys和system用户设定密码
CREATE DATABASE语句中用于为
sys和system用户设定密码的子句是
USER SYS IDENTIFIED BY password
USER SYSTEM IDENTIFIED BY password
如果这两个用户没有被设定密码,那么他们将被分配默认密码
change_on_install和 manager。日志文件中,将被写入一条记录,表明使用默认密码。为了保护数据库,在数据库创建后,应使用alter user语句改变这些密码。
2.4.2 简化数据库创建和管理的子句
2.4.2.1 使用自动撤销管理:创建一个撤销表空间
Oracle推荐使用撤销表空间代替回退段,这需要使用一套不同的初始化参数,并且要将UNDO TABLESPACE子句包含在
CREATE DATABASE语句中。如果希望使用自动回退管理,则必须有如下的初始化参数:
UNDO_MANAGEMENT=AUTO
在这种模式下,撤销信息保存在撤销表空间,而不是回退段中,被
oracle自动管理。如果你希望创建一个命名的撤销标空间,你可以在数据库创建时加入UNDO TABLESPACE子句。如果你忽略了这个子句,但是又指定了自动撤销管理,
oracle创建一个名为SYS_UNDOTBS的默认撤销表空间。
2.4.2.2 创建默认的临时表空间
CREATE DATABASE 语句中的
DEFAULT TEMPORARY TABLESPACE子句指定一个临时表空间。对于没有指定临时表空间的用户,这个表空间作为默认的临时表空间。用户可以在CREATE DATABASE中指定一个默认的临时表空间。但是,如果没有临时表空间被指定,他们使用system表空间作为临时表空间。使用system表空间作为临时表空间很不合理,为避免这种情况,同时避免为每个用户分配一个临时表空间,就需要在CREATE DATABASE 语句中通过DEFAULT TEMPORARY TABLESPACE子句指定一个临时表空间。如果你决定以后要该比临时表空间,或者在创建数据库后再创建一个初始的临时表空间,你可以创建一个临时表空间(CREATE TEMPORARY TABLESPACE),然后使用ALTER DATABASE DEFAULT TEMPORARY TABLESPACE将它用作数据库的临时表空间。用户将被自动切换到这个临时表空间中。下面的语句分配了一个新的默认临时表空间:
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tempts2;
新的默认临时表空间必须是已经存在的表空间。当使用本地管理的系统表空间时,新的默认临时表空间也必须是本地管理的。你不能
drop一个默认的临时表空间,但可以分配一个新的默认临时表空间,然后drop掉前一个。不允许将临时表空间修改为永久表空间,也不允许将一个临时表空间offline。用户可以使用DATABASE_PROPERTIES视图得到当前默认临时表空间。
PROPERTY_NAME列包含“DEFAULT_TEMP_TABLESPACE”,PROPERTY_VALUE列包含默认临时表空间名称。
2.4.2.3 使用oracle管理文件
通过使用
oracle管理文件特性,可以将CREATE DATABASE语句中的子句和参数数量达到最少。如果在初始化参数文件中包含DB_CREATE_FILE_DEST或者DB_CREATE_ONLINE_LOG_DEST_n参数,oracle将创建和管理以下结构的底层操作系统文件:
1. 表空间
2. 临时表空间
3. 控制文件
4. Online重做日志文件
例如:
CREATE DATABASE rbdb1
USER SYS IDENTIFIED BY pz6r58
USER SYSTEM IDENTIFIED BY y1tz5p
UNDO TABLESPACE undotbs
DEFAULT TEMPORARY TABLESPACE tempts1;
1.
没有DATAFILE子句,oracle在系统表空间创建一个oracle管理的数据文件
2.
没有LOGFILE子句,oracle创建两个oracle管理的日志文件组
3.
没有DATAFILE子句指定撤销表空间,oracle为撤销表空间创建一个oracle管理的数据文件
4.
没有TEMPFILE子句指定默认临时表空间,oracle创建一个oracle管理的临时文件
5.
此外,如果初始化参数文件中没有CONTROL_FILES参数,oracle创建一个oracle管理的控制文件
2.4.3 创建一个本地管理system表空间
当在
CREATE DATABASE语句中指定了EXTENT MANAGEMENT LOCAL子句后,oracle创建一个本地管理的system表空间。初始化参数COMPATIBLE必须指定为9.2或者更高。如果没有指定EXTENT MANAGEMENT LOCAL子句,将创建一个数据字典管理的system表空间。本地管理表空间比数据字典管理表空间又更好的性能。本地管理表空间默认情况下由AUTOALLOCATE产生,这意味着由oracle决定它的区的大小。
你也许会注意到因为自动分配策略的原因,在本地管理的系统表空间中创建的对象大小有一个增量。创建一个本地管理的系统表空间,而又指定
uniform区大小,是不可能的。当你创建一个本地管理的系统表空间,确认以下条件已经满足了:
1. 必须存在默认的临时表空间,该临时表空间不是系统表空间
2. 不能在字典管理表空间上创建回退段。如果,系统表空间是本地管理的,不能在字典管理表空间上创建回退段。
为了满足第一个条件,可以在CREATE DATABASE语句中指定
DEFAULT TEMPORARY TABLESPACE子句,或者不包含该子句,oracle在默认位置使用默认的名字创建表空间。为了满足第二个条件,oracle建议不要使用回退段管理撤销信息,而使用自动撤销管理。可以在CREATE DATABASE语句中加入UNDO TABLESPACE来创建指定的撤销表空间,如果没有包含该语句,oracle在默认位置使用默认的名字创建本地管理撤销表空间。
2.4.4指定数据库时间域和时间域文件
略
2.4.5 指定force logging模式
通过使用
nologging子句,某些数据库操作不会产生日志记录。指定nologging可以加速操作,但是也可能引起介质恢复和备份数据库的问题。Oracle提供了一种方式,使得即使有些语句中有nologging语句,仍然会产生记录。Oracle中临时表空间和临时段不会产生日志,因此force logging不会对他们产生影响。
为了使数据库处于FORCE LOGGING,在
CREATE DATABASE中使用FORCE LOGGING子句。如果没有该子句,则不会处于FORCE LOGGING状态。使用ALTER DATABASE NO FORCE LOGGING子句取消FORCE LOGGING状态。对数据库可以设置FORCE LOGGING状态,对表空间也可以单独设置FORCE LOGGING。但如果数据库设置了FORCE LOGGING,它优先于表空间的状态设置。FORCE LOGGING是永久属性,这意味着,即使数据库重新启动,它仍然处于同样的状态。然而,如果控制文件被重新创建了,FORCE LOGGING属性需要重新设置。(木鱼青 2007.6.11)
2.5 数据库创建的故障定位
如果由于任何原因导致数据库创建失败,则关闭实例并删除
CREATE DATABASE语句创建的所有文件,然后再一次创建。
2.6 drop数据库
为了
drop数据库,必须删除所有的数据文件,重做日志文件以及其它相关文件(控制文件,初始化参数文件,归档日志文件)。可以查询数据字典视图V$DATAFILE, V$LOGFILE, and V$CONTROLFILE分别得到上述文件名称。如果数据库处于归档模式,检查归档日志的所在位置,该位置由初始化参数LOG_ARCHIVE_DEST_n, or LOG_ARCHIVE_DEST and LOG_ARCHIVE_DUPLEX_DEST指定。如果使用
dbca创建数据库,也可以使用它来删除数据库和清理文件。
2.7 创建数据库之后的规划
创建数据库之后,实例处于运行状态,数据库处于打开状态可以正常使用。这时你也许希望进行一下的一些操作。
2.7.1 一些安全性的考虑
一个新创建的数据库有至少三个用户可用来管理数据库:SYS, SYSTEM和OUTLN。如果改变安装选项,也可以有其他用户:
MDSYS (
interMedia Spatial)
ORDSYS (
interMedia Audio)
ORDPLUGINS (
interMedia Audio)
CTXSYS (Oracle Text)
DBSNMP (Enterprise Manager Intelligent Agent)
2.7.2 安装数据库示例模式
略
2.8初始化参数和数据库创建
Oracle在一开始的初始化文件中已经提供合适的值,可以修改这些初始化参数文件以增加其他参数,这完全取决于你的安装选项以及你希望如何调整数据库。对于初始化文件中没有指定的参数,
oracle都提供默认能的值。如果你是第一次创建数据库,建议你尽可能少的设定参数。慢慢熟悉之后,可以使用
ALTER SYSTEM
动态调整初始化参数。如果你使用文本格式的初始化参数文件,你的修改只对当前实例有效。为使他们长期有效,你必须在初始化参数文件中手工修改它们,否则,下次关闭重启数据库后,ALTER SYSTEM的修改会失效。如果使用服务器端参数文件,ALTER SYSTEM所做的修改,即使关闭重启仍然有效。
这部分内容介绍一些参数,在创建数据库之前,你可能会增加活着修改这些参数:
1. 确定全局数据库名称
2. 指定控制文件
3. 指定数据库块大小
4. 设定对SGA大小有影响的参数
5. 指定进程的最大数量
6. 指定撤销空间的管理方法
7. 设置许可参数
2.8.1 确定全局数据库名称
全局数据库名由本地数据库名和域名组成。初始化参数DB_NAME是本地名,
DB_DOMAIN是域名。例如:
DB_NAME = test
DB_DOMAIN = us.acme.com
则
GLOBAL_NAME = test.us.acme.com
可以使用
ALTER DATABASE RENAME GLOBAL_NAME语句来修改全局数据库名。否则,你必须关闭数据库,修改DB_NAME和DB_DOMAIN参数然后重建控制文件,然后启动数据库。
DB_NAME初始化参数必须是一个不超过
8个字符的字符串。数据库创建期间,DB_NAME被记录到数据文件,重做日志文件,控制文件中。如果在实例启动过程中,参数文件中的DB_NAME和控制文件中的数据库名不同,则数据库启动失败。DB_DOMAIN一般是拥有数据库的组织的名字。如果你所创建的数据库,将作为一个分布式数据库的一部分,则要特别注意这一参数。
2.8.2 指定控制文件
在初始化参数文件中加入
CONTROL_FILES参数,并指向一个控制文件列表。在执行CREATE DATABASE语句时,CONTROL_FILES指定的控制文件自动生成。如果没有指定该参数,oracle将使用默认名称。在创建数据库时,如果你希望oracle使用新的控制文件,则不要指定任何已经存在的文件名。如果你希望重用已经存在的控制文件,那么将CONTROL_FILES指定的文件名与已经存在的文件名相匹配。Oracle推荐,每个数据库至少在两个不同的驱动器上保存两个控制文件。
2.8.3 指定数据库块大小
DB_BLOCK_SIZE参数指定数据库标准块大小。该值对系统标空间有效,默认情况下,对其他标空间也有效。
Oracle支持四种非标准块大小。DB_BLOCK_SIZE指定最经常使用的块大小,通常是4k或8k。如果没有指定该参数,则由操作系统指定。数据库创建后,该参数不能再修改。如果数据库块和操作系统块大小不同,怎前者是后者的整数倍。
2.8.3 指定SGA大小
这一部分讨论影响
sga大小的参数。除了SGA_MAX_SIZE外,其余参数都可以通过
ALTER SYSTEM动态修改。SGA的大小可以通过改变这些参数来动态调整。
SGA_MAX_SIZE参数在实例的整个生命期内,限制
sga的大小。你可以动态修改缓冲池,共享池,大池的大小,但一定要确保所有部分的总和不超过SGA_MAX_SIZE。如果没有指定该参数,oracle使用在初始化时,所有确定部分的大小的总和作为sag的最大值。
DB_CACHE_SIZE指定标准块大小的缓冲区。缓冲区参数都是可以动态修改的。如果使用块大小的整数倍,则除了要设置DB_CACHE_SIZE之外,还要设置DB_nK_CACHE_SIZE参数,
oracle对DB_CACHE_SIZE有默认值,但DB_nK_CACHE_SIZE的默认值是0。大的缓冲区能减少磁盘读写次数,提高性能。然而,同时也会占用大量内存,增加内存换页。非标准块大小缓冲区的大小和数量,有以下参数指定:DB_2K_CACHE_SIZE,DB_4K_CACHE_SIZE,DB_8K_CACHE_SIZE,DB_16K_CACHE_SIZE,DB_32K_CACHE_SIZE。
DB_BLOCK_SIZE=4096
DB_CACHE_SIZE=12M
DB_2K_CACHE_SIZE=8M
DB_8K_CACHE_SIZE=4M
上例表示,标准块大小为
4k,标准块大小的缓冲区为12M,2k块大小的缓冲区为8M,8k块大小的缓冲区为4M。
共享池参数SHARED_POOL_SIZE和大池参数LARGE_POOL_SIZE。
2.8.4 指定进程的最大数量
PROCESSES的值大于等于
6,其中5个后台进程,1一个用户进程。如果希望对50个用户服务,则该参数应设置为55。
2.8.5 指定撤销空间管理方法
所有的
oracle数据库都有一套方法来维护数据库回退,撤销,修改得信息。这些信息在提交之前就构成了交易记录,oracle称这些记录为撤销记录,oracle允许你将这些记录保存在撤销表空间或回退段中。
UNDO_MANAGEMENT参数决定实例是否以自动撤销管理方式启动,或以手工撤销管理方式启动,后者将撤销记录保存在回退段中。
AUTO启用自动撤销管理模式,MANUAL启用手工撤销管理模式。默认是后者。
当实例以自动撤销管理方式启动时,他使用第一个可用的撤销表空间。当执行
CREATE DATABASE语句,而UNDO_MANAGEMENT又为AUTO时,一个名为SYS_UNDOTBS的默认撤销表空间被创建。无论何时启动数据库,这个表空间,都是oracle正常选择使用的撤销表空间。你可以设定UNDO_TABLESPACE参数,它命令实例使用由它指定的撤销表空间。如果没有撤销表空间可用,实例启动后,将使用system回退段,正常情况下,不推荐这样使用,一条警告信息写入警告文件,提示系统在没有撤销表空间的情况下运行。Oracle推荐使用撤销表空间,而不要使用回退段。撤销表空间简化了管理,并使你能够设定撤销保持时间。
如果在手工撤销管理方式启动,
ROLLBACK_SEGMENTS参数是一列数据库所需要的非系统回退段。如果没有设置该参数,则使用系统回退段。Oracle推荐使用撤销表空间,而不要使用回退段。
2.8.6 设置许可参数
略
2.9 使用服务器端参数文件管理初始化参数
oracle以往使用文本格式的参数文件保存初始化参数。从9i开始可以使用一个二进制服务器端参数文件维护参数。这一部分包括:
1. 什么是服务器端参数文件
2. 移植为服务器端参数文件
3. 创建服务器端参数文件
4. Spfile初始化文件
5. 使用
ALTER SYSTEM修改初始化参数
6. 导出服务器端参数文件
7. 备份服务器端参数文件
8. 服务器端参数文件的错误和恢复
9. 浏览参数设置
2.9.1 什么是服务器端参数文件
服务器端参数文件(spfile)可以认为是在运行oracle服务器的机器上维护初始化参数的仓库。保存在服务器端参数文件的初始化参数是永久的,这意味着,在实例运行时,对参数的修改,即使实例重新启动了,仍然有效。这样就不必在使用alter system修改之后,还需要手工更新初始化参数文件。服务器端参数文件首先通过
CREATE SPFILE
语句从传统初始化文件生成。服务器端参数文件是二进制的,不能通过文本编辑器察看和修改。
实例启动时,首先读spfile取得初始化参数设置。不带有PFILE子句的startup命令会从spfile中读取信息,而带有PFILE子句的startup命令,则会从传统初始化参数文件(pfile)读取信息。
2.9.2 移植成服务器端参数文件
如果你现在正使用
pfile,那么下面步骤可以生成一个spfile:
1. 如果
pfile是在一台客户机上,那么先把该文件传到服务器上。
2. 使用CREATE SPFILE语句创建一个
spfile。不必启动数据库来调用CREATE SPFILE。
3. 使用新创建的
spfile启动实例。
2.9.3 创建spfile
Spfile文件必须首先被创建,然后才能被
startup使用。必须有SYSDBA或者
SYSOPER权限才能调用CREATE SPFILE。下面的例子演示了如何从pfile文件/u01/oracle/dbs/init.ora创建一个spfile。在这个例子中,没有指定spfile文件的名字,因此,该文件在默认的位置,使用默认的名字spfile$ORACLE_SID.ora。
CREATE SPFILE FROM PFILE='/u01/oracle/dbs/init.ora';
下面的例子是指定名字的
spfile文件:
CREATE SPFILE='/u01/oracle/dbs/test_spfile.ora'
FROM PFILE='/u01/oracle/dbs/test_init.ora';
Spfile总是在服务器端被创建,如果已经存在同名的,该
spfile将被重写。Oracle建议spfile使用默认位置和默认的文件名,这样可以简化管理。比如,startup命令会从默认位置读取spfile。CREATE SPFILE可以在实例启动之前或者之后执行。但是,如果实例已经使用
spfile启动,而你又试图创建同样名称的spfile,这样会产生一个错误。
2.9.4 spfile初始化参数
spfile中的参数包含当前
spfile的名称。当服务器使用默认的spfile启动(startup不使用PFILE子句)时,SPFILE子句被自动包含。
SHOW PARAMETERS SPFILE
语句可以查询spfile的名称。在pfile中同样可以设定SPFILE参数,表明正在使用的spfile。也可以将SPFILE参数设定为一个非默认位置的spfile。不能将pfile文件中的IFILE参数设定为spfile文件名。
2.9.5使用ALTER SYSTEM修改初始化参数
使用
pfile文件时,因为没有一个自动更新pfile文件的机制,因此在使用ALTER SYSTEM修改了参数后,仍然要手工更新
pfile,否则下次启动后,刚修改的参数会失效。而使用spfile则能克服这一点。
在使用ALTER SYSTEM SET修改参数时,可以加入
SCOPE子句,表示参数修改的有效范围。如果没有使用spfile,则将SCOPE设定为BOTH或者SPFILE都是错误的。使用spfile时,默认SCOPE为BOTH,没有使用spfile时,默认SCOPE为MEMORY。COMMENT子句允许对参数进行注释,当SCOPE为spfile和both时,注释被写入spfile中。下面是两个例子:
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=50
COMMENT='temporary change on Nov 29'
SCOPE=MEMORY;
ALTER SYSTEM
SET LOG_ARCHIVE_DEST_4='LOCATION=/u02/oracle/rbdb1/',MANDATORY,'REOPEN=2'
COMMENT='Add new destimation on Nov 29'
SCOPE=SPFILE;
对于值为字符串的参数来说可以通过如下方式将参数恢复为默认值:
ALTER SYSTEM SET parameter = '';
但对于值为数字的参数的来说,必须将该参数设置为默认值。
2.9.6 导出spfile
可以导出一个
spfile来创建一个pfile,这样做的原因有:
1. 创建
spfile的备份
2. 由于诊断的原因,列出所有当前实例正使用的参数
3. 导出第一个
spfile,修改之后重新创建它
导出的文件可以用来启动使用
PFILE选项的实例。
CREATE PFILE
语句用来导出
spfile
。你必须有
SYSDBA
和
SYSOPER
权限来执行这个语句。导出的文件保存在服务器端。下面的例子演示了如何从
spfile创建一个pfile
CREATE PFILE FROM SPFILE;
因为没有指定名字,系统使用默认的名字。下面的例子使用了具体的文件名:
CREATE PFILE='/u01/oracle/dbs/test_init.ora'
FROM SPFILE='/u01/oracle/dbs/test_spfile.ora';
2.9.7 备份spfile
略
2.9.8 spfile的错误与恢复
无论是读还是写
spfile,都可能出现错误,这时有两种选择:
1. 关闭实例,恢复
spfile,启动实例
2. 忽略对参数的读写操作
2.9.10 浏览参数设置
SHOW PARAMETERS 用于查看当前使用的参数值
CREATE PFILE
V$PARAMETER 该视图得到当前有效的参数值
V$PARAMETER2 内容同上,但更方便浏览
V$SPPARAMETER 该视图包含当前
spfile文件的内容,如果没有spfile,返回null