已经碰到过两次这个问题了,上次碰到是一个月前,网上搜罗一下,解决了,这次又碰到了,搞了半天在create spfile from pfile的 过程中一直提示内部错误,头都晕了,后来灵机一动,先把spfile 删除,再create,ok了,拨开云雾见晴日。
问题分析:这个问题一般是由于spfile参数文件损坏或者参数值不当而引起,解决办法就是将spfile重启设置并创建一下即可。
基本步骤如下:
1、sqlplus /nolog
3、connect / as sysdba
4、create pfile from spfile
5、修改pfile[initsid.ora]文件中的内存参数-减小到默认状态,这一步很重要,我是使用一个运行正常的sid参数来配置的
6、create spfile from pfile ,注意要先把老的 spfile备份起来,然后删除掉,否则会报内部错误
7、shutdown abort
8、关闭Window服务管理器中的Oracle相关服务。
9、重新启动服务器即可
注:如需要,则可以在Oracle成功启动后,重新扩大内存参数
附1: 我使用的参数参考
*.aq_tm_processes=1
*.background_dump_dest='D:/oracle/admin/NODMDB/bdump'
*.compatible='9.2.0.0.0'
*.control_files='D:/oracle/oradata/NODMDB/CONTROL01.CTL','D:/oracle/oradata/NODMDB/CONTROL02.CTL','D:/oracle/oradata/NODMDB/CONTROL03.CTL'
*.core_dump_dest='D:/oracle/admin/NODMDB/cdump'
*.db_block_size=8192
*.db_cache_size=1048576000
*.db_domain=''
*.db_file_multiblock_read_count=32
*.db_name='NODMDB'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=NODMDBXDB)'
*.fast_start_mttr_target=300
*.hash_area_size=1048576
*.hash_join_enabled=TRUE
*.instance_name='NODMDB'
*.java_pool_size=33554432
*.job_queue_processes=10
*.large_pool_size=8388608
*.max_dump_file_size='500000'
*.open_cursors=300
*.pga_aggregate_target=524288000
*.processes=150
*.query_rewrite_enabled='TRUE'
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_max_size=188743680
*.shared_pool_size=50331648
*.sort_area_size=1048576
*.star_transformation_enabled='FALSE'
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='D:/oracle/admin/NODMDB/udump'
附2:pfile和spfile说明
Pfile(Parameter File)文件是基于文本格式的参数文件,含有数据库的配置参数。
Oracle 9i在安装时为每个数据库建立了一个Pfile,默认的名称为“init+例程名.ora”,这是一个文本文件,可以用任何文本编辑工具打开。
数据库的初始化参数文件分析
内容 | 说明 |
# Copyright (c) 1991, 2001 by Oracle Corporation | Oracle公司版权标识 |
# MTS | 多线程服务器配置标识,在Oracle 9i里称为共享服务器配置 |
dispatchers="(PROTOCOL=TCP)(SER=MODOSE)", "(PROTOCOL=TCP)(PRE=oracle.aurora.server.GiopServer)", "(PROTOCOL=TCP)(PRE=oracle.aurora.server.SGiopServer)" | 多线程服务器配置 |
# 其他 | 配置其他参数 |
compatible=9.0.0 | 兼容版本9.0.0 |
db_name=myoracle | 数据库名称为myoracle |
# 分布式, 复制和快照 | 配置分布式、复制和快照参数 |
db_domain=mynet | 数据库域名为mynet,加上数据库名称db_name构成全局数据库名称 |
remote_login_passwordfile=EXCLUSIVE | 指定操作系统或口令文件是否具有检查用户口令的权限。设置为EXCLUSIVE, 将使用数据库的口令文件对每个具有权限的用户进行验证。 |
# 排序, 散列联接, 位图索引 | 配置排序、散列联接、位图索引参数 |
sort_area_size=524288 | 指定排序区使用的最大内存量为512KB。排序完成后, 各行将返回, 并且内存将释放。增大该值可以提高大型排序的效率。 |
# 文件配置 | 文件配置参数 |
control_files=("C:/oracle/oradata/myoracle/CONTROL01.CTL", "C:/oracle/oradata/myoracle/CONTROL02.CTL", "C:/oracle/oradata/myoracle/CONTROL03.CTL") | 指定控制文件的路径及文件名 |
# 池 | 内存配置参数 |
Java_pool_size=33554432 | 指定Java存储池的大小为32MB,用于存储 Java 的方法、类定义和Java对象。 |
large_pool_size=1048576 | 指定大型池的大小为1MB, 用于共享服务器的会话内存、并行执行的消息缓冲区以及RMAN备份和恢复的磁盘 I/O 缓冲区。 |
shared_pool_size=33554432 | 指定共享池的大小为32MB,用于存储共享游标、存储的过程、控制结构和并行执行消息缓冲区等对象。较大的值能改善多用户系统的性能 |
# 游标和库高速缓存 | 配置游标和高速缓存参数 |
open_cursors=300 | 指定一个会话一次可以打开的游标的最大数量为300,应将该值设置得足够高,这样才能防止应用程序耗尽打开的游标 |
# 系统管理的撤消和回退段 | 配置系统管理撤消和回滚段参数 |
undo_management=AUTO | 指定系统使用的撤消空间管理方式为SMU 方式,在SMU方式下, 撤消空间会像撤消表空间一样在外部分配 |
undo_tablespace=UNDOTBS | 指定回滚表空间为UNDOTBS |
# 网络注册 | 配置网络注册参数 |
instance_name=myoracle | 例程名称为myoracle |
# 诊断和统计 | 配置诊断和统计参数 |
background_dump_dest=C:/oracle/admin/myoracle/bdump | 后台进程跟踪文件目录 |
core_dump_dest=C:/oracle/admin/myoracle/cdump | 核心转储跟踪文件目录 |
timed_statistics=TRUE | 收集操作系统的计时信息,这些信息可被用来优化数据库和 SQL 语句 |
user_dump_dest=C:/oracle/admin/myoracle/udump | 用户进程跟踪文件目录 |
# 进程和会话 | 配置进程和会话信息 |
processes=150 | 指定可同时连接到一个Oracle Server上的操作系统用户进程的最大数量为150 |
# 重做日志和恢复 | 重做日志和恢复参数设置 |
Fast_start_mttr_target=300 | 指定从单个数据库例程崩溃中恢复所需的时间为300秒 |
# 高速缓存和 I/O | 配置高速缓存和I/O参数 |
db_block_size=4096 | 指定数据块大小为4KB |
db_cache_size=33554432 | 指定数据缓冲区为32MB,该值越大,可以减少对数据库文件的I/O次数,提高效率 |
SPfile (Server Parameter File,服务器参数文件)是基于二进制格式的参数文件,含有数据库及例程的参数和数值,但不能用文本编辑工具打开。
下面对两种初始化参数文件进行比较
比较内容 | SPfile | Pfile |
格式 | 二进制格式 | 文本格式 |
编辑方式 | (1)利用企业管理器对Pfile进行修改,然后转换为Spfile (2)在SQL Plus里使用ALTER SYSTEM语句进行修改 | (1)利用文本工具直接进行修改 (2)在企业管理器里修改配置后导出形成 |
默认名称 | SPfile+例程名.ora | Init+例程名.ora 实际参数文件Init.ora |
默认路径 | Oracle/ora90/database/ | Oracle/ora90/database/ Init.ora位于Oracle/admin/数据库例程名/pfile/ |
启动次序 | SPfile优先于Pfile | Pfile低于Spfile |