SPFILE的使用

 简介:
本文是关于Oracle9i spfile的一篇文字,这是Oracle9i的一个新特性,虽然是很小的一个改进,但是却体现了Oracle在安全性和可靠性上的一个提高,
通过rman备份或者控制文件的自动备份,Oracle把spfile纳入到整个备份恢复体系当中。
本文对spfile的使用和修改等作了详细描述,对于其备份恢复也给出了相应的例子,希望大家能够从这篇文章中受益,从Oracle的这个新特性中获得收益。

在Oracle9i中,一个新的文件被引入-spfile,spfile用于服务器端,管理初始化参数。

在9i以前,Oracle使用pfile存储初始化参数设置,这些参数在实例启动时被读取,任何修改需要重起实例才能生效,使用spfile你可以使用ALTER SYSTEM
或者ALTER SESSION来动态修改那些可动态修改的参数,所有更改可以立即生效,你可以选择使更改只应用于当前实例还是同时应用到spfile。这就使
得所有对spfile的修改都可以在命令行完成,我们可以彻底告别手工修改初始化参数文件,这就大大减少了人为错误的发生。

SPFILE是一个二进制文件,可以使用RMAN进行备份,这样实际上Oracle把参数文件也纳入了备份恢复管理。

除了第一次启动数据库需要PFILE(然后可以根据PFILE创建SPFILE),我们可以不再需要PFILE,ORACLE强烈推荐使用spfile,应用其新特性来存储和
维护初始化参数设置。

一. 创建SPFILE

缺省的,ORACLE使用PFILE启动数据库,SPFILE必须由PFILE创建,新创建的SPFILE在下一次启动数据库时生效,CREATE SPFILE需要SYSDBA或者
SYSOPER的权限:
语法如下:

CREATE  SPFILE [ ='SPFILE-NAME' ]   FROM  PFILE [ ='PFILE-NAME' ]

 

例:

 

SQL >   create  spfile  from  pfile;

 

缺省的,spfile创建到系统缺省目录
(Unix: $ORACLE_HOME/dbs; NT: $ORACLE_HOME/database)

如果SPFILE已经存在,那么创建会返回以下错误:

 

SQL >   create  spfile  from  pfile;
create  spfile  from  pfile
*
ERROR 位于第 
1  行:
ORA
- 32002 : 无法创建已由例程使用的 SPFILE

 

这也可以用来判断当前是否使用了SPFILE文件。
然而意外的时,Oracle并没有向其他文件一样,在运行期间保持锁定,让我们作以下试验:

SQL >  host rename SPFILEEYGLEN.ORA SPFILEEYGLEN.ORA.BAK

SQL
>   alter  system  set  db_cache_size = 24M scope = both;
系统已更改。
SQL
>  host dir  * .ora
驱动器 E 中的卷是 Doc
卷的序列号是 980C
- 8EFF

E:OracleOra9iR2
database  的目录

2003 - 02 - 10   14 : 35   2 , 048  PWDeyglen.ORA
1  个文件  2 , 048  字节
0  个目录  150 , 347 , 776  可用字节

SQL
>   alter  system  set  db_cache_size = 24M scope = spfile;
alter  system  set  db_cache_size = 24M scope = spfile
*
ERROR 位于第 
1  行:
ORA
- 27041 : 无法打开文件
OSD
- 04002 : 无法打开文件
O
/ S - Error: (OS  2 ) 系统找不到指定的文件。

SQL
>  host rename SPFILEEYGLEN.ORA.BAK SPFILEEYGLEN.ORA

SQL
>   alter  system  set  db_cache_size = 24M scope = spfile;
系统已更改。
SQL
>

 

估计Oracle以后会想办法来锁定这个文件。

 

二. 使用SPFILE

重新启动数据库,使用startup命令,Oralce将会按照以下顺序在缺省目录中搜索参数文件:


a. spfile${ORACLE_SID}.ora

缺省目录
UNIX: ${ORACLE_HOME}/dbs/
NT: ${ORACLE_HOME}/database


b. spfile.ora

缺省目录
UNIX: ${ORACLE_HOME}/dbs/
NT: ${ORACLE_HOME}/database


c. init${ORACLESID}.ora

