2016-11-16 38 views
0

我正在設計一個程序,通過網絡收縮數據庫日誌文件。我可以通過文件路徑/使用它自己縮小SQL數據庫日誌文件嗎?

日誌文件不一定總是相同的格式,所以我想通過路徑名縮小它。爲了讓此刻的路徑名稱我寫:

select top 2 physical_name as current_file_location FROM sys.master_files where physical_name like '%adventureworks%' 

我的腳本來收縮日誌文件是:

ALTER DATABASE adventureworks2012 SET RECOVERY SIMPLE DBCC 
SHRINKFILE ('c:\Program Files (x86)\Microsoft SQL Server\MSSQL10.50\MSSQL\DATA\adventureworks2012_log.ldf', 1) 
ALTER DATABASE adventureworks2012 SET RECOVERY FULL 

這將返回錯誤:

Could not locate file 'c:\Program Files (x86)\Microsoft SQL Server\MSSQL10.50\MSSQL\DATA\AdventureWorksLog.ldf' for database 'AdventureWorks' in sys.database_files. The file either does not exist, or was dropped.

是否有一個我可以讓它選擇自己,而不管日誌文件的命名約定如何?

回答

0

最好的解決方案是從原始選擇列表中獲取ID並使用它來縮小它。

select top 2 file_id, physical_name as current_file_location FROM sys.master_files where physical_name like '%adventureworks%'

然後在我的第二個腳本:

DBCC SHRINKFILE (2,1)

0
Declare @string Varchar(8000), @Strt Int ,@End Int 
    select name INto #tt from sys.databases where is_read_only=0 and state=0 
    and name NOT In ('master','model','tempdb','msdb') 

    Select ROW_NUMBER()Over(Order by Name)SRNO,name INto #TTT from #tt 
    Set @Strt=1 
    Select @End=Max(Srno)from #ttt 

    While @Strt<[email protected] 
    Begin 
     Declare @Db Varchar(255),@str varchar(Max) 
     Select @Db=Name from #ttT Where [email protected] 
     Set @str='' 
     Select @str= 'ALTER DATABASE '''+Name+''' SET RECOVERY SIMPLE' from #tTt Where [email protected] 
     --Exec (@str) 
     DBCC shrinkdatabase (@Db) 
     Print @Db 
     Set @[email protected]+1 
    End 

Drop Table #tt 
Drop Table #ttT 
+0

從這個腳本,您將能夠收縮日誌在SQL Server 2012及以上的文件。 –

+0

這只是收縮日誌文件? – SCramphorn

+0

@SCramphorn不,因爲它是對'SHRINKDATABASE'而不是'SHRINKFILE'的調用 – stuartd

相關問題