序言
大早晨的就出现了这个问题……emmm
一觉醒来,发现应用和数据库服务器都重启了,应用连接数据库提示
连接失败: ORA-01033: ORACLE 正在初始化或关闭
哇 我的两个月的成果不会就这么没了吧?各种百度谷歌,终于找到了解决方法。按耐着激动的心情讲述一下过程,毕竟剧情跌宕起伏啊!
解决方法
过程一(卸载重载数据库)
教程来源
1. 打开sqlplus(废话)
sqlplus /nolog
conn / as sysdba;
- 卸载数据
shutdown normal;
3. 装载数据
startup mount;
5. 然后开启数据库……emmmmm,然后……就没有然后了 这个跟网上的教程不一样啊!!!!!!!!
alter database open;
这是我的
这是教程的
这还怎么玩……于是乎,我又寻找关于内部错误代码,参数[kcratr_nab_less_than_odr]
的错误。
要不说周六加班的孩子有虫吃呢,还是被我找到了。
过程二(重建控制文件)
--尝试直接recover database
SQL> RECOVER DATABASE ;
完成介质恢复。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [2266],
[13784], [13810], [], [], [], [], [], [], []
--再打开数据库,还是kcratr_nab_less_than_odr错误警告
--尝试不完全恢复
SQL> RECOVER DATABASE UNTIL CANCEL;
ORA-10879: error signaled in parallel recovery slave
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01152: 文件 1 没有从过旧的备份中还原
ORA-01110: 数据文件 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF'
--重建控制文件
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS 'D:/1.TXT';
数据库已更改。
SQL> SHUTDOWN IMMEDIATE;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP NOMOUNT;
ORACLE 例程已经启动。
Total System Global Area 1.3696E+10 bytes
Fixed Size 2188768 bytes
Variable Size 9764342304 bytes
Database Buffers 3892314112 bytes
Redo Buffers 37044224 bytes
--这一段是从D:/1.txt直接复制过来的
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 2 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 3 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG' SIZE 50M BLOCKSIZE 512
DATAFILE
'D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF',
'D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF',
'D:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF',
'D:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF'
CHARACTER SET AL32UTF8
;
控制文件已创建。
SQL> ALTER DATABASE OPEN;
数据库已更改。
--开启成功!!完结,撒花~
看到提示成功了,数据库用连接工具也连接上了,美滋滋的打开应用……
我$^&@^#&^$^$%^&@^#(@^&$*^@*&$^@(^$&@*^&@*%@*%*@!!!!
搞什么嘛。。。
于是乎,连接数据库
过程三(临时表空间创建)
教程来源
1. 先查询表空间情况:
select * from dba_tablespaces where contents='TEMPORARY';
查询返回一条记录,说明存在一个临时表空间,如下:
2. 再查看视图dba_temp_files
和v$tempfile
select * from dba_temp_files;select * from v$tempfile;
查询并没有返回记录;
3. 查看服务器上oracle
数据目录,发现存在临时表空间对应的数据文件: TEMP01.dbf
一个数据文件;
4. 向临时数据表空间添加数据文件
alter tablespace TEMP add tempfile 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\TEMP02.DBF' size 200m autoextend on;
--返回执行成功
[2018-09-08 09:39:11.778][data][550085][ORA]
alter tablespace TEMP add tempfile 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\TEMP02.DBF' size 200m autoextend on
Time: 0.382s
- 验证添加成功:
select * from dba_temp_files;
至此,应用终于欢快的启动了!!总结(作死行为)
如果你的数据库没有自动备份,建议时刻准备跑路!!!