方法一:
第一步:
backup
log
database_name
with
no_log
或者
backup
log
database_name
with
truncate_only
--
no_log和truncate_only是在这里是同义的,随便执行哪一句都可以。
第二步:
dbcc
shrinkdatabase
(database_name,[,target_percent])
--
database_name是要收缩的数据库名称;target_percent是数据库收缩后的数据库文件中所要的剩余可用空间百分比。
2.收缩一次一个特定数据库中的数据或日志文件,执行
dbcc
shrinkfile(file_id,[,target_size])
--
file_id是要收缩的文件的标识
(id)
号,若要获得文件
id,请使用
file_id
函数或在当前数据库中搜索
sysfiles;target_size是用兆字节表示的所要的文件大小(用整数表示)。如果没有指定,dbcc
shrinkfile
将文件大小减少到默认文件大小。两个dbcc都可以带上参数notruncate或truncateonly,具体意思查看联机帮助.
方法二:
第一步:
先备份整个数据库以备不测
。
第二步:
备份结束后,在query
analyzer中执行如下的语句:
exec
sp_detach_db
yourdbname,true
--卸除这个db在mssql中的注册信息
第三步:
到日志的物理文件所在的目录中去删除该日志文件或者将该日志文件移出该目录
第四步:
在query
analyzer中执行如下的语句:
exec
sp_attach_single_file_db
yourdbname,'
d:\mssql\data\yourdbname_data.mdf
'
--以单文件的方式注册该db,如果成功则mssql将自动为这个db生成一个500k的日志文件。
方法三:
1.
进入企业管理器,选中数据库,比如demo
2.
所有任务->分离数据库
3.
到数据库文件的存放目录,将muonline_log.ldf文件删除,以防万一,你可以拷出去
4.
企业管理器->附加数据库,选muonline,这个时候你会看见日志文件这项是一个叉,不要紧,继续,此时数据库就会提示你该数据库无日志是否创建一个新的,确定就是了。
5.
记得数据库重新附加后用户要重新设置一下。
如果以后,不想要它变大:
sql2000下使用:
在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型。
或用sql语句:
alter
database
数据库名
set
recovery
simple
日志损坏后启数据库方法: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 1218992 bytes
Variable Size 121636432 bytes
Database Buffers 159383552 bytes
Redo Buffers2973696 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 Buffers2945024 bytes
Database mounted.
SQL>show parameter allow
NAME TYPE VALUE
------------------------------------ ------------------------------ -----
_allow_resetlogs_corruption booleanTRUE
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-00289: 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 Buffers2945024 bytes
Database mounted.
Database opened.
数据库好了!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)