SSMS
 sql >> Cơ Sở Dữ Liệu >  >> Database Tools >> SSMS

Tập lệnh tốt nhất để khôi phục nhiều cơ sở dữ liệu với SQL Server 2012?

Kịch bản của Collet với một số chuyển thể phù hợp với tôi.

Trước tiên hãy bật xp_cmdshell bằng cách chạy các lệnh SQL sau:

-- To allow advanced options to be changed.  
EXEC sp_configure 'show advanced options', 1;  
GO  
-- To update the currently configured value for advanced options.  
RECONFIGURE;  
GO  
-- To enable the feature.  
EXEC sp_configure 'xp_cmdshell', 1;  
GO  
-- To update the currently configured value for this feature.  
RECONFIGURE;  
GO 

Tiếp theo, cập nhật tập lệnh bên dưới để khôi phục cơ sở dữ liệu từ các tệp sao lưu. Thay thế C:\Backup\ bằng thư mục cục bộ chứa các tệp .BAK của bạn và thay thế C:\Microsoft SQL Server\SQLINSTANCE\MSSQL\DATA\ với thư mục dữ liệu SQL Server của bạn. Tập lệnh này cũng giả định tên tệp .BAK khớp với tên cơ sở dữ liệu, nếu không, tập lệnh có thể sẽ tạo ra lỗi về tên tệp logic không khớp.

DECLARE @FilesCmdshell TABLE (
    outputCmd NVARCHAR (255)
)   
DECLARE @FilesCmdshellCursor CURSOR 
DECLARE @FilesCmdshellOutputCmd AS NVARCHAR(255)

INSERT INTO @FilesCmdshell (outputCmd) EXEC master.sys.xp_cmdshell 'dir /B  C:\Backup\*.bak'    
SET @FilesCmdshellCursor = CURSOR FOR SELECT outputCmd FROM @FilesCmdshell

OPEN @FilesCmdshellCursor
FETCH NEXT FROM @FilesCmdshellCursor INTO @FilesCmdshellOutputCmd
WHILE @@FETCH_STATUS = 0
BEGIN   
    DECLARE @sqlRestore NVARCHAR(MAX) = 'RESTORE DATABASE [' + SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX('.', @FilesCmdshellOutputCmd)) + '] FROM  DISK = N''C:\Backup\' + SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX('.', @FilesCmdshellOutputCmd)) + '.bak'' WITH  FILE = 1,  MOVE N''' + SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX('.', @FilesCmdshellOutputCmd)) + ''' TO N''C:\Microsoft SQL Server\SQLINSTANCE\MSSQL\DATA\' + SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX('.', @FilesCmdshellOutputCmd)) + '.mdf'',  MOVE N''' + SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX('.', @FilesCmdshellOutputCmd)) + '_log'' TO N''C:\Microsoft SQL Server\SQLINSTANCE\MSSQL\DATA\' + SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX('.', @FilesCmdshellOutputCmd)) + '_log.ldf'', NOUNLOAD,  STATS = 10'
    EXEC(@sqlRestore)

    FETCH NEXT FROM @FilesCmdshellCursor INTO @FilesCmdshellOutputCmd
END


  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Truy vấn SQL So sánh các giá trị trong mỗi 15 phút và hiển thị kết quả mỗi giờ

  2. SSMS cho phép các bản ghi trùng lặp trong một bảng, nhưng không cho phép các bản cập nhật tiếp theo

  3. Cách tìm tên máy chủ của SQL Server Management Studio

  4. Nhân bản một BẢNG bằng Microsoft SQL Server Management

  5. Làm cách nào để bạn gửi nhiều lệnh tới Sql PowerShell từ Dòng lệnh Windows?