缺省目录
UNIX: ${ORACLE_HOME}/dbs/
NT: ${ORACLE_HOME}/database or
${ORACLE_HOME}/admin/db_name/pfile/


创建了spfile,重新启动数据库,Oracle会按顺序搜索以上目录,spfile就会自动生效。

三. 使用pfile/spfile启动数据库


如果你想使用pfile启动数据库,你可以在启动时指定pfile或者删除spfile.

 

SQL >  startup pfile = ' E:Oracleadmineyglenpfileinit.ora ' ;

 

你不能以同样的方式指定spfile,但是可以创建一个包含spfile参数的pfile文件,指向spfile.
SPFILE是一个自Oracle9i引入的初始化参数,类似于IFILE参数。 SPFILE参数用于定义非缺省路径的spfile文件。
你可以在PFILE链接到SPFILE文件,同时在PFILE中定义其他参数,如果参数重复设置,后读取的参数将取代先前的设置。
PFILE参数的使用,例如:
这是我们使用SPFILE启动的情况

SQL >  startup
ORACLE 例程已经启动。

Total System Global Area  
135338868  bytes
Fixed Size                   
453492  bytes
Variable Size             
109051904  bytes
Database  Buffers            25165824  bytes
Redo Buffers                 
667648  bytes
数据库装载完毕。
数据库已经打开。
SQL
>  show parameter log_archive_start

NAME                                 TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
log_archive_start                    boolean
TRUE
SQL
>  show parameter spfile

NAME                                 TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
spfile                               string
% ORACLE_HOME % DATABASE SPFILE %
ORACLE_SID
% .ORA
SQL
>

 

我们修改PFILE文件内容如下:

#Pfile link  to  SPFILE
SPFILE
=   ' E:OracleOra9iR2databaseSPFILEEYGLEN.ORA '
log_archive_start 
=  false

 

可以预见这个log_archive_start参数设置将会代替SPFILE中的设置:

 

SQL >  startup  pfile = ' e:initeyglen.ora '
ORACLE 例程已经启动。

Total System Global Area  
135338868  bytes
Fixed Size                   
453492  bytes
Variable Size             
109051904  bytes
Database  Buffers            25165824  bytes
Redo Buffers                 
667648  bytes
数据库装载完毕。
数据库已经打开。
SQL
>  show parameter spfile

NAME                                 TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
spfile                               string
E:OracleOra9iR2
database SPF
ILEEYGLEN.ORA
SQL
>  show parameter log_archive_start

NAME                                 TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
log_archive_start                    boolean
FALSE

 

然后我们可以使用ALTER SYSTEM方式将修改固定到SPFILE.

 

SQL >   alter  system  set  log_archive_start = false scope = spfile;

系统已更改。

 

所以你也可以通过如上方式在启动时修改初始化参数。比我们在本文最后介绍的导入导出方法要简便的多。

 

四. 修改参数

可以通过ALTER SYSTEM或者导入导出来更改SPFILE的内容。
ALTER SYSTEM增加了一个新选项:SCOPE。SCOPE参数有三个可选值:MEMORY ,SPFILE , BOTH
MEMORY:只改变当前实例运行
SPFILE:只改变SPFILE的设置
BOTH:改变实例及SPFILE


1. SCOPE=MEMORY

SQL >  show parameter timed_statistics

NAME                                 TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
timed_statistics                     boolean
TRUE
SQL
>   ALTER  SYSTEM  SET  timed_statistics = FALSE SCOPE = MEMORY;

系统已更改。

SQL
>  show parameter timed_statistics

NAME                                 TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
timed_statistics                     boolean
FALSE
SQL
>   shutdown  immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL
>  startup
ORACLE 例程已经启动。

Total System Global Area  
135338868  bytes
Fixed Size                   
453492  bytes
Variable Size             
109051904  bytes
Database  Buffers            25165824  bytes
Redo Buffers                 
667648  bytes
数据库装载完毕。
数据库已经打开。
SQL
>  show parameter timed_statistics

NAME                                 TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
timed_statistics                     boolean
TRUE

 

2. SCOPE=SPFILE

 

SQL >  show parameter timed_statistics

NAME                                 TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
timed_statistics                     boolean
TRUE
SQL
>   ALTER  SYSTEM  SET  timed_statistics = FALSE SCOPE = SPFILE;

系统已更改。

