传统上,Oracle数据库的初始化参数存储在文本初始化参数文件中。为了更好的可管理性,您可以选择在二进制服务器参数文件中维护初始化参数,该文件在数据库启动和关闭期间保持不变。本节介绍服务器参数文件,并介绍如何使用任何一种存储参数的方法来管理初始化参数。
- 什么是服务器参数文件?
- 迁移到服务器参数文件
- 创建服务器参数文件
- SPFILE初始化参数
- 更改初始化参数值
- 清除初始化参数值
- 导出服务器参数文件
- 备份服务器参数文件
- 恢复丢失或损坏的服务器参数文件
- 查看参数设置
什么是服务器参数文件?
服务器参数文件最初是使用CREATE SPFILE语句从文本初始化参数文件构建的。 (它也可以由数据库配置助手直接创建。)服务器参数文件是无法使用文本编辑器编辑的二进制文件。 Oracle数据库提供其他界面,用于查看和修改服务器参数文件中的参数设置。
虽然可以使用文本编辑器打开二进制服务器参数文件并查看其文本,但不要手动编辑它。这样做会损坏文件。将无法启动实例,如果实例正在运行,则可能会失败。
当发出没有PFILE子句的STARTUP命令时,Oracle实例将搜索操作系统特定的默认位置,以查找从中读取初始化参数设置的服务器参数文件。如果找不到服务器参数文件,则实例将搜索文本初始化参数文件。如果服务器参数文件存在但您想用文本初始化参数文件中的设置覆盖它,则必须在发出STARTUP命令时指定PFILE子句。
迁移到服务器参数文件
如果当前正在使用文本初始化参数文件(PFILE),请使用以下步骤迁移到服务器参数文件(SPFILE)。
1、如果初始化参数文件位于客户端系统上,则将文件(例如FTP)从客户端系统传输到服务器系统。
2、使用CREATE SPFILE FROM PFILE语句在默认位置创建一个服务器参数文件。
3、启动或重新启动实例
该实例在默认位置找到新的SPFILE并启动它
创建服务器参数文件
使用CREATE SPFILE语句来创建服务器参数文件。必须具有SYSDBA或SYSOPER系统特权才能执行此语句。
当使用数据库配置助手创建数据库时,它会自动创建一个服务器参数文件。
CREATE SPFILE语句可以在实例启动之前或之后执行。但是,如果实例已使用服务器参数文件启动,则如果尝试重新创建实例当前正在使用的服务器参数文件,则会引发错误。
可以从现有文本初始化参数文件或内存创建服务器参数文件(SPFILE)。从内存创建SPFILE意味着将正在运行的实例中的初始化参数的当前值复制到SPFILE。
以下示例从文本初始化参数文件/u01/oracle/dbs/init.ora创建服务器参数文件,在这个例子中,没有指定SPFILE名称,所以文件是用特定于平台的默认名称和位置创建的(https://docs.oracle.com/cd/E11882_01/server.112/e25494/create.htm#CIAJEBBI):
CREATE SPFILE FROM PFILE='/u01/oracle/dbs/init.ora';
下一个示例说明了如何创建服务器参数文件并提供名称和位置:
CREATE SPFILE='/u01/oracle/dbs/test_spfile.ora' FROM PFILE='/u01/oracle/dbs/test_init.ora';
下一个示例说明如何根据内存中初始化参数的当前值在默认位置创建服务器参数文件:
CREATE SPFILE FROM MEMORY;
无论使用默认的SPFILE名称和默认位置,还是指定SPFILE名称和位置,如果位置中已存在同名的SPFILE,它将被覆盖而不会显示警告消息
从文本初始化参数文件创建SPFILE时,与初始化参数文件中的参数设置在同一行中指定的注释将保留在SPFILE中。所有其他注释被忽略。
Oracle建议允许数据库为SPFILE指定默认名称并将其存储在默认位置。这简化了数据库的管理。例如,STARTUP命令假定这个默认位置读取SPFILE。
Table 2-3 PFILE and SPFILE Default Names and Locations on UNIX, LInux, and Windows
Platform | PFILE Default Name | SPFILE Default Name | PFILE Default Location | SPFILE Default Location |
UNIX and Linux | initORACLE_SID.ora | spfileORACLE_SID.ora | $ORACLE_HOME/dbs或与数据文件相同位置 |
没有使用ASM: $ORACLE_HOME/dbs或与数据文件相同位置 使用ASM: 与数据文件在同一个磁盘组中 |
Windows | initORACLE_SID.ora | spfileORACLE_SID.ora | $ORACLE_HOME/database |
没有使用ASM: $ORACLE_HOME/database 使用ASM: 与数据文件在同一个磁盘组中 |
启动时,实例首先搜索名为spfileORACLE_SID.ora的SPFILE,如果未找到,则搜索spfile.ora。使用spfile.ora可以使所有Real Application Cluster(Oracle RAC)实例使用相同的服务器参数文件。 如果两个SPFILE都未找到,则该实例将搜索文本初始化参数文件initORACLE_SID.ora
如果在默认位置以外的位置创建SPFILE,则必须在默认的PFILE位置创建一个指向服务器参数文件的“stub”PFILE。有关更多信息,请参阅“https://docs.oracle.com/cd/E11882_01/server.112/e25494/start.htm#i1006133”。
当存在Oracle ASM时使用DBCA创建数据库时,DBCA将SPFILE置于Oracle ASM磁盘组中,并且还会导致创建此stub PFILE。
SPFILE初始化参数
SPFILE初始化参数包含当前服务器参数文件的名称。当数据库使用默认的服务器参数文件时,即发出STARTUP命令并且不指定PFILE参数 - SPFILE的值由服务器在内部设置。 SQL * Plus命令SHOW PARAMETERS SPFILE(或任何其他查询参数值的方法)显示当前正在使用的服务器参数文件的名称
更改初始化参数值
两种初始化参数:
- 动态初始化参数:可以针对当前的Oracle数据库实例进行更改。这些更改立即生效
- 静态初始化参数:不能为当前实例更改。您必须在文本初始化文件或服务器参数文件中更改这些参数,然后在更改生效之前重新启动数据库。
设置或更改初始化参数值
使用ALTER SYSTEM语句的SET子句来设置或更改初始化参数值。可选的SCOPE子句按照下表中的描述来指定更改的范围:
SCOPE Clause | Description |
SCOPE = SPFILE |
该更改仅适用于服务器参数文件。效果如下:
这是静态参数允许的唯一SCOPE规范。 |
SCOPE = MEMORY |
该更改仅在内存中应用。效果如下:
对于静态参数,该规范是不允许的。 |
SCOPE = BOTH |
该更改将应用于服务器参数文件和内存中。效果如下:
对于静态参数,这个规范是不允许的。 |
如果实例未启动服务器参数文件,则指定SCOPE = SPFILE或SCOPE = BOTH是错误的。如果使用服务器参数文件启动实例,则默认值为SCOPE = BOTH;如果使用文本初始化参数文件(PFILE)启动实例,则默认值为MEMORY。
对于动态参数,还可以指定DEFERRED关键字。指定时,更改仅对未来会话有效。
当将SCOPE指定为SPFILE或BOTH时,可选的COMMENT子句可让将文本字符串与参数更新相关联。注释被写入服务器参数文件。
以下语句更改连接被删除之前失败的登录尝试的最大次数。它包含注释,并明确指出只能在服务器参数文件中进行更改。
ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=3 COMMENT='Reduce from 10 for tighter security.' SCOPE=SPFILE;
下一个示例设置了一个复杂的初始化参数,其中包含属性列表。具体来说,被设置的参数值是LOG_ARCHIVE_DEST_n初始化参数。此声明可以更改此参数的现有设置或创建新的归档目标。
ALTER SYSTEM SET LOG_ARCHIVE_DEST_4='LOCATION=/u02/oracle/rbdb1/',MANDATORY,'REOPEN=2' COMMENT='Add new destination on Nov 29' SCOPE=SPFILE;
当一个值由一系列参数组成时,您不能通过位置或序号编辑单个属性。每次更新参数时都必须指定完整的值列表,并且新列表完全替换旧列表。
清除初始化参数值
可以使用ALTER SYSTEM RESET命令清除(删除)用于启动实例的SPFILE中的任何初始化参数的设置。 SCOPE = MEMORY和SCOPE = BOTH都不允许。 SCOPE = SPFILE子句不是必需的,但可以包含。
可能需要清除SPFILE中的参数,以便在下次数据库启动时使用默认值。
导出服务器参数文件
可以使用CREATE PFILE语句将服务器参数文件(SPFILE)导出到文本初始化参数文件。这样做可能有以下几个原因:
- 出于诊断目的,列出当前实例使用的所有参数值。这类似于SQL * Plus SHOW PARAMETERS命令或从V $ PARAMETER或V $ PARAMETER2视图中选择。
- 要修改&spfile;服务器参数文件,首先要导出它,编辑生成的文本文件,然后使用CREATE SPFILE语句重新创建它
导出的文件也可以用来使用PFILE子句启动实例。
必须具有SYSDBA或SYSOPER系统特权才能执行CREATE PFILE语句。导出的文件在数据库服务器系统上创建。它包含与参数相关的任何注释,与参数设置位于同一行。
以下示例从SPFILE创建一个文本初始化参数文件:
CREATE PFILE FROM SPFILE;
由于没有为文件指定名称,因此数据库将创建一个具有平台特定名称的初始化参数文件,并且该文件是从特定于平台的默认服务器参数文件创建的。
以下示例从服务器参数文件创建一个文本初始化参数文件,但在本例中指定了这些文件的名称:
CREATE PFILE='/u01/oracle/dbs/test_init.ora' FROM SPFILE='/u01/oracle/dbs/test_spfile.ora';
另一种方法是根据内存中初始化参数的当前值创建一个PFILE。以下是所需命令的示例:
CREATE PFILE='/u01/oracle/dbs/test_init.ora' FROM MEMORY;
备份服务器参数文件
可以通过导出服务器参数文件(SPFILE)来创建备份,如“导出服务器参数文件”中所述。如果数据库的备份和恢复策略是使用Recovery Manager(RMAN)实施的,那么可以使用RMAN创建SPFILE的备份。备份数据库时,SPFILE由RMAN自动备份,但RMAN还可以专门创建当前活动SPFILE的备份。
恢复丢失或损坏的服务器参数文件
如果您的服务器参数文件(SPFILE)丢失或损坏,则当前实例可能会失败,或者下次尝试启动数据库实例可能会失败。有几种方法可以恢复SPFILE:
1、如果实例正在运行,请发出以下命令以从内存中的初始化参数的当前值重新创建SPFILE
CREATE SPFILE FROM MEMORY;
该命令使用默认名称和默认位置创建SPFILE。您也可以用新名称或指定位置创建SPFILE。有关示例,请参阅“创建服务器参数文件”。
2、如果您有一个有效的文本初始化参数文件(PFILE),请使用以下命令从PFILE重新创建SPFILE
CREATE SPFILE FROM PFILE;
该命令假定PFILE处于默认位置并具有默认名称。当PFILE不在缺省位置或非默认名称时,请参阅“创建服务器参数文件”以获取要使用的命令语法。
3、从备份中恢复SPFILE
有关更多信息,请参阅“备份服务器参数文件”
4、如果以上的方法都不可行,请执行以下步骤:
- 从警报日志中的参数值列表中创建一个文本初始化参数文件(PFILE):当实例启动时,用于启动的初始化参数将写入警报日志。您可以将警报日志的文本版本(不带XML标签)复制并粘贴到新的PFILE中。参阅:https://docs.oracle.com/cd/E11882_01/server.112/e25494/diag.htm#CHDGCEIH
- 从PFILE创建SPFILE
在参数更新期间读取/写入错误
如果在参数更新期间读取或写入服务器参数文件时发生错误,则会在警报日志中报告错误,并忽略服务器参数文件的所有后续参数更新。此时,您可以执行以下操作之一:
- 关闭实例,恢复服务器参数文件并在本节前面介绍,然后重新启动实例。
- 如果不关心后续参数更新不会持久,则继续运行数据库。
查看参数设置
可以通过多种方式查看参数设置,如下表所示:
Method | Description |
SHOW PARAMETERS | 此SQL * Plus命令显示当前会话有效的初始化参数的值。 |
SHOW SPPARAMETERS | 此SQL * Plus命令在服务器参数文件(SPFILE)中显示初始化参数的值。 |
CREATE PFILE | 此SQL语句根据SPFILE或当前的内存设置创建文本初始化参数文件(PFILE)。然后您可以使用任何文本编辑器查看PFILE。 |
V$PARAMETER | 该视图显示当前会话有效的初始化参数的值。 |
V$PARAMETER2 | 该视图显示当前会话有效的初始化参数的值。在此视图中区分列表参数值更容易,因为每个列表参数值都显示在单独的行中。 |
V$SYSTEM_PARAMETER | 该视图显示实例中有效的初始化参数的值。新会话从实例范围的值继承参数值。 |
V$SYSTEM_PARAMETER2 | 该视图显示实例中有效的初始化参数的值。新会话从实例范围的值继承参数值。在此视图中区分列表参数值更容易,因为每个列表参数值都显示在单独的行中。 |
V$SPPARAMETER | 该视图显示SPFILE的当前内容。如果SPFILE未被实例使用,则该视图在ISSPECIFIED列中返回FALSE值。 |
参考资料
https://docs.oracle.com/cd/E11882_01/server.112/e25494/create.htm#ADMIN00202