Oracle从新手到高手
上QQ阅读APP看书,第一时间看更新

3.1 设置初始化参数

初始化参数用于设置实例和数据库的特征。通过设置初始化参数,不仅可以定义例程和数据库特征,还可以定义许多其他特征和限制。例如,通过使用初始化参数,可以定义SGA尺寸、设置数据库名称、定义用户和进程限制、定义控制文件、跟踪文件和警告日志的位置等。在Oracle数据库中,初始化参数是存储在参数文件中的,启动实例和打开数据库时都必须提供相应的参数文件。

3.1.1 常用的初始化参数

Oracle提供了200多个初始化参数,并且多数初始化参数都具有默认值。使用Oracle数据库时,只需要根据特定需求设置相应的参数即可,并且多数参数都可以保留默认值。其中,Oracle数据库的一些常用初始化参数的具体描述,如下表所示。

3.1.2 初始化参数文件

传统上,Oracle在启动实例时将读取本地的一个文本文件,并利用从中获取的初始化参数对实例和数据库进行设置,这个文本文件称为“初始化参数文件”(简称为PFILE)。如果要对初始化参数进行修改,必须先关闭数据库,然后在初始化参数文件中进行编辑,并重新启动数据库使修改生效。

从Oracle 8i开始,许多初始化参数都成了动态参数,也就是说可以在数据库运行期间利用ALTER SYSTEM(或ALTER SESSION)语句来修改初始化参数,并且不需要重新启动数据库,修改后即可立即生效。但是使用ALTER SYSTEM语句对初始化参数进行的修改并不能保存在初始化参数文件中。因此,在下一次启动数据库时,Oracle依然会使用初始化参数文件中的参数对实例进行设置。如果要永久性地修改某个初始化参数,数据库管理员必须通过手动方式对初始化参数文件进行编辑,这就为初始化参数的管理带来了困难。

因此,从Oracle 9i开始提供了服务器端初始化参数文件(简称SPFILE)。服务器端初始化参数文件是一个二进制格式的文件,它始终存放在数据库服务器端。这样如果在数据库的任何一个实例中使用ALTER SYSTEM语句对初始化参数进行修改,在默认情况下都会被永久地记录在服务器端初始化参数文件中。这样,当下一次启动数据库时,这些修改会自动继续生效。因此,不必对初始化参数文件进行手动编辑,就能保证在数据库运行过程中对初始化参数的修改不会丢失。

提示:

服务器端初始化参数文件是一个二进制格式文件,尽管能打开它并查看其中的内容,但是任何用户都不应当手工对其中的内容进行编辑,否则实例将无法启动。

在启动数据库时必须提供一个初始化参数文件,因为在启动数据库时,它将按照如下顺序寻找初始化参数文件。

① 首先检查是否使用SPFILE参数,指定了服务器端初始化参数文件。

② 然后再检查是否使用了PFILE参数,指定了文本初始化参数文件。

③ 如果没有使用SPFILE参数和PFILE参数,则在默认位置寻找默认名称的服务器端初始化参数文件。

④ 如果没有找到默认服务器端初始化参数文件,则在默认位置寻找默认名称的文本初始化参数文件。

3.1.3 创建初始化参数文件

如果当前实例正在使用SPFILE,那么使用ALTER SYSTEM命令将无法修改某些初始化参数,如DB_NAME。为了修改这些初始化参数,必须建立PFILE,并且手工修改该PFILE文件的相应参数。可以使用CREATE PFILE命令建立文本参数文件,其语法如下:

     create pfile [='pfile_name'] from spfile [='spfile_name']

其中,PFILE_NAME用于指定PFILE的文件全名;SPFILE_NAME用于指定SPFILE的文件全名,如果不指定PFILE文件名,则会在默认路径下建立默认的PFILE;如果不指定SPFILE文件,则会使用当前实例正在使用的SPFILE文件。需要注意,只有特权用户才能执行CREATE PFILE命令。

因为SPFILE易于管理,并且可以对其进行备份,所以Oracle建议使用SPFILE。使用PFILE修改了某些初始化参数后,为了将PFILE转换为SPFILE,可以使用CREATE SPFILE命令建立服务器参数文件,语法如下。

     create spfile [='spfile_name'] from pfile [='pfile_name']

其中,SPFILE_NAME用于指定SPFILE文件全名;PFILE_NAME用于指定PFILE文件全名,如果不指定SPFILE文件名,则会在默认路径下建立SPFILE;如果不指定PFILE文件名,则使用默认的PFILE文件。需要注意,只有特权用户才能执行CREATE SPFILE命令。

