2016-11-16 5 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%'

その後、私の2番目のスクリプトでは:このスクリプトの

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 @Str[email protected]+1 
    End 

Drop Table #tt 
Drop Table #ttT 
+0

は、SQL Server 2012以上でログファイル縮小することができるようになります。 –

+0

これはログファイルを縮小するだけでしょうか? – SCramphorn

+0

@SCramphornいいえ、 'SHRINKFILE'ではなく' SHRINKDATABASE'への呼び出しです。 – stuartd

関連する問題