在Oracle实例关闭情况下如何修改spfile的参数

重要说明:由于本文由本人测试并完成,其中可能还有不足之处,另外不同的环境可能也有不同的解决方法,本文仅供参考,并欢迎指证

问题描述:

在11G单机ASM中修改sga大小,修改完后,关闭instance并startup时,提示sga没有达到最小值,因些无法启动,而此时数据库实例已经关闭,已不能在之前的那种模式修改参数,具体的操作如下:

1、查询sga大小

SQL> show parameter sga
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
lock_sga                 boolean     FALSE
pre_page_sga                 boolean     FALSE
sga_max_size                 big integer 1G
sga_target                 big integer 1G

2、修改sga大小为500M

SQL> alter system set sga_target=500M scope=spfile;
System altered.

3、因为是指定参数为spfile,因此要重启instance才能使参数生效

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

4、重启instance 时,提示sga最小值应该为668M

SQL> startup
ORA-01078: failure in processing system parameters
ORA-00821: Specified value of sga_target 500M is too small, needs to be at least 668M

解决细路:

首先我们要理解一下oracle数据库在启动过程中调用 的参数,其顺序为:

spfilesid.ora -> spfile.ora ->initsid.ora-> init.ora  从这条启动线来说,如果第一个spfilesid.ora文件找不到的话,它会找到二个spfile.ora文件,如果能找到就能正常启动,若找不到,再继续找下一个initsid.ora文件,一直找到最后一个init.ora文件,说明:如果找到其中一个则会正常启动instance

解决方法:

通过创建pfile文件方式来启动数据库,然后再以pfile文件为模板创建spfile,具体步骤是:

1、以spfile模板创建pfile文件,并指定路径为本地硬盘位置

create pfile=‘/oracle/initudevasm.ora‘ from spfile=‘+DGDATA02/udevasm/spfileudevasm.ora‘;

2、修改initudevasm.ora文件,找到sga_target字段,修改大于668M

vi /oracle/initudevasm.ora

udevasm.__db_cache_size=826277888
udevasm.__java_pool_size=4194304
udevasm.__large_pool_size=8388608
udevasm.__oracle_base=‘/oracle/app/oracle‘#ORACLE_BASE set from environment
udevasm.__pga_aggregate_target=629145600
udevasm.__sga_target=1073741824
udevasm.__shared_io_pool_size=0
udevasm.__shared_pool_size=222298112
udevasm.__streams_pool_size=0
*.audit_file_dest=‘/oracle/app/oracle/admin/udevasm/adump‘
*.audit_trail=‘db‘
*.compatible=‘11.2.0.4.0‘
*.control_files=‘+DGDATA02/udevasm/controlfile/current.256.945212019‘
*.db_block_size=8192
*.db_create_file_dest=‘+DGDATA02‘
*.db_domain=‘‘
*.db_name=‘udevasm‘
*.db_recovery_file_dest_size=3221225472
*.diagnostic_dest=‘/oracle/app/oracle‘
*.dispatchers=‘(PROTOCOL=TCP) (SERVICE=udevasmXDB)‘
udevasm.log_archive_dest_1=‘LOCATION=+DGRECOVERY/‘
*.nls_language=‘AMERICAN‘
*.nls_territory=‘AMERICA‘
*.open_cursors=300
*.pga_aggregate_target=629145600
*.processes=1000
*.remote_login_passwordfile=‘EXCLUSIVE‘
*.sessions=170
*.sga_target=754288000  --大于668M
*.undo_tablespace=‘UNDOTBS1‘
3、以pfile文件启动instance

SQL> startup pfile=‘/oracle/initudevasm.ora‘
ORACLE instance started.
Total System Global Area  751595520 bytes
Fixed Size            2257032 bytes
Variable Size          603983736 bytes
Database Buffers      142606336 bytes
Redo Buffers            2748416 bytes
Database mounted.
Database opened.

4、以pfile文件为模板创建spfile文件

SQL> create spfile=‘+DGDATA02/udevasm/spfileudevasm.ora‘ from pfile=‘/oracle/initudevasm.ora‘;
File created.

5、关闭实例,并重新启动spfile,因为在在创建spfile时已经默认指定原来的路径,并把原来的spfile文件覆盖了,所以只要直接启动即可

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area  751595520 bytes
Fixed Size            2257032 bytes
Variable Size          603983736 bytes
Database Buffers      142606336 bytes
Redo Buffers            2748416 bytes
Database mounted.
Database opened.

6、查询修改后的sga大小

SQL> show parameter sga
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
lock_sga                 boolean     FALSE
pre_page_sga                 boolean     FALSE
sga_max_size                 big integer 720M
sga_target                 big integer 720M

通过上面查询则判断已经修改并恢复成功

总结:

1、当数据库发生因为有关参数文件异常无法启动正常时,可以先把原理理解,然后通过创建pfile与spfile文件方式解决启动问题。

2、要备份有关数据库参数文件以防止误操作导致数据库无法正常启动

时间: 2024-12-24 12:02:17

在Oracle实例关闭情况下如何修改spfile的参数的相关文章

