可直接看末尾的关键步骤。
被ORACLE支配的恐惧,含泪改ora错,记录一下。
事情起因迁移表空间,在经过对表空间offline、拷贝至新盘、成功修改完新路径后,删除原来路径的表空间时,显示被占用,快下班了头脑一热把oracleserviceORCL服务关掉了。
再次启动后点击plsql登录时就显示:ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务。
随即网上查,考虑1.修改监听文件(但是之前的监听文件一直都能正常使用,感觉不是这个问题)
查看监听状态:在cmd中输入lsnrctl status,发现没有监听到对应ORCL实例
修改监听:D:\app\Danieaz\product\11.2.0\dbhome_1\NETWORK\ADMIN\listerner.ora
# listener.ora Network Configuration File: D:\app\Danieaz\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\app\Danieaz\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\app\Danieaz\product\11.2.0\dbhome_1\bin\oraclr11.dll")
/****以下为添加的内容***/
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = D:\app\Danieaz\product\11.2.0\dbhome_1)
(SID_NAME = ORCL)
)
/*********************/
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
ADR_BASE_LISTENER = D:\app\Danieaz
登录数据库发现报错:ora-01034:数据库不可用和ora-27101:共享内存什么的不存在= =
看不太明白,之后去D:\app\Danieaz\product\11.2.0\dbhome_1\database查看oradim.log日志文件发现在服务中重启oracleserviceORCL时,报错:
ora-01092:实例启动中断 和ora-18008:无法找到OUTLN方案。 这时发现原因应该是数据库实例没打开,从而导致监听识别不了实例。所以第一步的监听不是问题。
2.重新创建用户OUTLN
查找资料后发现,要解决ora-01092和18008,需要以操作系统的权限登录、startup mount、修改参数文件、重新创建OUTLN用户:
(1)打开cmd,sqlplus /nolog;conn / as sysdba(斜杠前后有空格),结果报错ora-12560错误。第一步就卡住,自闭了。。。
尝试用sys/change_on_install、system/manager登录,显示权限不足。
怀疑是否授权。打开管理界面-配置-本地用户和组-组的ora_dba,查看是否添加本地用户,发现有administrator。
进入D:\app\Danieaz\product\11.2.0\dbhome_1\BIN,用管理员打开sqlplus.exe程序,输入用户名: / as sysdba( / 前后有空格),报错权限不足而不是协议适配器错误。
经大佬指点,同时看到一篇帖子说要在sqlnet.ora文件中,将SQLNET.AUTHENTICATION_SERVICE=(NONE)的NONE修改为NTS。(NONE表示不允许操作系统登入dba,NTS可以)
重新用管理员打开sqlplus.exe程序,输入用户名: / as sysdba。终于连接上了T T。
(2)连接后:
1、SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 591396864 bytes
Fixed Size 1291916 bytes
Variable Size 314575220 bytes
Database Buffers 268435456 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
2、修改replication_dependency_tracking参数
SQL> alter system set replication_dependency_tracking =false scope=spfile;
系统已更改。
3、启动数据库至open状态
SQL> shutdown immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area 591396864 bytes
Fixed Size 1291916 bytes
Variable Size 318769524 bytes
Database Buffers 264241152 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
数据库已经打开。
4、创建outln用户
SQL> create user outln identified by outln;
在创建这一步报错:
ora-00604:递归SQL级别1出现错误和ora-18008:无法找到OUTLN方案。
(又自闭了。。。仿佛陷入了循环。白敬亭救我。)
查资料有提到不直接create user outln identified by outln,在oracle 11g中可直接运行脚本(用于创建用户授权及建表等),尝试发现不行:SQL>@D:\app\Danieaz\product\11.2.0\dbhome_1\RDBMS\ADMIN\doptim.bsq
第1行出现错误:
ora-00604:递归SQL级别1出现错误
ora-18008:无法找到OUTLN方案
又尝试关闭MDSYS.sdo_st_syn_create触发器还是不行:
SQL> ALTER TRIGGER MDSYS.sdo_st_syn_create DISABLE;
ALTER TRIGGER MDSYS.sdo_st_syn_create DISABLE
*
第 1 行出现错误:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-18008: 无法找到 OUTLN 方案
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-18008: 无法找到 OUTLN 方案
这时突然发现使用startup upgrade升级模式启动数据库,去建outln用户居然成功了!
SQL> shutdown immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup upgrade
ORACLE 例程已经启动。
Total System Global Area 6580703232 bytes
Fixed Size 2188128 bytes
Variable Size 3070233760 bytes
Database Buffers 3489660928 bytes
Redo Buffers 18620416 bytes
数据库装载完毕。
数据库已经打开。
SQL> create user outln identified by outln;
用户已创建。
SQL> alter system set replication_dependency_tracking =true scope=spfile;
系统已更改。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area 6580703232 bytes
Fixed Size 2188128 bytes
Variable Size 3070233760 bytes
Database Buffers 3489660928 bytes
Redo Buffers 18620416 bytes
数据库装载完毕。
数据库已经打开。
到这一步数据库登录恢复正常,问题解决。
后续有大佬看到解释说 startup upgrade升级模式下会禁用系统触发器。
总结过程,关键为以下步骤:
在bin目录下打开sqlplus.exe:
请输入用户名: / as sysdba
已连接到空闲例程。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 6580703232 bytes
Fixed Size 2188128 bytes
Variable Size 3070233760 bytes
Database Buffers 3489660928 bytes
Redo Buffers 18620416 bytes
数据库装载完毕。
SQL> alter system set replication_dependency_tracking =false scope=spfile;
系统已更改。
SQL> shutdown immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup upgrade
ORACLE 例程已经启动。
Total System Global Area 6580703232 bytes
Fixed Size 2188128 bytes
Variable Size 3070233760 bytes
Database Buffers 3489660928 bytes
Redo Buffers 18620416 bytes
数据库装载完毕。
数据库已经打开。
SQL> create user outln identified by outln;
用户已创建。
SQL> alter system set replication_dependency_tracking =true scope=spfile;
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area 6580703232 bytes
Fixed Size 2188128 bytes
Variable Size 3070233760 bytes
Database Buffers 3489660928 bytes
Redo Buffers 18620416 bytes
数据库装载完毕。
数据库已经打开。