感谢两篇文章给我很大帮助。它们的网址和内容是:
http://lovexueer.itpub.net/post/5072/49241
http://epub.itpub.net/4/2.htm
回滚段表空间损坏处理 12月26日(星期一)
测试环境:
OS :XP
DB:9201
本测试测试了如下情况:
a.正常关闭数据库,数据库(未)归档,回滚段表空间丢失,成功恢复
b.非正常关闭数据库,数据库非归档,有活动事务,回滚段表空间丢失,成功恢复
c.非正常关闭数据库,数据库归档,有活动事务,回滚段表空间丢失,恢复失败,目前不知原因
a.正常关闭数据库, 数据库(未)归档
如shutdown normal,shutdown immediate
1.正常关闭数据库,模拟回滚段表空间丢失
SQL> conn sys/test@jumper as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del D:oracleoradatajumperUNDOTBS01.DBF
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 126950220 bytes
Fixed Size 453452 bytes
Variable Size 109051904 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 2 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 2: 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF'
2.确认回滚段表空间丢失
SQL> select file#,online_status,error from v$recover_file;
FILE# ONLINE_ status error
---------- -------
2 ONLINE FILE NOT FOUND
SQL> select name from v$datafile where file#=2;
NAME
----------------------------------------------------
D:ORACLEORADATAJUMPERUNDOTBS01.DBF
3.打开数据库
SQL> alter database datafile 'D:ORACLEORADATAJUMPERUNDOTBS01.dbf' offline drop;
数据库已更改。
SQL> alter database open;
数据库已更改。
4.创建新的回滚段表空间
SQL> select segment_name ,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ ----------------
SYSTEM SYSTEM ONLINE
_SYSSMU1$ UNDOTBS1 OFFLINE
_SYSSMU2$ UNDOTBS1 OFFLINE
_SYSSMU3$ UNDOTBS1 OFFLINE
_SYSSMU4$ UNDOTBS1 OFFLINE
_SYSSMU5$ UNDOTBS1 OFFLINE
_SYSSMU6$ UNDOTBS1 OFFLINE
_SYSSMU7$ UNDOTBS1 OFFLINE
_SYSSMU8$ UNDOTBS1 OFFLINE
_SYSSMU9$ UNDOTBS1 OFFLINE
_SYSSMU10$ UNDOTBS1 OFFLINE
已选择11行。
SQL> create undo tablespace undots datafile 'undotbs02.dbf' size 100m autoextend on next 10m maxsize 200m
2 ;
表空间已创建。
SQL> alter system set undo_tablespace=undots;
系统已更改。
SQL> drop tablespace UNDOTBS1 including contents and datafiles;
表空间已丢弃。
SQL> select segment_name ,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ ---------------
SYSTEM SYSTEM ONLINE
_SYSSMU11$ UNDOTS ONLINE
_SYSSMU12$ UNDOTS ONLINE
_SYSSMU13$ UNDOTS ONLINE
_SYSSMU14$ UNDOTS ONLINE
_SYSSMU15$ UNDOTS ONLINE
_SYSSMU16$ UNDOTS ONLINE
_SYSSMU17$ UNDOTS ONLINE
_SYSSMU18$ UNDOTS ONLINE
_SYSSMU19$ UNDOTS ONLINE
_SYSSMU20$ UNDOTS ONLINE
已选择11行。
5.重新启动
SQL> startup force;
ORACLE 例程已经启动。
Total System Global Area 126950220 bytes
Fixed Size 453452 bytes
Variable Size 109051904 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> select segment_name ,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ ----------------
SYSTEM SYSTEM ONLINE
_SYSSMU11$ UNDOTS ONLINE
_SYSSMU12$ UNDOTS ONLINE
_SYSSMU13$ UNDOTS ONLINE
_SYSSMU14$ UNDOTS ONLINE
_SYSSMU15$ UNDOTS ONLINE
_SYSSMU16$ UNDOTS ONLINE
_SYSSMU17$ UNDOTS ONLINE
_SYSSMU18$ UNDOTS ONLINE
_SYSSMU19$ UNDOTS ONLINE
_SYSSMU20$ UNDOTS ONLINE
已选择11行。
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------
undo_management string AUTO
undo_retention integer 10800
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTS
通过上述方法,(未)归档都可以正常打开数据库
b.非正常关闭数据库(数据库未归档)
如shutdown abort或crash
1.生成测试数据
SQL> conn test/test@jumper
已连接。
SQL> truncate table test;
表已截掉。
SQL> insert into test values(1);
已创建 1 行。
2.非正常关闭数据库,删除回滚段表空间
再打开一窗口
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> host del D:oracleoradatajumperUNDOTBS01.DBF
3.创建启动参数文件
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
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 2 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 2: 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF'
SQL> create pfile from spfile;
文件已创建。
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
4.修改启动参数文件D:oracleora92databaseinitjumper.ora,moun数据库
原来参数:
undo_management='AUTO'
undo_tablespace='UNDOTBS1'
修改为:
undo_management='manual'
undo_tablespace='system'
_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
5.SQL> startup mount pfile=D:oracleora92databaseinitjumper.ora
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
5.确认undo表空间丢失
SQL> select file#,error from v$recover_file;
FILE# ERROR
---------- ---------------------------------------
2 FILE NOT FOUND
SQL> select name from v$datafile where file#=2;
NAME
------------------------------------------------------------
D:ORACLEORADATAJUMPERUNDOTBS01.DBF
6.打开数据库
SQL> alter database datafile 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF' offline drop;
数据库已更改。
SQL> recover database;
完成介质恢复。
SQL> alter database open;
数据库已更改。
SQL> conn test/test@jumper;
已连接。
SQL> select *from test;
ID
----------
1
7.创建新的ROLLBACK 表空间
SQL> select * from v$rollname;
USN NAME
---------- ------------------------------
0 SYSTEM
SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ ----------------
SYSTEM SYSTEM ONLINE
_SYSSMU1$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU2$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU3$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU4$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU5$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU6$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU7$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU8$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU9$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU10$ UNDOTBS1 NEEDS RECOVERY
已选择11行。
SQL> drop rollback segment "_SYSSMU1$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU2$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU3$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU4$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU5$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU6$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU7$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU8$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU9$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU10$";
回退段已删除。
SQL> drop tablespace UNDOTBS1 including contents and datafiles;
表空间已丢弃。
SQL> select segment_name,tablespace_name ,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ -------------
SYSTEM SYSTEM ONLINE
SQL> create undo tablespace undots datafile 'D:oracleoradatajumperundotbs02.dbf' size 10m ;
表空间已创建。
SQL> select segment_name,tablespace_name ,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ ---------------
SYSTEM SYSTEM ONLINE
_SYSSMU11$ UNDOTS OFFLINE
_SYSSMU12$ UNDOTS OFFLINE
_SYSSMU13$ UNDOTS OFFLINE
_SYSSMU14$ UNDOTS OFFLINE
_SYSSMU15$ UNDOTS OFFLINE
_SYSSMU16$ UNDOTS OFFLINE
_SYSSMU17$ UNDOTS OFFLINE
_SYSSMU18$ UNDOTS OFFLINE
_SYSSMU19$ UNDOTS OFFLINE
_SYSSMU20$ UNDOTS OFFLINE
已选择11行。
8.打开数据库
修改参数如下:
undo_management='AUTO'
undo_tablespace='UNDOTS'
去掉如下参数
._CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
SQL> startup mount pfile=D:oracleora92databaseinitjumper.ora
ORACLE 例程已经启动。
Total System Global Area 126950220 bytes
Fixed Size 453452 bytes
Variable Size 109051904 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
SQL> alter database open;
数据库已更改。
SQL> select segment_name,tablespace_name ,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ ----------------
SYSTEM SYSTEM ONLINE
_SYSSMU11$ UNDOTS ONLINE
_SYSSMU12$ UNDOTS ONLINE
_SYSSMU13$ UNDOTS ONLINE
_SYSSMU14$ UNDOTS ONLINE
_SYSSMU15$ UNDOTS ONLINE
_SYSSMU16$ UNDOTS ONLINE
_SYSSMU17$ UNDOTS ONLINE
_SYSSMU18$ UNDOTS ONLINE
_SYSSMU19$ UNDOTS ONLINE
_SYSSMU20$ UNDOTS ONLINE
已选择11行。
SQL> conn test/test@jumper ;
已连接。
SQL> select * from test;
ID
----------
1
SQL>create spfile from pfile
文件已创建
9.重新exp /imp,分析所有对像,防止有坏的数据块
select 'analyze table '||table_name ||' validate structure cascade ' from dba_tables
c.非正常关闭数据库(数据库归档)
如shutdown abort或crash
1.生成测试数据
SQL> conn test/test@jumper
已连接。
SQL> truncate table test;
表已截掉。
SQL> insert into test values(1);
已创建 1 行。
2.非正常关闭数据库,删除回滚段表空间
再打开一窗口
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> host del D:oracleoradatajumperUNDOTBS01.DBF
3.创建启动参数文件
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
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 2 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 2: 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF'
SQL> create pfile from spfile;
文件已创建。
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
4.修改启动参数文件D:oracleora92databaseinitjumper.ora,moun数据库
原来参数:
undo_management='AUTO'
undo_tablespace='UNDOTBS1'
修改为:
undo_management='manual'
undo_tablespace='system'
_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
SQL> startup mount pfile=D:oracleora92databaseinitjumper.ora
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
5.确认undo表空间丢失
SQL> select file# from v$recover_file;
FILE#
----------
2
SQL> select name from v$datafile where file#=2;
NAME
------------------------------------------------------------
D:ORACLEORADATAJUMPERUNDOTBS01.DBF
6.打开数据库
SQL> alter database datafile 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF' offline drop;
数据库已更改。
SQL> recover database;
完成介质恢复。
SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01092: ORACLE 例程终止。强行断开连接
查看alter.log文件报以下错误
ALTER DATABASE RECOVER database
Sun Dec 25 14:12:17 2005
Media Recovery Start
Starting datafile 1 recovery in thread 1 sequence 28
Datafile 1: 'D:ORACLEORADATAJUMPERSYSTEM01.DBF'
Starting datafile 3 recovery in thread 1 sequence 28
Datafile 3: 'D:ORACLEORADATAJUMPERINDX01.DBF'
Starting datafile 4 recovery in thread 1 sequence 28
Datafile 4: 'D:ORACLEORADATAJUMPERTOOLS01.DBF'
Starting datafile 5 recovery in thread 1 sequence 28
Datafile 5: 'D:ORACLEORADATAJUMPERUSERS01.DBF'
Media Recovery Log
Recovery of Online Redo Log: Thread 1 Group 1 Seq 28 Reading mem 0
Mem# 0 errs 0: D:ORACLEORADATAJUMPERREDO01.LOG
Media Recovery Complete
Completed: ALTER DATABASE RECOVER database
Sun Dec 25 14:12:27 2005
alter database open
Sun Dec 25 14:12:28 2005
Beginning crash recovery of 1 threads
Sun Dec 25 14:12:28 2005
Started first pass scan
Sun Dec 25 14:12:28 2005
Completed first pass scan
138 redo blocks read, 0 data blocks need recovery
Sun Dec 25 14:12:29 2005
Started recovery at
Thread 1: logseq 28, block 2, scn 0.139909
Recovery of Online Redo Log: Thread 1 Group 1 Seq 28 Reading mem 0
Mem# 0 errs 0: D:ORACLEORADATAJUMPERREDO01.LOG
Sun Dec 25 14:12:29 2005
Ended recovery at
Thread 1: logseq 28, block 140, scn 0.160187
0 data blocks read, 0 data blocks written, 138 redo blocks read
Crash recovery completed successfully
Sun Dec 25 14:12:29 2005
LGWR: Primary database is in CLUSTER CONSISTENT mode
Thread 1 advanced to log sequence 29
Thread 1 opened at log sequence 29
Current log# 2 seq# 29 mem# 0: D:ORACLEORADATAJUMPERREDO02.LOG
Successful open of redo thread 1.
Sun Dec 25 14:12:29 2005
SMON: enabling cache recovery
Sun Dec 25 14:12:30 2005
ARC0: Evaluating archive log 1 thread 1 sequence 28
ARC0: Beginning to archive log 1 thread 1 sequence 28
Creating archive destination LOG_ARCHIVE_DEST_1: 'D:ORACLEORADATAJUMPERARCHIVE1_28.DBF'
ARC0: Completed archiving log 1 thread 1 sequence 28
Sun Dec 25 14:12:30 2005
Errors in file d:oracleadminjumperudumpjumper_ora_3360.trc:
ORA-00704: 引导程序进程失败
ORA-00604: 递归 SQL 层 2 出现错误
ORA-00376: 此时无法读取文件 2
ORA-01110: 数据文件 2: 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF'
Sun Dec 25 14:24:06 2005
Error 704 happened during db open, shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 3796
ORA-1092 signalled during: alter database open...
对应的jumper_ora_3360.trc错误如下:
Dump file d:oracleadminjumperudumpjumper_ora_3360.trc
Sun Dec 25 14:12:19 2005
ORACLE V9.2.0.1.0 - Production vsnsta=0
vsnsql=12 vsnxtr=3
Windows 2000 Version 5.1 Service Pack 2, CPU type 586
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
Windows 2000 Version 5.1 Service Pack 2, CPU type 586
Instance name: jumper
Redo thread mounted by this instance: 1
Oracle process number: 10
Windows thread id: 3360, image: ORACLE.EXE
*** SESSION ID:(9.3) 2005-12-25 14:12:19.000
----- Redo read statistics for thread 1 -----
Read rate (ASYNC) = 69Kb/sec => 138 blocks in 1s
Read buffer = 8192Kb (16384 blocks)
Longest record = 0Kb
Record moves = 0/223 (0%)
----------------------------------------------
----- Redo read statistics for thread 1 -----
Read rate (ASYNC) = 69Kb/sec => 138 blocks in 1s
Read buffer = 8192Kb (16384 blocks)
Longest record = 0Kb
Record moves = 0/223 (0%)
----------------------------------------------
*** 2005-12-25 14:12:29.000
KCRA: start recovery claims for 0 data blocks
*** 2005-12-25 14:12:29.000
KCRA: buffers claimed = 0/0, eliminated = 0
ORA-00704: 引导程序进程失败
ORA-00604: 递归 SQL 层 2 出现错误
ORA-00376: 此时无法读取文件 2
ORA-01110: 数据文件 2: 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF'
怪了,归档模式恢复不成功,而非归档模式恢复成功?
从后台日志来看,归档模式下用序列为28的日志作了介质恢复,然后将此日志归档后,报了启动错误
是不是归档进程后,数据库仍然去读老的回滚表空间,造成打开数据库不成功?而非归档就成功启动了。
原因在那里?
=============================
9i新特点:SPFILE的使用
作者:盖国强 (ITPUB:Eygle)
在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:/Oracle/Ora9iR2/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:/Oracle/admin/eyglen/pfile/init.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:/Oracle/Ora9iR2/database/SPFILEEYGLEN.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:/Oracle/Ora9iR2/database/SPFLEEYGLEN.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 ALUE
------------------------------------ -------- ----------
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,可以使用以下方法:
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
2 GROUP 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文件
SPFILE文件可以导出为文本文件,使用导出、创建过程你可以向SPFILE中添加参数。
SQL> create pfile='e:/initeyglen.ora' from spfile;
文件已创建。
SQL> SHUTDOWN immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
Initeyglen.ora文件的内容:
*.aq_tm_processes=1
*.background_dump_dest='e:/Oracle/admin/eyglen/bdump'
*.compatible='9.2.0.0.0'
*.control_files='e:/Oracle/oradata/eyglen/control01.ctl',
'e:/Oracle/oradata/eyglen/control02.ctl',
'e:/Oracle/oradata/eyglen/control03.ctl'
*.core_dump_dest='e:/Oracle/admin/eyglen/cdump'
*.db_block_size=8192
*.db_cache_size=25165824
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='eyglen'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=eyglenXDB)'
*.fast_start_mttr_target=300
*.hash_join_enabled=TRUE
*.instance_name='eyglen'
*.java_pool_size=33554432
*.job_queue_processes=10
*.large_pool_size=8388608
*.open_cursors=300
*.pga_aggregate_target=25165824
*.processes=150
*.query_rewrite_enabled='FALSE'
*.remote_login_passwordfile='EXCLUSIVE'
*.shared_pool_size=50331648
*.sort_area_size=524288
*.sql_trace=FALSE
*.star_transformation_enabled='FALSE'
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='e:/Oracle/admin/eyglen/udump'
然后我们可以使用这个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文件了。
如果你想要使用pfile启动数据库,那么你可以把spfile改名,NT缺省位于$ORACLE_HOME/database下,这样Oracle就不会使用这个spfile了 。
你使用create pfile from spfile命令创建的pfile,也应该在这个目录下
以下是一个完整的例子:
E:/Oracle/Ora9ir2/database>dir *.ora
驱动器 E 中的卷是 Doc
卷的序列号是 980C-8EFF
E:/Oracle/Ora9iR2/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:/Oracle/Ora9iR2/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:/Oracle/Ora9iR2/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>
(END)
http://lovexueer.itpub.net/post/5072/49241
http://epub.itpub.net/4/2.htm
回滚段表空间损坏处理 12月26日(星期一)
测试环境:
OS :XP
DB:9201
本测试测试了如下情况:
a.正常关闭数据库,数据库(未)归档,回滚段表空间丢失,成功恢复
b.非正常关闭数据库,数据库非归档,有活动事务,回滚段表空间丢失,成功恢复
c.非正常关闭数据库,数据库归档,有活动事务,回滚段表空间丢失,恢复失败,目前不知原因
a.正常关闭数据库, 数据库(未)归档
如shutdown normal,shutdown immediate
1.正常关闭数据库,模拟回滚段表空间丢失
SQL> conn sys/test@jumper as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del D:oracleoradatajumperUNDOTBS01.DBF
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 126950220 bytes
Fixed Size 453452 bytes
Variable Size 109051904 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 2 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 2: 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF'
2.确认回滚段表空间丢失
SQL> select file#,online_status,error from v$recover_file;
FILE# ONLINE_ status error
---------- -------
2 ONLINE FILE NOT FOUND
SQL> select name from v$datafile where file#=2;
NAME
----------------------------------------------------
D:ORACLEORADATAJUMPERUNDOTBS01.DBF
3.打开数据库
SQL> alter database datafile 'D:ORACLEORADATAJUMPERUNDOTBS01.dbf' offline drop;
数据库已更改。
SQL> alter database open;
数据库已更改。
4.创建新的回滚段表空间
SQL> select segment_name ,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ ----------------
SYSTEM SYSTEM ONLINE
_SYSSMU1$ UNDOTBS1 OFFLINE
_SYSSMU2$ UNDOTBS1 OFFLINE
_SYSSMU3$ UNDOTBS1 OFFLINE
_SYSSMU4$ UNDOTBS1 OFFLINE
_SYSSMU5$ UNDOTBS1 OFFLINE
_SYSSMU6$ UNDOTBS1 OFFLINE
_SYSSMU7$ UNDOTBS1 OFFLINE
_SYSSMU8$ UNDOTBS1 OFFLINE
_SYSSMU9$ UNDOTBS1 OFFLINE
_SYSSMU10$ UNDOTBS1 OFFLINE
已选择11行。
SQL> create undo tablespace undots datafile 'undotbs02.dbf' size 100m autoextend on next 10m maxsize 200m
2 ;
表空间已创建。
SQL> alter system set undo_tablespace=undots;
系统已更改。
SQL> drop tablespace UNDOTBS1 including contents and datafiles;
表空间已丢弃。
SQL> select segment_name ,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ ---------------
SYSTEM SYSTEM ONLINE
_SYSSMU11$ UNDOTS ONLINE
_SYSSMU12$ UNDOTS ONLINE
_SYSSMU13$ UNDOTS ONLINE
_SYSSMU14$ UNDOTS ONLINE
_SYSSMU15$ UNDOTS ONLINE
_SYSSMU16$ UNDOTS ONLINE
_SYSSMU17$ UNDOTS ONLINE
_SYSSMU18$ UNDOTS ONLINE
_SYSSMU19$ UNDOTS ONLINE
_SYSSMU20$ UNDOTS ONLINE
已选择11行。
5.重新启动
SQL> startup force;
ORACLE 例程已经启动。
Total System Global Area 126950220 bytes
Fixed Size 453452 bytes
Variable Size 109051904 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> select segment_name ,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ ----------------
SYSTEM SYSTEM ONLINE
_SYSSMU11$ UNDOTS ONLINE
_SYSSMU12$ UNDOTS ONLINE
_SYSSMU13$ UNDOTS ONLINE
_SYSSMU14$ UNDOTS ONLINE
_SYSSMU15$ UNDOTS ONLINE
_SYSSMU16$ UNDOTS ONLINE
_SYSSMU17$ UNDOTS ONLINE
_SYSSMU18$ UNDOTS ONLINE
_SYSSMU19$ UNDOTS ONLINE
_SYSSMU20$ UNDOTS ONLINE
已选择11行。
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------
undo_management string AUTO
undo_retention integer 10800
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTS
通过上述方法,(未)归档都可以正常打开数据库
b.非正常关闭数据库(数据库未归档)
如shutdown abort或crash
1.生成测试数据
SQL> conn test/test@jumper
已连接。
SQL> truncate table test;
表已截掉。
SQL> insert into test values(1);
已创建 1 行。
2.非正常关闭数据库,删除回滚段表空间
再打开一窗口
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> host del D:oracleoradatajumperUNDOTBS01.DBF
3.创建启动参数文件
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
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 2 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 2: 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF'
SQL> create pfile from spfile;
文件已创建。
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
4.修改启动参数文件D:oracleora92databaseinitjumper.ora,moun数据库
原来参数:
undo_management='AUTO'
undo_tablespace='UNDOTBS1'
修改为:
undo_management='manual'
undo_tablespace='system'
_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
5.SQL> startup mount pfile=D:oracleora92databaseinitjumper.ora
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
5.确认undo表空间丢失
SQL> select file#,error from v$recover_file;
FILE# ERROR
---------- ---------------------------------------
2 FILE NOT FOUND
SQL> select name from v$datafile where file#=2;
NAME
------------------------------------------------------------
D:ORACLEORADATAJUMPERUNDOTBS01.DBF
6.打开数据库
SQL> alter database datafile 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF' offline drop;
数据库已更改。
SQL> recover database;
完成介质恢复。
SQL> alter database open;
数据库已更改。
SQL> conn test/test@jumper;
已连接。
SQL> select *from test;
ID
----------
1
7.创建新的ROLLBACK 表空间
SQL> select * from v$rollname;
USN NAME
---------- ------------------------------
0 SYSTEM
SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ ----------------
SYSTEM SYSTEM ONLINE
_SYSSMU1$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU2$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU3$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU4$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU5$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU6$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU7$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU8$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU9$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU10$ UNDOTBS1 NEEDS RECOVERY
已选择11行。
SQL> drop rollback segment "_SYSSMU1$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU2$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU3$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU4$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU5$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU6$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU7$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU8$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU9$";
回退段已删除。
SQL> drop rollback segment "_SYSSMU10$";
回退段已删除。
SQL> drop tablespace UNDOTBS1 including contents and datafiles;
表空间已丢弃。
SQL> select segment_name,tablespace_name ,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ -------------
SYSTEM SYSTEM ONLINE
SQL> create undo tablespace undots datafile 'D:oracleoradatajumperundotbs02.dbf' size 10m ;
表空间已创建。
SQL> select segment_name,tablespace_name ,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ ---------------
SYSTEM SYSTEM ONLINE
_SYSSMU11$ UNDOTS OFFLINE
_SYSSMU12$ UNDOTS OFFLINE
_SYSSMU13$ UNDOTS OFFLINE
_SYSSMU14$ UNDOTS OFFLINE
_SYSSMU15$ UNDOTS OFFLINE
_SYSSMU16$ UNDOTS OFFLINE
_SYSSMU17$ UNDOTS OFFLINE
_SYSSMU18$ UNDOTS OFFLINE
_SYSSMU19$ UNDOTS OFFLINE
_SYSSMU20$ UNDOTS OFFLINE
已选择11行。
8.打开数据库
修改参数如下:
undo_management='AUTO'
undo_tablespace='UNDOTS'
去掉如下参数
._CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
SQL> startup mount pfile=D:oracleora92databaseinitjumper.ora
ORACLE 例程已经启动。
Total System Global Area 126950220 bytes
Fixed Size 453452 bytes
Variable Size 109051904 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
SQL> alter database open;
数据库已更改。
SQL> select segment_name,tablespace_name ,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ ----------------
SYSTEM SYSTEM ONLINE
_SYSSMU11$ UNDOTS ONLINE
_SYSSMU12$ UNDOTS ONLINE
_SYSSMU13$ UNDOTS ONLINE
_SYSSMU14$ UNDOTS ONLINE
_SYSSMU15$ UNDOTS ONLINE
_SYSSMU16$ UNDOTS ONLINE
_SYSSMU17$ UNDOTS ONLINE
_SYSSMU18$ UNDOTS ONLINE
_SYSSMU19$ UNDOTS ONLINE
_SYSSMU20$ UNDOTS ONLINE
已选择11行。
SQL> conn test/test@jumper ;
已连接。
SQL> select * from test;
ID
----------
1
SQL>create spfile from pfile
文件已创建
9.重新exp /imp,分析所有对像,防止有坏的数据块
select 'analyze table '||table_name ||' validate structure cascade ' from dba_tables
c.非正常关闭数据库(数据库归档)
如shutdown abort或crash
1.生成测试数据
SQL> conn test/test@jumper
已连接。
SQL> truncate table test;
表已截掉。
SQL> insert into test values(1);
已创建 1 行。
2.非正常关闭数据库,删除回滚段表空间
再打开一窗口
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> host del D:oracleoradatajumperUNDOTBS01.DBF
3.创建启动参数文件
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
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 2 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 2: 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF'
SQL> create pfile from spfile;
文件已创建。
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
4.修改启动参数文件D:oracleora92databaseinitjumper.ora,moun数据库
原来参数:
undo_management='AUTO'
undo_tablespace='UNDOTBS1'
修改为:
undo_management='manual'
undo_tablespace='system'
_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
SQL> startup mount pfile=D:oracleora92databaseinitjumper.ora
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
5.确认undo表空间丢失
SQL> select file# from v$recover_file;
FILE#
----------
2
SQL> select name from v$datafile where file#=2;
NAME
------------------------------------------------------------
D:ORACLEORADATAJUMPERUNDOTBS01.DBF
6.打开数据库
SQL> alter database datafile 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF' offline drop;
数据库已更改。
SQL> recover database;
完成介质恢复。
SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01092: ORACLE 例程终止。强行断开连接
查看alter.log文件报以下错误
ALTER DATABASE RECOVER database
Sun Dec 25 14:12:17 2005
Media Recovery Start
Starting datafile 1 recovery in thread 1 sequence 28
Datafile 1: 'D:ORACLEORADATAJUMPERSYSTEM01.DBF'
Starting datafile 3 recovery in thread 1 sequence 28
Datafile 3: 'D:ORACLEORADATAJUMPERINDX01.DBF'
Starting datafile 4 recovery in thread 1 sequence 28
Datafile 4: 'D:ORACLEORADATAJUMPERTOOLS01.DBF'
Starting datafile 5 recovery in thread 1 sequence 28
Datafile 5: 'D:ORACLEORADATAJUMPERUSERS01.DBF'
Media Recovery Log
Recovery of Online Redo Log: Thread 1 Group 1 Seq 28 Reading mem 0
Mem# 0 errs 0: D:ORACLEORADATAJUMPERREDO01.LOG
Media Recovery Complete
Completed: ALTER DATABASE RECOVER database
Sun Dec 25 14:12:27 2005
alter database open
Sun Dec 25 14:12:28 2005
Beginning crash recovery of 1 threads
Sun Dec 25 14:12:28 2005
Started first pass scan
Sun Dec 25 14:12:28 2005
Completed first pass scan
138 redo blocks read, 0 data blocks need recovery
Sun Dec 25 14:12:29 2005
Started recovery at
Thread 1: logseq 28, block 2, scn 0.139909
Recovery of Online Redo Log: Thread 1 Group 1 Seq 28 Reading mem 0
Mem# 0 errs 0: D:ORACLEORADATAJUMPERREDO01.LOG
Sun Dec 25 14:12:29 2005
Ended recovery at
Thread 1: logseq 28, block 140, scn 0.160187
0 data blocks read, 0 data blocks written, 138 redo blocks read
Crash recovery completed successfully
Sun Dec 25 14:12:29 2005
LGWR: Primary database is in CLUSTER CONSISTENT mode
Thread 1 advanced to log sequence 29
Thread 1 opened at log sequence 29
Current log# 2 seq# 29 mem# 0: D:ORACLEORADATAJUMPERREDO02.LOG
Successful open of redo thread 1.
Sun Dec 25 14:12:29 2005
SMON: enabling cache recovery
Sun Dec 25 14:12:30 2005
ARC0: Evaluating archive log 1 thread 1 sequence 28
ARC0: Beginning to archive log 1 thread 1 sequence 28
Creating archive destination LOG_ARCHIVE_DEST_1: 'D:ORACLEORADATAJUMPERARCHIVE1_28.DBF'
ARC0: Completed archiving log 1 thread 1 sequence 28
Sun Dec 25 14:12:30 2005
Errors in file d:oracleadminjumperudumpjumper_ora_3360.trc:
ORA-00704: 引导程序进程失败
ORA-00604: 递归 SQL 层 2 出现错误
ORA-00376: 此时无法读取文件 2
ORA-01110: 数据文件 2: 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF'
Sun Dec 25 14:24:06 2005
Error 704 happened during db open, shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 3796
ORA-1092 signalled during: alter database open...
对应的jumper_ora_3360.trc错误如下:
Dump file d:oracleadminjumperudumpjumper_ora_3360.trc
Sun Dec 25 14:12:19 2005
ORACLE V9.2.0.1.0 - Production vsnsta=0
vsnsql=12 vsnxtr=3
Windows 2000 Version 5.1 Service Pack 2, CPU type 586
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
Windows 2000 Version 5.1 Service Pack 2, CPU type 586
Instance name: jumper
Redo thread mounted by this instance: 1
Oracle process number: 10
Windows thread id: 3360, image: ORACLE.EXE
*** SESSION ID:(9.3) 2005-12-25 14:12:19.000
----- Redo read statistics for thread 1 -----
Read rate (ASYNC) = 69Kb/sec => 138 blocks in 1s
Read buffer = 8192Kb (16384 blocks)
Longest record = 0Kb
Record moves = 0/223 (0%)
----------------------------------------------
----- Redo read statistics for thread 1 -----
Read rate (ASYNC) = 69Kb/sec => 138 blocks in 1s
Read buffer = 8192Kb (16384 blocks)
Longest record = 0Kb
Record moves = 0/223 (0%)
----------------------------------------------
*** 2005-12-25 14:12:29.000
KCRA: start recovery claims for 0 data blocks
*** 2005-12-25 14:12:29.000
KCRA: buffers claimed = 0/0, eliminated = 0
ORA-00704: 引导程序进程失败
ORA-00604: 递归 SQL 层 2 出现错误
ORA-00376: 此时无法读取文件 2
ORA-01110: 数据文件 2: 'D:ORACLEORADATAJUMPERUNDOTBS01.DBF'
怪了,归档模式恢复不成功,而非归档模式恢复成功?
从后台日志来看,归档模式下用序列为28的日志作了介质恢复,然后将此日志归档后,报了启动错误
是不是归档进程后,数据库仍然去读老的回滚表空间,造成打开数据库不成功?而非归档就成功启动了。
原因在那里?
=============================
9i新特点:SPFILE的使用
作者:盖国强 (ITPUB:Eygle)
在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:/Oracle/Ora9iR2/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:/Oracle/admin/eyglen/pfile/init.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:/Oracle/Ora9iR2/database/SPFILEEYGLEN.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:/Oracle/Ora9iR2/database/SPFLEEYGLEN.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 ALUE
------------------------------------ -------- ----------
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,可以使用以下方法:
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
2 GROUP 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文件
SPFILE文件可以导出为文本文件,使用导出、创建过程你可以向SPFILE中添加参数。
SQL> create pfile='e:/initeyglen.ora' from spfile;
文件已创建。
SQL> SHUTDOWN immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
Initeyglen.ora文件的内容:
*.aq_tm_processes=1
*.background_dump_dest='e:/Oracle/admin/eyglen/bdump'
*.compatible='9.2.0.0.0'
*.control_files='e:/Oracle/oradata/eyglen/control01.ctl',
'e:/Oracle/oradata/eyglen/control02.ctl',
'e:/Oracle/oradata/eyglen/control03.ctl'
*.core_dump_dest='e:/Oracle/admin/eyglen/cdump'
*.db_block_size=8192
*.db_cache_size=25165824
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='eyglen'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=eyglenXDB)'
*.fast_start_mttr_target=300
*.hash_join_enabled=TRUE
*.instance_name='eyglen'
*.java_pool_size=33554432
*.job_queue_processes=10
*.large_pool_size=8388608
*.open_cursors=300
*.pga_aggregate_target=25165824
*.processes=150
*.query_rewrite_enabled='FALSE'
*.remote_login_passwordfile='EXCLUSIVE'
*.shared_pool_size=50331648
*.sort_area_size=524288
*.sql_trace=FALSE
*.star_transformation_enabled='FALSE'
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='e:/Oracle/admin/eyglen/udump'
然后我们可以使用这个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文件了。
如果你想要使用pfile启动数据库,那么你可以把spfile改名,NT缺省位于$ORACLE_HOME/database下,这样Oracle就不会使用这个spfile了 。
你使用create pfile from spfile命令创建的pfile,也应该在这个目录下
以下是一个完整的例子:
E:/Oracle/Ora9ir2/database>dir *.ora
驱动器 E 中的卷是 Doc
卷的序列号是 980C-8EFF
E:/Oracle/Ora9iR2/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:/Oracle/Ora9iR2/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:/Oracle/Ora9iR2/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>
(END)