SQL
>  show parameter timed_statistics

NAME                                 TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
timed_statistics                     boolean
TRUE
SQL
>   shutdown  immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL
>  startup
ORACLE 例程已经启动。

Total System Global Area  
135338868  bytes
Fixed Size                   
453492  bytes
Variable Size             
109051904  bytes
Database  Buffers            25165824  bytes
Redo Buffers                 
667648  bytes
数据库装载完毕。
数据库已经打开。
SQL
>  show parameter timed_statistics

NAME                                 TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
timed_statistics                     boolean
FALSE
SQL
>

 

3. SCOPE = BOTH
使用BOTH选项实际上等同于不带参数的ALTER SYSTEM语句。
注意:如果修改静态参数,那么需要指定SPFILE参数,否则将会报错。

 

SQL >  show parameter timed_statistics
NAME                                 TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
timed_statistics                     boolean
FALSE
SQL
>   ALTER  SYSTEM  SET  timed_statistics = TRUE SCOPE = BOTH;
系统已更改。
SQL
>  show parameter timed_statistics
NAME                                 TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
timed_statistics                     boolean
TRUE
SQL
>   shutdown  immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL
>  startup
ORACLE 例程已经启动。

Total System Global Area  
135338868  bytes
Fixed Size                   
453492  bytes
Variable Size             
109051904  bytes
Database  Buffers            25165824  bytes
Redo Buffers                 
667648  bytes
数据库装载完毕。
数据库已经打开。
SQL
>  show parameter timed_statistics
NAME                                 TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
timed_statistics                     boolean
TRUE
SQL
>   ALTER  SYSTEM  SET  sql_trace = FALSE SCOPE = BOTH;
ALTER  SYSTEM  SET  sql_trace = FALSE SCOPE = BOTH
                 
*
ERROR 位于第 
1  行:
ORA
- 02095 : 无法修改指定的初始化参数
SQL
>   ALTER  SYSTEM  SET  sql_trace = FALSE SCOPE = SPFILE;
系统已更改。

 

4.你也可以在数据库shutdown时创建和修改spfile,例如:

 

SQL >  show sga

Total System Global Area  
135338868  bytes
Fixed Size                   
453492  bytes
Variable Size             
109051904  bytes
Database  Buffers            25165824  bytes
Redo Buffers                 
667648  bytes
SQL
>   shutdown  immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL
>   create  pfile  from  spfile;
文件已创建。
SQL
>   create  spfile  from  pfile;
文件已创建。
SQL
>

 

所以spfile的修改是相当容易的.

五. 是否使用了spfile

判断是否使用了SPFILE,可以使用以下方法:
1.查询v$parameter动态视图,如果以下查询返回空值,那么你在使用pfile.

 

SQL >   SELECT  name,value  FROM  v$parameter  WHERE  name = ' spfile ' ;

NAME
-- ----------------------------------------------------------------
VALUE
-- ----------------------------------------------------------------
spfile
% ORACLE_HOME % DATABASE SPFILE % ORACLE_SID % .ORA

 

2.或者你可以使用SHOW命令来显示参数设置,如果以下结果value列返回空值,那么说明你在使用pfile:

 

SQL >  SHOW PARAMETER spfile

NAME TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
spfile string
% ORACLE_HOME % DATABASE SPFILE %
ORACLE_SID
% .ORA

 

3.查询v$spparameter视图
如果以下查询返回0值,表示你在使用pfile,否则表明你使用的是spfile:

 

