问题现象:
解决过程:
通过navicat工具连接报错:ORA-01034: ORACLE not available(Oracle 不存在),ORA-27101: shared memory realm does not exist。
首先检查服务端配置文件的问题,找到服务端监听文件listener.ora,客户端的sqlnet.ora和tnsnames.ora两个文件,我的服务端安装路径是; /usr/local/oracle/product/11.2.0/db_1/network/admin:
检查两个tnsnames.ora的ip和prot是否一致,必须要相同. 检查完上面三个文件ip,端口,和其他参数都匹配就可以排除不是配置文件原因。
再次重启监听:lsnrctl start,查看监听状态lsnrctl status,报错
原因是由于实例没有注册到监听服务中去,于是注册实例
以SYS用户身份登录Oracle
sqlplus /nolog
connect /as sysdba
实例注册到oracle中:alter system register;
再查看监听状态如下:发现实例已经处于ready状态了。
然后启动oracle,Oracle启动失败,报错:ORA-03113: end-of-file on communication channel
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 6.0801E+10 bytes
Fixed Size 7660704 bytes
Variable Size 8724155232 bytes
Database Buffers 5.1942E+10 bytes
Redo Buffers 126554112 bytes
Database mounted.
ORA-03113: end-of-file on communication channel
Process ID: 7512
Session ID: 406 Serial number: 27398
先找到Oracle告警日志位置,然后查看告警日志。
告警日志文件是一类特殊的跟踪文件(trace file),告警日志文件命名格式一般为:alert_
tail -f -n 1000 /usr/local/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
日志信息如下:
解决方法:根据实际情况选择合理的清除操作。
可以直接进入RMAN删除归档日志腾出空间。
也可以:物理删除归档日志文件->进入RMAN->crosscheck archivelog all;->delete noprompt expired archivelog all;
$ rman target /
RMAN> crosscheck archivelog all; //检查控制文件和实际物理文件的差别
RMAN> delete expired archivelog all; //删除所有过期日志,同步删除控制文件的信息和实际物理文件的信息
遇到的问题
错误1:
RMAN> crosscheck archivelog all;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of crosscheck command at 03/28/2019 12:59:23
RMAN-12010: automatic channel allocation initialization failed
RMAN-06403: could not obtain a fully authorized session
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3640
Additional information: -2000252533
RMAN> exit
SQL> shutdown immediate
SQL> startup mount //启动数据库实体但不打开数据库
错误2:数据库启动报错
ORA-03113: end-of-file on communication channel
报错信息是启动的时候找不到xxx文件,我猜是由于清理归档日志造成的,后面我重建日志文件后问题解决,重建日志文件方法如下
解决办法:
SQL> shutdown immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
SQL> startup mount;
ORACLE 例程已经启动。
SQL>select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 0 104857600 1 NO UNCURRENT 670680 07-12月-07
2 1 15 104857600 1 NO unactive 696119 07-12月-07
3 1 0 104857600 1 NO Unactive 650182 07-12月-07
已选择3行。
alter database clear unarchived logfile group 1; /*重建日志文件*/
数据库已经更改.
alter database clear unarchived logfile group 2;
数据库已经更改.
alter database clear unarchived logfile group 3;
数据库已经更改.
SQL>shutdown;
已经卸载数据库。
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
数据库装载完毕。
数据库已经打开。
此时连接数据库已经能连接上了