批量Shink所有日志或数据文件

近期,因磁盘空间问题,当执行常规性维护如碎片整理等后会报磁盘空间不足警告,因条件又无法及时添加磁盘空间,这时候不得不对LOG文件做收缩,如果遇到库比较多的实例上,一个一个来却是比较麻烦,可通过如下SQL来处理:

---定义变量

DECLARE @DBName AS NVARCHAR(100)

DECLARE @LogFileName AS NVARCHAR(100)

DECLARE @exec_stmt nvarchar(625)

--创建临时表来保存日志文件名

CREATE TABLE #logfiles

(

dbname NVARCHAR(100), [filename] NVARCHAR(100),

)

--排除系统数据库

DECLARE curDBName CURSOR FOR

SELECT [name] FROM sys.databases

WHERE name NOT IN (‘master‘, ‘tempdb‘, ‘model‘, ‘msdb‘)

?AND state_desc = ‘ONLINE‘

--逐一读取文件列表名字到游标中

OPEN curDBName

FETCH NEXT FROM curDBName INTO @DBName

WHILE @@FETCH_STATUS = 0

BEGIN

SELECT @exec_stmt = ‘INSERT INTO #logfiles

SELECT ‘‘‘ + @DBName + ‘‘‘ , name FROM ‘ + quotename(@DBName, N‘[‘) + N‘.dbo.sysfiles

WHERE groupid = 0‘

EXECUTE (@exec_stmt)

FETCH NEXT FROM curDBName INTO @DBName

END

CLOSE curDBName

DEALLOCATE curDBName

--选择所有log文件名

DECLARE curLogName CURSOR FOR

SELECT dbname, [filename] FROM #logfiles

--开始shrink每一个Log文件

OPEN curLogName

FETCH NEXT FROM curLogName INTO @DBName, @LogFileName

WHILE @@FETCH_STATUS = 0

BEGIN

?SELECT @exec_stmt = ‘ USE ‘ + quotename(@DBName, N‘[‘) +

N‘ CHECKPOINT ‘ +

N‘ BACKUP LOG ‘ + quotename(@DBName, N‘[‘) + ‘ WITH NO_LOG ‘ +

N‘ DBCC SHRINKFILE (‘ + quotename(@LogFileName, N‘[‘) + N‘, 0, TRUNCATEONLY)‘

SELECT (@exec_stmt) ?

--EXECUTE (@exec_stmt)

?

?FETCH NEXT FROM curLogName INTO @DBName, @LogFileName

END

CLOSE curLogName

DEALLOCATE curLogName

--清除临时表

DROP TABLE #logfiles

sa.

时间: 2024-10-16 23:46:54

批量Shink所有日志或数据文件的相关文章

oracle 普通数据文件备份与恢复

普通数据文件指:非system表空间.undo_tablespace表空间.临时表空间和只读表空间的数据文件.它们损坏导致用户数据不能访问,不会导致db自身异常.实例崩溃.数据库不恢复就无法启动的情况. 恢复这样的数据文件可以采用高可用策略,在数据库OPEN状态下进行 10.1 普通数据文件损坏的后果 普通数据文件损坏后,只是用户的业务数据不同程度上无法访问(查询与修改),报错 ORA-01578,执行命令的会话不会被中断,即使是数据文件头部损坏检查点发生时实例也不会崩溃 --1 实例启动时,若

批量迁移Oracle数据文件,日志文件及控制文件

有些时候需要将Oracle的多个数据文件以及日志文件重定位或者迁移到新的分区或新的位置,比如磁盘空间不足,或因为特殊需求.对于这种情形可以采取批量迁移的方式将多个数据文件或者日志文件实现一次性迁移.当然备份恢复也是其中的方式之一.本文主要描述如何使用批量方式来迁移数据文件,日志文件.如需要也可以将整个数据库迁移到新的位置以及重命名数据库. [sql] view plain copy print? 1.环境及需求 [email protected]:~> cat /etc/issue Welcom

修改数据文件和日志文件路径

环境及需求操作系统:Microsoft Windows Server 2008 R2 Enterprise数据库:Microsoft SQL Server 2008 R2 (SP3)服务器增加Fusion-io存储,需将数据库文件迁移到Fusion-io迁移文件必定涉及数据库服务的重启,给定维护时间1小时.服务器上只安装一个数据库实例,实例下面有33个用户数据库(一个小游戏对应一个库),部分数据库有多个数据文件.考虑到要迁移的数据文件个数有107个,最佳方式是使用: ALTER DATABASE

数据文件 和日志文件 收缩 Sql Server

A. 将数据文件收缩到指定的目标大小 以下示例将 UserDB 用户数据库中名为 DataFile1 的数据文件的大小收缩到 7 MB. 复制 USE UserDB; GO DBCC SHRINKFILE (DataFile1, 7); GO B. 将日志文件收缩到指定的目标大小 以下示例将 AdventureWorks2008R2 数据库中的日志文件收缩到 1 MB.若要允许 DBCC SHRINKFILE 命令收缩文件,首先需要通过将数据库恢复模式设置为 SIMPLE 来截断该文件. 复制

ORACLE查看数据文件-控制文件-日志文件-表空间信息

1.查看当前数据库中的所有用户:select username from dba_users; 2.查看当前会话登录的用户:show user或select username from user_users; 3.查看某用户的所有表:select * from dba_tables where owner='用户名';--用户名要大写或select table_name from dba_tables where owner='NETFOLDER'; 4.查看控制文件的位置等信息:select

控制文件,日志文件,数据文件

控制文件中包含了数据库信息.CKPT 进程信息.REDO 信息.数据文件和表空间信息等重要的数据库信息,也包含了日志切换的历史信息和 RMAN 备份的 CATALOG信息 在线日志文件主要用于记录数据库的变更信息. 数据文件是存储Oracle数据库中的数据的,是Oracle数据库最核心的文件.Oracle数据库中的表,索引等都是记录在数据文件中中的.其中系统表空间包含的数据文件里保存了数据库的元数据(metdata),如果metadata出现故障,访问数据库的数据时就会发生问题. 数据文件中还有

无备份有完全归档日志情况下恢复数据文件

如果一个数据文件创建时到当前所有的归档日志都存在的话,那么可以通过offline datafile,recover datafile,online datafile的方式直接恢复数据文件,此种恢复属于介质恢复. 下面我们做一个实验: 查看当前所有的归档日志的初始scn以及终止scn:(status 为 A 表示available,D表示已删除) SQL> col name for a100 SQL> select sequence#,name,first_change#,next_change

oracle查看数据文件, 控制文件, 及日志文件命令

一. 查看数据文件SQL> select name from v$datafile; NAME--------------------------------------------------------D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSTEM01.DBFD:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOTBS01.DBFD:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSAUX01

人工误删除InnoDB ibdata数据文件与ib_logile重做日志文件如何恢复详细过程

有人因为不熟悉InnoDB引擎,而误删除innoDB ibdata(数据文件)和ib_logfile(redo log重做事务日志文件),结果导致了悲剧的发生.如果有做主从复制同步那还好,如果是单机呢?如何恢复? 1)使用rm –f ib* 删除数据文件和重做日志文件 下面就来使用具体看看如何恢复. 若此时你发现数据库还可以正常工作,数据照样可以写入,切记,这时千万别把mysqld进程杀死,否则没法挽救. 先找到mysqld的进程pid,如下所示. mysql01:/data/mysql3306