发布网友 发布时间:2022-04-22 08:34
共2个回答
热心网友 时间:2022-04-13 14:06
日志损坏后启数据库方法:
SQL> conn / as sysdba
Connected.
SQL> select * from v$log;
--当前日志组指定在2号组上
SQL> host cp /home/1.txt /home/app/oracle/oradata/orcl/redo02.log;
破坏当前的日志文件,再进行切换
SQL> alter system switch logfile;
alter system switch logfile
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
实例崩溃了.因为lgwr死了,它是核心进程,一个核心进程死亡实例就会崩溃
SQL> conn sys /as sysdba
Enter password:
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 12192 bytes
Variable Size 1216332 bytes
Database Buffers 159383552 bytes
Redo Buffers 2973696 bytes
Database mounted.
ORA-00316: log 2 of thread 1, type 0 in header is not log file
ORA-00312: online log 2 thread 1: '/home/app/oracle/oradata/orcl/redo02.log'
我们想启动数据库,但是失败了.因为我们现在的文件根本不是一个日志文件.
SQL> alter system set _allow_resetlogs_corruption=true scope=spfile;
alter system set _allow_resetlogs_corruption=true scope=spfile
*
ERROR at line 1:
ORA-00911: invalid character
修改参数失败了.
SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile;
加上双引号,修改成功
System altered.
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
重新启动实例使修改的参数生效
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 75498852 bytes
Database Buffers 88080384 bytes
Redo Buffers 2945024 bytes
Database mounted.
SQL> show parameter allow
NAME TYPE VALUE
------------------------------------ ------------------------------ -----
_allow_resetlogs_corruption boolean TRUE
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery
我们想以resetlogs模式打开数据库,让数据库重新建立日志,但失败了.
我们做一个假恢复,欺骗数据库.走个形式,因为我们没有备份,不可能真恢复
SQL> recover database until cancel;
ORA-00279: change 819512 generated at 11/04/2011 11:44:11 needed for thread 1
ORA-002: suggestion :
/home/app/oracle/flash_recovery_area/ORCL/archivelog/2011_11_04/o1_mf_1_7_%u_.ar
c
ORA-00280: change 819512 for thread 1 is in sequence #7
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/home/app/oracle/oradata/orcl/system01.dbf'
ORA-01112: media recovery not started
数据库相信了,可以了,但打开的时候又崩溃了.
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 75498852 bytes
Database Buffers 88080384 bytes
Redo Buffers 2945024 bytes
Database mounted.
Database opened.
数据库好了!
热心网友 时间:2022-04-13 15:24
给你一个我日常维护数据库的方法吧。
SQL Server 2000数据库LDF损坏,只有mdf的恢复方法。
SQL Server 2000数据库文件遭到破坏的现象经常出现,数据库出错是否可以修复呢?答案是可以的,本日志以一个sql server 2000数据库,数据库日志文件ldf损坏了,mdf正常,数据库附加失败的修复方法总结一下,数据库数据恢复在很多时候比较复杂,当数据库存在大量错误的时候,使用DBCC修复也是不可以的,需要拆解数据库来抢救重要的数据,下面是较为常见的一种SQL Server 2000数据库修复方式:
1) 先及时把原来的数据库文件(如test.mdf)备份到其他地方。
2) 停掉服务器。
3) 删除这个test.mdf。
4) 重新建立一个test同名数据库。
5) 删除这个新建立的test数据库的test.ldf文件,并用开始备份好test.mdf文件覆盖这个新建立的test.mdf文件。
6) 启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何操作。
.设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”。
7) 设置test为紧急修复模式
update sysdatabases set status=-32768 where dbid=DB_ID('test')
此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表
8) 下面执行真正的恢复操作,重建数据库日志文件
dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf')
执行过程中,如果遇到下列提示信息:
服务器: 消息 5030,级别 16,状态 1,行 1
未能排它地锁定数据库以执行该操作。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
说明您的其他程序正在使用该数据库,如果刚才您在操作中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。
正确执行完成的提示应该类似于:
警告: 数据库 'test' 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。
9) 验证数据库一致性
dbcc checkdb('test')
10.设置数据库为正常状态
sp_dboption 'test','dbo use only','false'
如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。
11)最后一步,我们要将步骤6中设置的“允许对系统目录直接修改”一项恢复;