ORA-04031: unable to allocate 752 bytes of shared memory ("shared pool","unk
ORA-00821: Specified value of sga_target 512M is too small, needs to be at least 1240M
ORA-12514:TNS: 监听程序当前无法识别连接描述符中请求的服务
ORA-01034: ORACLE not availableORA-27101: shared memory realm does not existLinux-x86_64 Error: 2: No such file or directory进程 ID: 0会话 ID:0 序列号:0
1、引言
部署环境:Red Hat Enterprise Linux Server release 6.8 (Santiago)
oracle版本:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
2、问题分析
数据库重启失败,各种报错。据了解,重启之前,有人通过plsql对数据库执行过一些优化命令,增大连接数,线程池等,重启直接报错。网上查询了很多教程解决一个问题又出现新的问题。最后确定是优化配置好像对默认的spfile文件进行了更改,但是配置优化可能不适用当前版本,当然这个说法可能不正确,只是我个人意见。
3、问题解决步骤
3.1、将pfile原文件备份,并编辑当前pfile
切换到oracle用户,进入oracle安装路径的dbs路径,查看oracle安装路径。
spfileorcl.ora就是oracle默认启动配置文件,init.ora就是pfile文件。
#切换到 oracle 用户
[root@localhost ~]# su - oracle
#进入 oracle 的spfile 文件路径
[oracle@localhost ~]$ cd $ORACLE_HOME/dbs/
#查看全路径
[oracle@localhost dbs]$ pwd
/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs
#查看当前文件夹下面的文件
[oracle@localhost dbs]$ ll
total 40
-rw-r--r--. 1 oracle dba 1076 Jul 25 08:19 atest.ora
-rw-rw----. 1 oracle dba 1544 Oct 30 2022 hc_DBUA0.dat
-rw-rw----. 1 oracle dba 1544 Jul 25 21:36 hc_orcl.dat
-rw-r--r--. 1 oracle dba 191 Jul 25 09:03 init.ora
-rw-r-----. 1 oracle dba 24 Oct 30 2022 lkORCL
-rw-r-----. 1 oracle dba 1536 Oct 30 2022 orapworcl
-rw-r-----. 1 oracle dba 2560 Jul 25 21:38 spfileorcl.ora
下一步,备份init.ora并编辑,11g可以参考如下配置:(修改路径和版本)
#备份原来的 pfile 文件
[oracle@localhost dbs]$ cp init.ora init.orabak
[oracle@localhost dbs]$ ll -h init*
-rw-r--r--. 1 oracle dba 191 Jul 25 09:03 init.ora
-rw-r--r--. 1 oracle dba 2.8K Jul 25 07:06 init.orabak
#编辑新的 pfile 文件,可以参考如下配置
[oracle@localhost dbs]$ vim init.ora
*.audit_file_dest='/home/oracle/app/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.1.0'
*.control_files='/home/oracle/app/oradata/orcl/control01.ctl','/home/oracle/app/oradata/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.diagnostic_dest='/home/oracle/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.open_cursors=300
*.processes=10000
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=10000
*.undo_tablespace='UNDOTBS1'
*.sga_target=2G
*.shared_pool_size=512M
*.pga_aggregate_target=256M
保存并退出。
3.2、自定义pfile文件启动oracle
使用以 "SYSDBA" 身份连接到 Oracle 数据库,自定义pfile文件启动oracle:并启动监听
#使用以 "SYSDBA" 身份连接到 Oracle 数据库
[oracle@localhost dbs]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Tue Jul 25 23:00:50 2023
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
#指定pfile文件启动
SQL> startup pfile='/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/init.ora';
ORACLE instance started.
Total System Global Area 2137886720 bytes
Fixed Size 2215064 bytes
Variable Size 1409287016 bytes
Database Buffers 721420288 bytes
Redo Buffers 4964352 bytes
Database mounted.
Database opened.
#退出
SQL> exit;
[oracle@localhost dbs]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 25-JUL-2023 23:03:46
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Starting /home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to /home/oracle/app/diag/tnslsnr/localhost/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 25-JUL-2023 23:03:46
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /home/oracle/app/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
The listener supports no services
The command completed successfully
[oracle@localhost dbs]$
到这里启动就ok了。但是需要每次追加pfile文件,启动很麻烦,可以将原来的备份,并重新生成。
3.3、重新生成spfile(二进制)文件
# 将原来的spfile文件更改一个名字
[oracle@localhost dbs]$ mv spfileorcl.ora spfileorcl.orabak
# 使用以 "SYSDBA" 身份连接到 Oracle 数据库
[oracle@localhost dbs]$ sqlplus / as sysdba
# 将原来的spfile文件更改一个名字
# 将原来的spfile文件更改一个名字
#引用新增的 PFILE 创建一个 SPFILE
#格式为: create spfile='/路径/dbs/spfileorcl.ora' from pfile='/路径/dbs/init.ora';
SQL> create spfile='/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/spfileorcl.ora' from pfile='/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/init.ora';
File created.
# 可以看出已经生成成功了,退出
SQL> exit;
这样下次启动就不用追加 pfile,直接执行 startup; 即可。
4、补充
如果使用连接工具提示 :
ORA-12514:TNS: 监听程序当前无法识别连接描述符中请求的服务
ORA-01034: ORACLE not availableORA-27101: shared memory realm does not existLinux-x86_64 Error: 2: No such file or directory进程 ID: 0会话 ID:0 序列号:0
如果有此类报错,需要配置监听文件,由上的监听日志可以看出,配置文件在:
/home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
编辑此文件,11g可以参考如下配置:
[oracle@localhost dbs]$ vim /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# listener.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
ADR_BASE_LISTENER = /home/oracle/app
Oracle的 PFILE 和 SPFILE 的说明。
# Oracle的 PFILE 和 SPFILE 的说明。
在 Oracle 数据库中,PFILE(Parameter File)和 SPFILE(Server Parameter File)都是用来存储数据库实例的参数配置信息的文件。
PFILE(Parameter File):
PFILE 是一个文本文件,包含了用于配置 Oracle 数据库实例的参数设置。
PFILE 文件可以手动编辑,并且在数据库启动时被读取。
PFILE 中的参数设置可以通过 ALTER SYSTEM 命令进行修改并即时生效。
PFILE 的默认名称为 initSID.ora,其中 SID 是数据库实例的标识符。
SPFILE(Server Parameter File):
PFILE(Parameter File):
SPFILE 是二进制格式的参数文件,用于存储数据库实例的参数设置。
SPFILE 是数据库启动后由 Oracle 自动创建和维护的,通常以二进制形式存储在数据库的特定位置。
SPFILE 提供了一些优势,例如可以使用 ALTER SYSTEM 命令在数据库运行时修改参数,并且修改将在下次数据库启动时保持。
SPFILE 还提供了动态调整参数范围的功能,允许对某些参数进行在线范围更改。
SPFILE 的默认名称为 spfileSID.ora,其中 SID 是数据库实例的标识符。
总结一下,PFILE 是一个可编辑的文本文件,用于手动设置数据库实例的参数配置,而 SPFILE 是一个二进制文件,由数据库自动生成并维护,在线修改参数并且可以在数据库启动时保持修改。在大多数情况下,建议使用 SPFILE 来管理数据库实例的参数设置,因为它提供了更多的灵活性和方便性。