SQL >   SELECT   COUNT ( * FROM  v$spparameter  WHERE  value  IS   NOT   NULL ;
                  
COUNT ( * )
                  
-- --------
                   32     

 

或者使用以下查询,如果true值返回非0值,那么说明我们使用的是spfile.

 

SQL >   select  isspecified,  count ( * from  v$spparameter  group
2   by  isspecified;

ISSPECIFIED 
COUNT ( * )
-- ---------- ----------
FALSE  226
TRUE 
33

 

更为直接的:

 

SQL >   select  decode( count ( * ),  1 ' spfile ' ' pfile '  ) USED
2   from  v$spparameter
3   where  rownum = 1   and  isspecified = ' TRUE '
4   /

USED
-- ----------
spfile

 

六. SPFILE的备份与恢复


在本文开篇我们提到,Oracle把Spfile也纳入到Rman的备份恢复策略当中,如果你配置了控制文件自动备份(autoback),那么Oracle会
在数据库发生重大变化(如增减表空间)时自动进行控制文件及Spfile文件的备份。

下面我们来看一下这个过程:
a. 设置控制文件自动备份:

[ oracle@jumper oracle ] $ rman target  /

Recovery Manager: Release 
9.2 . 0.3 . 0   -  Production

Copyright (c) 
1995 2002 , Oracle Corporation.  All  rights reserved.

connected 
to  target  database : HSJF (DBID = 1052178311 )

RMAN
>  CONFIGURE CONTROLFILE AUTOBACKUP  ON ;

using target 
database  controlfile instead  of  recovery catalog
old RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP 
OFF ;
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP 
ON ;
new RMAN configuration parameters are successfully stored

RMAN
>   exit

这个设置可以在数据库中通过如下方式查询得到:

 

[ oracle@jumper bdump ] $ sqlplus " /   as  sysdba"

SQL
* Plus: Release  9.2 . 0.3 . 0   -  Production  on  Sat Jan  17   01 : 08 : 05   2004

Copyright (c) 
1982 2002 , Oracle Corporation.  All  rights reserved.


Connected 
to :
Oracle9i Enterprise Edition Release 
9.2 . 0.3 . 0   -  Production
With  the Partitioning, OLAP  and  Oracle Data Mining options
JServer Release 
9.2 . 0.3 . 0   -  Production

SQL
>   select   *   from  v$rman_configuration;
CONF# NAME VALUE
-- -------- ------------------------- ----------
1  CONTROLFILE AUTOBACKUP  ON

 

b. 记录数据库变化

 

SQL >   create  tablespace eygle 
2  datafile  ' /data1/oracle/oradata/eygle01.dbf '
3  size 5M;

Tablespace created.

 

如果新创建一个表空间,这时候检查alert.log文件,你可以在其中发现这样的备份信息:

Sat Jan 17 00:55:57 2004
Starting control autobackup
Control autobackup written to DISK device
handle '/opt/oracle/product/9.2.0/dbs/c-1052178311-20040117-00'
Completed: create tablespace eygle
datafile '/data1/oracle/oradata/eygle01.dbf’

 

如果使用rman进行备份,在提示中你可以看到如下信息:

 

RMAN >  configure controlfile autobackup  on ;

old RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP 
OFF ;
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP 
ON ;
new RMAN configuration parameters are successfully stored

RMAN
>  run
2 >  {
3 >  allocate channel ch1 type  disk  format = ' e:oracleorabakpenny%t.arc ' ;
4 >   backup  archivelog  all   delete   all  input;
5 >  release channel ch1;
6 >  }

allocated channel: ch1
channel ch1: sid
= 13  devtype = DISK

Starting 
backup  at  02 - DEC - 03
current   log  archived
channel ch1: starting archive 
log  backupset
channel ch1: specifying archive 
log (s)  in   backup   set
input archive 
log  thread = 1  sequence = 63  recid = 168  stamp = 511712617
input archive 
log  thread = 1  sequence = 64  recid = 169  stamp = 511712620
input archive 
log  thread = 1  sequence = 65  recid = 170  stamp = 511712626
input archive 
log  thread = 1  sequence = 66  recid = 171  stamp = 511712690
channel ch1: starting piece 
1  at  02 - DEC - 03
channel ch1: finished piece 
1  at  02 - DEC - 03
piece handle
= E:ORACLEORABAKPENNY511712693.ARC comment = NONE
channel ch1: 
backup   set  complete, elapsed time:  00 : 00 : 03
channel ch1: deleting archive 
log (s)
archive 
log  filename = E:ORACLEORADATAPENNYARCHIVE_ 63 .DBF recid = 168  stamp = 511712617
archive 
log  filename = E:ORACLEORADATAPENNYARCHIVE_ 64 .DBF recid = 169  stamp = 511712620
archive 
log  filename = E:ORACLEORADATAPENNYARCHIVE_ 65 .DBF recid = 170  stamp = 511712626
archive 
log  filename = E:ORACLEORADATAPENNYARCHIVE_ 66 .DBF recid = 171  stamp = 511712690
Finished 
backup  at  02 - DEC - 03

Starting Control 
File   and  SPFILE Autobackup at  02 - DEC - 03
piece handle
= E:ORACLEORA92 DATABASE C - 3627775766 - 20031202 - 01  comment = NONE
Finished Control 
File   and  SPFILE Autobackup at  02 - DEC - 03

released channel: ch1

 

我们简单看一下自动备份的控制文件及spfile文件的格式及命名规则:
c-IIIIIIIIII-YYYYMMDD-QQ
c ------------------------控制文件
IIIIIIIIII---------DBID
YYYYMMDD------------时间戳
QQ----------------------序号00-FF,16进制表示

 

c. 使用自动备份恢复spfile文件

 

[ oracle@jumper bdump ] $ rman target  /

Recovery Manager: Release 
9.2 . 0.3 . 0   -  Production

Copyright (c) 
1995 2002 , Oracle Corporation.  All  rights reserved.

connected 
to  target  database : HSJF (DBID = 1052178311 )

RMAN
>   restore  spfile  to   ' /tmp/spfileeygle.ora '   from  autobackup;

Starting 
restore  at  17 - JAN - 04

using target 
database  controlfile instead  of  recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid
= 18  devtype = DISK
channel ORA_DISK_1: looking 
for  autobackup  on   day 20040117
channel ORA_DISK_1: autobackup found: c
- 1052178311 - 20040117 - 01
channel ORA_DISK_1: SPFILE 
restore   from  autobackup complete
Finished 
restore  at  17 - JAN - 04

RMAN
>   exit


Recovery Manager complete.
[ oracle@jumper bdump ] $ ls  - / tmp / spfileeygle.ora
- rw - r -- --- 1 oracle dba 3584 1月 17 09:34 /tmp/spfileeygle.ora

 

你同样可以通过这种方法恢复控制文件,示例如下:

 

[ oracle@jumper bdump ] $ rman target  /

Recovery Manager: Release 
9.2 . 0.3 . 0   -  Production

Copyright (c) 
1995 2002 , Oracle Corporation.  All  rights reserved.

connected 
to  target  database : HSJF (DBID = 1052178311 )

RMAN
>   restore  controlfile  to   ' /tmp/control01.ctl '   from  autobackup;

Starting 
restore  at  17 - JAN - 04

using target 
database  controlfile instead  of  recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid
= 10  devtype = DISK
channel ORA_DISK_1: looking 
for  autobackup  on   day 20040117
channel ORA_DISK_1: autobackup found: c
- 1052178311 - 20040117 - 02
channel ORA_DISK_1: controlfile 
restore   from  autobackup complete
Finished 
restore  at  17 - JAN - 04

RMAN
>   exit


Recovery Manager complete.
[ oracle@jumper bdump ] $ ls  - / tmp / control *
- rw - r -- --- 1 oracle dba 1892352 1月 17 09:44 /tmp/control01.ctl

 

Oracle9i自动备份控制文件的功能给我们带来了极大的收益,通过自动备份,在数据库出现紧急状况的时候,你可能可以从这个自动备份中获得更
为有效及时的控制文件.

缺省的,这个自动备份功能是关闭的,你可以用我们上面提到的方法打开该功能.

七. 设置Events事件


Events事件是Oracle的重要诊断工具及问题解决办法,很多时候需要通过Events设置来屏蔽或者更改Oracle的行为,下面我们来看一下怎样修改spfile,增加Events事件设置

 

SQL >   alter  system  set  event = ' 10841 trace name context forever '  scope = spfile;

System altered.

SQL
>  startup force;
ORACLE instance started.

Total System Global Area 
101782380  bytes
Fixed Size 
451436  bytes
Variable Size 
75497472  bytes
Database  Buffers  25165824  bytes
Redo Buffers 
667648  bytes
Database  mounted.
Database  opened.
SQL
>  show parameter event

NAME TYPE VALUE
-- ---------------------------------- ----------- ------------------------------
event string  10841  trace name context forever

 

顺便提一句,10841事件是用于解决Oracle9i中JDBC Thin Driver问题的一个方法,如果你的alert.log文件中出现以下错误提示:

 

Wed Jan  7   17 : 17 : 08   2004
Errors 
in   file   / opt / oracle / admin / phsdb / udump / phsdb_ora_1775.trc:
ORA
- 00600 : internal error code, arguments:  [ ttcgcshnd-1 ] [ 0 ] [] [] [] [] [] []
Wed Jan 
7   17 : 17 : 18   2004
Errors 
in   file   / opt / oracle / admin / phsdb / udump / phsdb_ora_1777.trc:
ORA
- 00600 : internal error code, arguments:  [ ttcgcshnd-1 ] [ 0 ] [] [] [] [] [] []
Wed Jan 
7   17 : 17 : 24   2004
Errors 
in   file   / opt / oracle / admin / phsdb / udump / phsdb_ora_1783.trc:
ORA
- 00600 : internal error code, arguments:  [ ttcgcshnd-1 ] [ 0 ] [] [] [] [] [] []
Wed Jan 
7   17 : 17 : 31   2004
Errors 
in   file   / opt / oracle / admin / phsdb / udump / phsdb_ora_1785.trc:
ORA
- 00600 : internal error code, arguments:  [ ttcgcshnd-1 ] [ 0 ] [] [] [] [] [] []
Wed Jan 
7   17 : 17 : 39   2004
Errors 
in   file   / opt / oracle / admin / phsdb / udump / phsdb_ora_1777.trc:
ORA
- 00600 : internal error code, arguments:  [ ttcgcshnd-1 ] [ 0 ] [] [] [] [] [] []
Wed Jan 
7   17 : 17 : 45   2004
Errors 
in   file   / opt / oracle / admin / phsdb / udump / phsdb_ora_1783.trc:
ORA
- 00600 : internal error code, arguments:  [ ttcgcshnd-1 ] [ 0 ] [] [] [] [] [] []
Wed Jan 
7   17 : 17 : 52   2004
Errors 
in   file   / opt / oracle / admin / phsdb / udump / phsdb_ora_1787.trc:
ORA
- 00600 : internal error code, arguments:  [ ttcgcshnd-1 ] [ 0 ] [] [] [] [] [] []
Wed Jan 
7   17 : 18 : 11   2004
Errors 
in   file   / opt / oracle / admin / phsdb / udump / phsdb_ora_1791.trc:
ORA
- 00600 : internal error code, arguments:  [ ttcgcshnd-1 ] [ 0 ] [] [] [] [] [] []
Wed Jan 
7   17 : 18 : 19   2004
Errors 
in   file   / opt / oracle / admin / phsdb / udump / phsdb_ora_1785.trc:
ORA
- 00600 : internal error code, arguments:  [ ttcgcshnd-1 ] [ 0 ] [] [] [] [] [] []


那么,很不幸,你很可能是遇到了bug: 1725012
通过设置以上事件,可以屏蔽和解决这个ORA-00600错误.
具体你可以参考Metalink相关文档。

八. 导出SPFILE文件


SPFILE文件可以导出为文本文件,使用导出、创建过程你可以向SPFILE中添加参数。

 

SQL >   create  pfile = ' e:initeyglen.ora '   from  spfile;

文件已创建。

SQL
>   shutdown  immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

 

然后我们可以使用这个pfile,或者手动修改其中的参数以启动数据库。

我们修改这个pfile,增加一行


*.log_archive_start=true

使用这个PFILE启动数据库

 

SQL >  startup pfile = ' e:initeyglen.ora '
ORACLE 例程已经启动。

Total System Global Area 
135338868  bytes
Fixed Size 
453492  bytes
Variable Size 
109051904  bytes
Database  Buffers  25165824  bytes
Redo Buffers 
667648  bytes
数据库装载完毕。
数据库已经打开。
SQL
>  show parameter log_archive_start

NAME TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
log_archive_start boolean
TRUE
SQL
>

 

然后我们可以使用新的PFILE创建SPFILE

 

SQL >   create  spfile  from  pfile = ' e:initeyglen.ora ' ;
    文件已创建。

重新启动数据库,新的SPFILE生效。

 

SQL >  startup
ORACLE 例程已经启动。

Total System Global Area 
135338868  bytes
Fixed Size 
453492  bytes
Variable Size 
109051904  bytes
Database  Buffers  25165824  bytes
Redo Buffers 
667648  bytes
数据库装载完毕。
数据库已经打开。
SQL
>  show parameter spfile

NAME TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
spfile string
% ORACLE_HOME % DATABASE SPFILE %
ORACLE_SID
% .ORA
SQL
>  show parameter log_archive_start

NAME TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
log_archive_start boolean
TRUE
SQL
>

 

九. 关于920的PFILE

在$ORACLE_BASE/admin/db_name/spfile下,你很可能可以看到一个类似这样[init.ora.192003215317]名字的文件,这就是初始化
参数文件,只是跟上了时间戳。
对于Oracle920,缺省的就使用spfile启动,但是这个spfile不是凭空而来,而是根据这个文件创建而来,你可以去掉这个长后缀,就是标准的
pfile文件了。

如果手动创建数据库,可以看到以下的过程:

 

SQL >   create  spfile = ' e:oracleora10Gdatabasespfilesunny.ora '  
    
FROM  pfile = ' E:oracleadminsunnyscriptsinit.ora ' ;

 

文件已创建。

如果你想要使用pfile启动数据库,那么你可以把spfile改名,NT缺省位于$ORACLE_HOME/database下,这样Oracle就不会使用这个spfile了 。
你使用create pfile from spfile命令创建的pfile,也应该在这个目录下

以下是一个完整的例子:

 

E:OracleOra9iR2 database > dir  * .ora
驱动器 E 中的卷是 Doc
卷的序列号是 980C
- 8EFF

E:OracleOra9iR2
database  的目录

2003 - 02 - 26   10 : 49   1 , 028  INITeyglen.ORA
2003 - 02 - 10   14 : 35   2 , 048  PWDeyglen.ORA
2003 - 02 - 26   11 : 05   3 , 584  SPFILEEYGLEN.ORA
3  个文件  6 , 660  字节
0  个目录  937 , 455 , 616  可用字节

E:OracleOra9iR2
database > sqlplus  / nolog

SQL
* Plus: Release  9.2 . 0.1 . 0   -  Production  on  星期三 2月  26   11 : 16 : 29   2003

Copyright (c) 
1982 2002 , Oracle Corporation.  All  rights reserved.

SQL
>  connect  /   as  sysdba
已连接到空闲例程。
SQL
>  startup
ORACLE 例程已经启动。

Total System Global Area 
135338868  bytes
Fixed Size 
453492  bytes
Variable Size 
109051904  bytes
Database  Buffers  25165824  bytes
Redo Buffers 
667648  bytes
数据库装载完毕。
数据库已经打开。
SQL
>  show parameter spfile

NAME TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
spfile string
% ORACLE_HOME % DATABASE SPFILE %
ORACLE_SID
% .ORA
SQL
>   shutdown  immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL
>  host rename SPFILEEYGLEN.ORA SPFILEEYGLEN.ORA.bak

SQL
>  host dir  * .ora
驱动器 E 中的卷是 Doc
卷的序列号是 980C
- 8EFF

E:OracleOra9iR2
database  的目录

2003 - 02 - 26   10 : 49   1 , 028  INITeyglen.ORA
2003 - 02 - 10   14 : 35   2 , 048  PWDeyglen.ORA
2  个文件  3 , 076  字节
0  个目录  937 , 435 , 136  可用字节

SQL
>  startup
ORACLE 例程已经启动。

Total System Global Area 
135338868  bytes
Fixed Size 
453492  bytes
Variable Size 
109051904  bytes
Database  Buffers  25165824  bytes
Redo Buffers 
667648  bytes
数据库装载完毕。
数据库已经打开。
SQL
>  show parameter spfile

NAME TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
spfile string

SQL
>
SQL
>  host rename SPFILEEYGLEN.ORA.bak SPFILEEYGLEN.ORA

SQL
>   shutdown  immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL
>  startup
ORACLE 例程已经启动。

Total System Global Area 
135338868  bytes
Fixed Size 
453492  bytes
Variable Size 
109051904  bytes
Database  Buffers  25165824  bytes
Redo Buffers 
667648  bytes
数据库装载完毕。
数据库已经打开。
SQL
>  show parameter spfile

NAME TYPE
-- ---------------------------------- ----------------------
VALUE
-- ----------------------------
spfile string
% ORACLE_HOME % DATABASE SPFILE %
ORACLE_SID
% .ORA
SQL
>

你可能感兴趣的:(ORACLE)