提示:

在执行CREATE SPFILE命令时不需要启动实例,如果已经启动了实例,并且实例已经使用了一个服务器端初始化参数文件,则新建的服务器端初始化参数文件不能覆盖正在使用的那个文件。

启动实例时,既可以使用PFILE,也可以使用SPFILE。当实例处于运行状态时,如果要确定实例使用的参数文件类型,首先应以特权用户登录,然后显示初始化参数SPFILE的值。例如:

如果VALUE存在返回值,则表示实例正在使用SPFILE;如果VALUE没有任何返回结果,则表示实例正在使用PFILE。

3.1.4 显示和设置初始化参数文件

为了在SQL*Plus中显示初始化参数,可以使用SHOW PARAMETER命令。该命令会显示初始化参数的名称、类型和参数值。

为了显示所有初始化参数的位置,可以直接执行SHOW PARAMETER命令。例如:

SHOW PARAMETER命令也可以显示特定的初始化参数。为了显示特定初始化参数的名称、类型和参数值,可以在SHOW PARAMETER命令后指定参数名。例如:

当使用SHOW PARAMETER命令显示初始化参数信息时,只能显示参数名、类型和参数值,为了取得初始化参数的详细信息,应该查询动态性能视图V$PARAMETER。例如:

ISSES_MODIFIABLE用于标识初始化参数是否可以使用ALTER SESSION命令进行修改,当取值为TRUE时表示可以修改;取值为FALSE则表示不可以修改。iSSYS_MODIFIABLE用于标识初始化参数是否可以使用ALTER SYSTEM命令进行修改,取值IMMEDIATE时表示可以直接修改;取值为DEFERRED时表示需要使用带有DEFERRED的选项进行修改;取值为FALSE时表示不能进行修改。ISMODIFIED用于标识该初始化参数是否已经被修改,取值为MODIFIED时表示使用ALTER SESSION进行了修改;SYSTEM_MOD表示使用ALTER SYSTEM命令进行了修改;FALSE表示未进行修改。

静态参数是指只能通过修改参数文件而改变的初始化参数:动态参数是指在数据库运行时可以使用ALTER SESSION或ALTER SYSTEM命令动态改变的初始化参数。下面的命令将显示系统的静态参数。

动态参数是指在数据库运行过程中,可以动态修改的初始化参数。修改动态参数可以使用ALTER SESSION命令,也可以使用ALTER SYSTEM命令。这两者之间的区别:ALTER SESSION是对会话的设置,会话结束后就失效了;ALTER SYSTEM修改的是数据库系统的配置,是全局性质。

在使用ALTER SYSTEM语句时,可以在SET子句中通过SCOPE选项来设置ALTER SYSTEM语句的影响范围。所谓“影响范围”,也就是ALTER SYSTEM语句对参数的修改是仅对当前实例有效的,还是永久有效的。

SCOPE选项的取值如下:

※ scope=memory:对参数的修改仅记录在内存中。对于动态初始化参数,更改将立即生效,并且由于修改不会记录在服务器端初始化参数文件中,在下次启动数据库时,仍然会使用修改前的参数设置。对于静态参数,则不能使用该选项。

※ scope=spfile:对参数的修改仅记录在服务器端初始化参数文件中。该选项同时适用于动态参数与静态参数。修改后的参数只有在下一次启动数据库时,更改后才会生效。

※ scope=both:对参数的修改将同时记录在内存和服务器端初始化参数文件中。对于动态初始化参数,在更改后将立即生效,并且在下一次启动数据库时,将使用修改后的参数设置。对于静态参数,则不能使用这个选项值。在执行ALTER SYSTEM命令时,Oracle默认将SCOPE选项设置为BOTH。

提示:

在修改静态初始化参数时,只能将SCOPE选项设置为SPFILE。

在修改动态初始化参数时,还可以指定DEFERRED关键字,这样对参数所做的修改将延迟到新的会话产生时才生效。如果数据库没有使用服务器端初始化参数文件,在ALTER SYSTEM语句中将SCOPE选项设置为SPFILE或BOTH将会产生错误。

例如,利用下面的语句,对动态初始化参数LOG_CHECKPOINT_INTERVAL进行修改,修改结果不仅在当前实例中有效,而且还将记录在服务器端初始化参数文件中。

      SQL> alter system set log_checkpoint_interval=50;
      系统已更改。

如果要修改静态参数,则必须将SCOPE选项设置为SPFILE。例如,修改静态初始化参数DB_FILES。