64位操作系统在本地安装oracle数据库的情况下,怎么使用plsql连接远程或者本地的oracle数据

目前plsql只支持32位的oracle客户端,如何在本地安装了64位oracle数据库的情况下使用plsql连接数据呢? 1)首页要安装32位的oracle客户端. 2)在plsql配置中把安装的32位的oracle客户端配置进来: 在"Tools"->"preferences"的Connection 选项的Oracle Home选择32位的oracle客户端. 在OCi library中选项32位oci.dll连接文件:

Ubuntu 在终端关闭情况下仍然运行进程

参考: 让Linux关闭终端(关闭SSH等)后,程序继续运行 Ubuntu 在终端关闭情况下仍然运行进程 在 Ubuntu 16.04 系统下使用 screen 命令在终端关闭情况下仍然运行进程.具体命令如下: sudo apt install screen screen // 回车进入子界面 // 执行命令 // 按 ctrl+a+d 回到主界面 screen -ls // 查看子界面 screen –r [子页面序号] // 回到子界面 2019.5 原文地址:https://www.cnb

oracle数据库什么情况下创建索引比较好

索引就好象一本字典的目录.凭借字典的目录,我们可以非常迅速的找到我们所需要的条目.数据库也是如此.凭借Oracle数据库的索引,相关语句可以迅速的定位记录的位置,而不必去定位整个表. 虽 然说,在表中是否创建索引,不会影响到Oracle数据库的使用,也不会影响数据库语句的使用.这就好像即使字典没有目录的话,用户仍然可以使用它一 样.可是,若字典没有目录,那么可想而知,用户要查某个条目的话,其不得不翻遍整本字典.数据库也是如此.若没有建立相关索引的话,则数据库在查询记录的 时候,不得不去查询整个表

高并发情况下Linux系统及kernel参数优化

众所周知在默认参数情况下Linux对高并发支持并不好,主要受限于单进程最大打开文件数限制.内核TCP参数方面和IO事件分配机制等.下面就从几方面来调整使Linux系统能够支持高并发环境. Iptables相关 如非必须,关掉或卸载iptables防火墙,并阻止kernel加载iptables模块.这些模块会影响并发性能. 单进程最大打开文件数限制 一般的发行版,限制单进程最大可以打开1024个文件,这是远远不能满足高并发需求的,调整过程如下: 在#号提示符下敲入: # ulimit–n 6553

在不安装oracle客户端的情况下,使用PLSQL

一般在使用plsql时,会结合oracle客户端来使用,这样方便把数据库连接信息添加到plsql中.不过oracle客户端软件有点庞大,安装起来不太方便,所以在网上找到一种不依赖oracle客户端来使用plsql的方法. 1.准备 虽然不用oracle客户端,但是也要用到一个工具包--instantclient,可以到oracle官网下载(https://www.oracle.com/technetwork/topics/winsoft-085727.html) 2.具体操作步骤 (1)把下载好

Ubuntu系统下如何在不重启的情况下永久修改hostname主机名

刚在Vmware下安装了一个Ubuntu的操作系统,打开终端后发现主机名这个长啊,整个窗口都被占满了. 使用hostname修改主机名,运行命令:"hostname 新主机名" #hostname test-vm 这个修改只是临时的,修改完成需要重新打开终端窗口才会变. 而且修改过之后,再执行命令的时候就需要等待很长时间,并提示无法解析主机 这时需要修改hosts文件,来修改主机名到本机IP的映射. 要永久的修改hostname需要修改文件/etc/hostname sudo vi /

pl/sql配置连接远程数据库oracle,本地没有安装oracle数据库的情况下

首先下载instantclient 可以到oracle官网下载,要注册账号,一定要下对应版本的,要不然不成功, 10G,11G版的,我已经传上来了,免费下载:正在上传中,稍等 配置文件tnsnames.ora 这个一个地方一般都放(network/ADMIN),只有在pl/sql ----->tools-->proferences...------>connection----> oracle home(empty is autodetect) 写上tnsnames.ora的路径(

hibernate3与ehcache-2.8.3配合使用,在多个SessionFactory实例的情况下出现“Another unnamed CacheManager already exists in the same VM”问题

不想看分析过程的,直接拉到最下面看第4部分 1. 问题背景 由于某些原因,项目中使用了hibernate3与ehcache-2.8.3在配合使用,又由于某些原因,需要使用多个SessionFactory实例.在这个背景下,启动项目报错,具体异常如下: Caused by: net.sf.ehcache.CacheException: Another unnamed CacheManager already exists in the same VM. Please provide unique

在忘记root密码的情况下如何修改linux系统的root密码

1.系统启动时长按shift键后可以看到如下界面: 2.找到 recovery mode 那一行, 按下[e]键进入命令编辑状态,到 linux /boot/vmlinuz-....... ro recovery nomodeset 所在行,将 “ro recovery nomodeset”替换为“quiet splash rw init=/bin/bash”,按[Ctrl+x]重启系统. 3.进入bash并用passwd方式修改密码(以root身份启动了一个bash),修改完后按下[Ctrl+