误删表空间

不小心在oradata删除了表空间,折腾了一天才搞定。上午还没发现,一直以为是listener.ora和tnsnames.ora的问题,各种修改还是不能够登录数据库。现记录一下解决流程。
1: sysdba 登录 SQL> sqlplus/ as sysdba
2:SQL> shutdown immediate
SQL> shutdown abort --停用数据库
3.启动数据库到挂载模式
SQL>startup mount
报错 没有找到initxcdb.ora 文件,自己又从其他地方copy一个过来,(xcdb为数据库实例)修改如下:
SPFILE='C:\oracle\product\10.2.0\db_1\database\SPFILEXCDB.ora'
这个文件应该是加载SPFILEXCDB.ora文件的。
修改后继续报异常:ORA-12700: invalid NLS parameter value (nls_language)
这个应该是数据库字符集的问题。网上各种搜索之,主要有一下集中解决办法
1:修改注册表:HKEY_LOCAL_MACHINE:SOFTWARE:ORACLE:KEY_OraDb10g_home1 修改NLS_LANG 为AMERICAN_AMERICA.ZHS16GBK.(与SPFILEXCDB.ora的NLS_LANG一致)
2.修改环境变量:cmd 命令窗口:
set NLS;
出来一行:NLS_LANG=SIMPLIFIED CHINESE
这是因为之前曾经把该环境变量设为中文简体事实上在服务器端运行set NLS命令时,结果结果显示:环境变量NLS没有定义.so.应将客户端去掉这个设置
set NLS_LANG=
这样就行了。
3.SPFILEXCDB.ora 用editplus打开(utf-8)里面是二进制,把乱码删除(第一行),把
*.nls_language='AMERICAN_AMERICA.ZHS16GBK' 这一行删除,之后再把此内容复制一份到a.txt.(随意命名)。把a.txt 复制到C:\oracle(起初放到database并不行,索性随便找个文件)执行如下sql》
create spfile from pfile='C:\oracle\a.txt';执行成功后在
SQL>startup mount 就可以了。

以上三种操作了第一步,之后不行又进行了第二步,执行第二步的时候并没有这个环境变量,我自己创建了一个 set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK,与搜索的解决方案相反,我想让环境变量的值和注册表以及SPFILEXCDB的值一样。让并卵,之后也没有修改回来,(第二天去看这个set NLS; 并没有,可能这里修改的只是一个临时环境变量。)之后按照第三步来就好了。
4 .SQL>alter database datafile 'C:\ORCACLE\ORADATA\XCDB\XINCHOU.DBF'offline drop; -----删除表空间文件
.SQL>alter database open;
alter database open 时报错,(报错信息可以看出你表空间的信息,依照这个删除就行)原来还有一个表空间被删除了,
SQL>alter database datafile
'C:\ORCACLE\ORADATA\XCDB\XC.DBF'offline drop;

.SQL>alter database open;
此时数据库已经可以正常登陆了。
5,删除表空间
SQL>drop tablespace XINCHOU including contents and datafiles;---删除表空间
执行次布提示表空间已经不存在。就结束了。
阅读更多

没有更多推荐了,返回首页