问题描述
安装 Oracle 数据库后,因为它是按百分比来占用内存的,我觉得占用的比较多,想要修改小一点儿
于是上网上淘了这样两行命令
SQL> show parameter sga;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga boolean FALSE
lock_sga boolean FALSE
pre_page_sga boolean TRUE
sga_max_size big integer 19584M
sga_min_size big integer 0
sga_target big integer 19584M
unified_audit_sga_queue_size integer 1048576
SQL> alter system set sga_max_size=5000m scope=spfile;
System altered
之后到 Windows 系统服务中重启了数据库,接下来使用PL/SQL就无法登录到数据库了。
报错(一)—— ORA-12514
这个报错很常见,网上有很多人提到这个错误。
解决方法是找到 listener.ora 文件,添加监听配置,如果不知道这个文件在哪,可以在 PL/SQL 的“帮助 - 支持信息”进行查看,listener.ora 与 tnsnames.ora 都在一个目录。
找到 listener.ora 文件后编辑添加
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = C:\Users\Administrator\Downloads\oracle19c)
(SID_NAME = orcl)
)
编辑后的内容为
# listener.ora Network Configuration File: C:\Users\Administrator\Downloads\oracle19c\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\Users\Administrator\Downloads\oracle19c)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\Users\Administrator\Downloads\oracle19c\bin\oraclr19.dll")
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = C:\Users\Administrator\Downloads\oracle19c)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
注意:ORACLE_HOME 需要根据自己的 Oracle 所在位置进行修改。
重启 Listener 服务,我这个版本的名字叫:OracleOraDB19Home1TNSListener
重启后,重新打开 PL/SQL,登录出现其它报错信息。
报错2—— ORA-01034 和 ORA-27101
这个报错看起来服务没有启动的样子,我在服务面板看到 OracleServiceORCL 正在运行,就也没有多想。
后来检索发现,问题确实是实例没有启动成功,因为修改 sga_max_size
后导致 sga_target
大于它,实例启动失败
解决方法
# 进入 Sqlplus
C:\Users\Administrator> sqlplus /nolog
# 连接数据库
SQL> conn /as sysdba
已连接到空闲例程。
# 生成 PFILE(路径为ORACLE_HOME下的dbs目录)
SQL> create pfile='C:/Users/Administrator/Downloads/oracle19c/dbs/init1.ora' FROM SPFILE;
File created.
编辑 init1.ora文件,找到 sga_target 参数,修改使其小于 sga_max_size,但是要大于 1344M,否则会报错
ORA-00821: Specified value of sga_target 512M is too small, needs to be at least 1344M
orcl.__data_transfer_cache_size=0
orcl.__db_cache_size=17649631232
orcl.__inmemory_ext_roarea=0
orcl.__inmemory_ext_rwarea=0
orcl.__java_pool_size=0
orcl.__large_pool_size=335544320
orcl.__oracle_base='C:\Oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=6845104128
orcl.__sga_target=20535312384
orcl.__shared_io_pool_size=134217728
orcl.__shared_pool_size=2348810240
orcl.__streams_pool_size=0
orcl.__unified_pga_pool_size=0
*.audit_file_dest='C:\Oracle\admin\orcl\adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='C:\Oracle\oradata\ORCL\control01.ctl','C:\Oracle\oradata\ORCL\control02.ctl'
*.db_block_size=8192
*.db_name='orcl'
*.diagnostic_dest='C:\Oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.local_listener='LISTENER_ORCL'
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=6518m
*.processes=3840
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_max_size=5242m
*.sga_target=2000m
*.undo_tablespace='UNDOTBS1'
修改后保存,从 PFILE 启动实例
SQL> startup pfile='C:/Users/Administrator/Downloads/oracle19c/dbs/init1.ora';
ORACLE instance started.
Total System Global Area 5251268080 bytes
Fixed Size 9039344 bytes
Variable Size 4060086272 bytes
Database Buffers 1157627904 bytes
Redo Buffers 24514560 bytes
数据库装载完毕。
数据库已经打开。
根据 PFILE 生成 SPFILE
SQL> create spfile='C:\Users\Administrator\Downloads\oracle19c\database\spfileorcl.ora' from pfile='C:\Users\Administrator\Downloads\oracle19c\dbs\init1.ora';
关闭数据库
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
使用 SPFILE 启动实例
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 5251268080 bytes
Fixed Size 9039344 bytes
Variable Size 4060086272 bytes
Database Buffers 1157627904 bytes
Redo Buffers 24514560 bytes
数据库装载完毕。
数据库已经打开。
修复完成,接下来可以使用 PL/SQL快乐的登录到数据库了。
参考