簡體   English   中英

我可以通過文件路徑/使用自身來收縮SQL數據庫日志文件嗎?

[英]Can I shrink a SQL database log file via file path / by using it's self?

我正在設計一個程序,該程序可以通過網絡縮小數據庫日志文件。

日志文件不會總是采用相同的格式,因此我想通過路徑名將其縮小。 為了在我寫此刻獲得路徑名:

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

這將返回錯誤:

在sys.database_files中找不到數據庫'AdventureWorks'的文件'c:\\ Program Files(x86)\\ Microsoft SQL Server \\ MSSQL10.50 \\ MSSQL \\ DATA \\ AdventureWorksLog.ldf'。 該文件不存在或已被刪除。

有什么方法可以使它選擇其自身,而不考慮日志文件的命名約定?

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<=@End
    Begin
        Declare @Db Varchar(255),@str varchar(Max)
        Select @Db=Name from #ttT Where Srno=@Strt
        Set @str=''
        Select  @str= 'ALTER DATABASE '''+Name+''' SET RECOVERY SIMPLE' from #tTt Where Srno=@Strt 
        --Exec (@str)
        DBCC shrinkdatabase (@Db)
        Print @Db
        Set @Strt=@Strt+1
    End

Drop Table  #tt
Drop Table  #ttT

最好的解決方案是從原始選擇列表中獲取ID,然后使用該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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM