[英]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.