- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 SQL Server 2008R2 中,我尝试使用此处给出的 SQL 查询仅恢复位于一个文件夹中的多个数据库/BAK 文件 - http://www.karaszi.com/sqlserver/code/sp_RestoreFromAllFilesInDirectory_2008sp1.txt
它使用了这样一个存储过程,其代码在最后给出 -
exec sp_RestoreFromAllFilesInDirectory 'C:\Mybakfiles\',
'D:\Mydatabasesdirectory\' ,
'C:\MylogDirectory\'
包含的文件夹 - 'C:\Mybakfiles\', 'D:\Mydatabasesdirectory\' , 'C:\MylogDirectory\'
您应该知道第一个文件夹的路径。可以找到第二个和第三个使用查询或通过 SSMS。有关查询,请参阅 alex aza 的回答 - What is the most efficient way to restore multiple databases in SQL 2008 .我在最后也给出了他的问题。
我将所有 BAK 文件复制到 - C:\Program Files\Microsoft SQL Server\MSSQL10_50.SS2008\MSSQL\Backup\
然后,我进入执行SP如下-
exec sp_RestoreFromAllFilesInDirectory 'C:\Program Files\
Microsoft SQL Server\MSSQL10_50.SS2008\MSSQL\Backup\',
'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SS2008\MSSQL
\DATA\' , 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SS2008\
MSSQL\DATA\'
并得到以下示例输出 -
RESTORE DATABASE AdventureWorksDW FROM DISK = 'C:\Program Files\
Microsoft SQL Server\MSSQL10_50.SS2008\MSSQL\Backup\AdventureWorksDW.bak'
WITH MOVE 'AdventureWorksDW_Data' TO 'C:\Program Files\Microsoft SQL
Server\MSSQL10_50.SS2008\MSSQL\DATA\AdventureWorksDW_Data.mdf', MOVE
'AdventureWorksDW_Log' TO 'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\DATA\AdventureWorksDW_Log.ldf'
问题 - 我在 management studio 中刷新了我的服务器,但没有看到新的数据库。为什么 ?我是否正确恢复了我的数据库?如果没有,我该如何使用下面提供的代码进行操作?如果你觉得代码不好,有没有其他可靠的方法去做吗?
PS - 遗憾的是 MS 不允许您轻松地做到这一点。
额外信息-
这里是恢复多个数据库的sp-
CREATE PROC [dbo].[sp_RestoreFromAllFilesInDirectory]
@SourceDirBackupFiles nvarchar(200), @DestDirDbFiles
nvarchar(200),@DestDirLogFiles nvarchar(200)
AS
--Originally written by Tibor Karaszi 2004. Use at own risk.
--Restores from all files in a certain directory. Assumes that:
-- There's only one backup on each backup device.
-- Each database uses only two database files and the mdf file
is returned first from the RESTORE FILELISTONLY command.
--Sample execution:
-- EXEC sp_RestoreFromAllFilesInDirectory 'C:\Mybakfiles\',
'D:\Mydatabasesdirectory\' ,’C:\MylogDirectory\’
SET NOCOUNT ON
--Table to hold each backup file name in
CREATE TABLE #files(fname varchar(200),depth int, file_ int)
INSERT #files
EXECUTE master.dbo.xp_dirtree @SourceDirBackupFiles, 1, 1
--Table to hold the result from RESTORE HEADERONLY. Needed to get
the database name out from
CREATE TABLE #bdev(
BackupName nvarchar(128)
,BackupDescription nvarchar(255)
,BackupType smallint
,ExpirationDate datetime
,Compressed tinyint
,Position smallint
,DeviceType tinyint
,UserName nvarchar(128)
,ServerName nvarchar(128)
,DatabaseName nvarchar(128)
,DatabaseVersion int
,DatabaseCreationDate datetime
,BackupSize numeric(20,0)
,FirstLSN numeric(25,0)
,LastLSN numeric(25,0)
,CheckpointLSN numeric(25,0)
,DatabaseBackupLSN numeric(25,0)
,BackupStartDate datetime
,BackupFinishDate datetime
,SortOrder smallint
,CodePage smallint
,UnicodeLocaleId int
,UnicodeComparisonStyle int
,CompatibilityLevel tinyint
,SoftwareVendorId int
,SoftwareVersionMajor int
,SoftwareVersionMinor int
,SoftwareVersionBuild int
,MachineName nvarchar(128)
,Flags int
,BindingID uniqueidentifier
,RecoveryForkID uniqueidentifier
,Collation nvarchar(128)
,FamilyGUID uniqueidentifier
,HasBulkLoggedData int
,IsSnapshot int
,IsReadOnly int
,IsSingleUser int
,HasBackupChecksums int
,IsDamaged int
,BegibsLogChain int
,HasIncompleteMetaData int
,IsForceOffline int
,IsCopyOnly int
,FirstRecoveryForkID uniqueidentifier
,ForkPointLSN numeric(25,0)
,RecoveryModel nvarchar(128)
,DifferentialBaseLSN numeric(25,0)
,DifferentialBaseGUID uniqueidentifier
,BackupTypeDescription nvarchar(128)
,BackupSetGUID uniqueidentifier
,CompressedBackupSize nvarchar(128)
)
--Table to hold result from RESTORE FILELISTONLY. Need to
generate the MOVE options to the RESTORE command
CREATE TABLE #dbfiles(
LogicalName nvarchar(128)
,PhysicalName nvarchar(260)
,Type char(1)
,FileGroupName nvarchar(128)
,Size numeric(20,0)
,MaxSize numeric(20,0)
,FileId int
,CreateLSN numeric(25,0)
,DropLSN numeric(25,0)
,UniqueId uniqueidentifier
,ReadOnlyLSN numeric(25,0)
,ReadWriteLSN numeric(25,0)
,BackupSizeInBytes int
,SourceBlockSize int
,FilegroupId int
,LogGroupGUID uniqueidentifier
,DifferentialBaseLSN numeric(25)
,DifferentialBaseGUID uniqueidentifier
,IsReadOnly int
,IsPresent int
,TDEThumbprint nvarchar(128)
)
DECLARE @fname varchar(200)
DECLARE @dirfile varchar(300)
DECLARE @LogicalName nvarchar(128)
DECLARE @PhysicalName nvarchar(260)
DECLARE @type char(1)
DECLARE @DbName sysname
DECLARE @sql nvarchar(1000)
DECLARE files CURSOR FOR
SELECT fname FROM #files
DECLARE dbfiles CURSOR FOR
SELECT LogicalName, PhysicalName, Type FROM #dbfiles
OPEN files
FETCH NEXT FROM files INTO @fname
WHILE @@FETCH_STATUS = 0
BEGIN
SET @dirfile = @SourceDirBackupFiles + @fname
--Get database name from RESTORE HEADERONLY, assumes there's
only one backup on each backup file.
TRUNCATE TABLE #bdev
INSERT #bdev
EXEC('RESTORE HEADERONLY FROM DISK = ''' + @dirfile + '''')
SET @DbName = (SELECT DatabaseName FROM #bdev)
--Construct the beginning for the RESTORE DATABASE command
SET @sql = 'RESTORE DATABASE ' + @DbName + ' FROM DISK = ''' +
@dirfile + ''' WITH MOVE '
--Get information about database files from backup device into temp table
TRUNCATE TABLE #dbfiles
INSERT #dbfiles
EXEC('RESTORE FILELISTONLY FROM DISK = ''' + @dirfile + '''')
OPEN dbfiles
FETCH NEXT FROM dbfiles INTO @LogicalName, @PhysicalName, @type
--For each database file that the database uses
WHILE @@FETCH_STATUS = 0
BEGIN
IF @type = 'D'
SET @sql = @sql + '''' + @LogicalName + ''' TO ''' +
@DestDirDbFiles + @LogicalName + '.mdf'', MOVE '
ELSE IF @type = 'L'
SET @sql = @sql + '''' + @LogicalName + ''' TO ''' +
@DestDirLogFiles + @LogicalName + '.ldf'''
FETCH NEXT FROM dbfiles INTO @LogicalName, @PhysicalName, @type
END
--Here's the actual RESTORE command
PRINT @sql
--Remove the comment below if you want the procedure to
actually execute the restore command.
--EXEC(@sql)
CLOSE dbfiles
FETCH NEXT FROM files INTO @fname
END
CLOSE files
DEALLOCATE dbfiles
DEALLOCATE files
查询以获取 DATA 和 LOG 文件的文件夹位置 -
declare @DefaultData nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'DefaultData', @DefaultData output
declare @DefaultLog nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'DefaultLog', @DefaultLog output
declare @MasterData nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\
Microsoft\MSSQLServer\MSSQLServer\Parameters', N'SqlArg0', @MasterData output
select @MasterData=substring(@MasterData, 3, 255)
select @MasterData=substring(@MasterData, 1, len(@MasterData) -
charindex('\', reverse(@MasterData)))
declare @MasterLog nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\
Microsoft\MSSQLServer\MSSQLServer\Parameters', N'SqlArg2', @MasterLog output
select @MasterLog=substring(@MasterLog, 3, 255)
select @MasterLog=substring(@MasterLog, 1, len(@MasterLog) -
charindex('\', reverse(@MasterLog)))
select
isnull(@DefaultData, @MasterData) DefaultData,
isnull(@DefaultLog, @MasterLog) DefaultLog
使用 SSMS 查找 DATA 和 LOG 文件夹 -
SSMS > 您的服务器 > 右键单击 > 属性 > 数据库设置节点。
最佳答案
首先感谢您提供sp_RestoreFromAllFilesInDirectory
的脚本,因为创作者主页不再可用。
您提供的脚本仅打印生成的 sql,因此您只需要取消注释该行:
EXEC(@sql)
我知道这个问题太老了但是我救了别人
关于sql - 需要帮助从一个文件夹恢复多个数据库/bak 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22207519/
如何检查我的文件夹中是否至少有一个文件*.bak? 最佳答案 您可以使用Directory.GetFiles()列出特定目录中的所有文件。第二个参数是要搜索的模式(包括通配符)。这样的事情应该做到这一
我使用相同的 .bak 文件创建备份。我制作了一个脚本来自动恢复这个备份。 RESTORE DATABASE [xxx] FROM DISK = N'xxx.bak' WITH FILE = 10
在 SQL Server 2008R2 中,我尝试使用此处给出的 SQL 查询仅恢复位于一个文件夹中的多个数据库/BAK 文件 - http://www.karaszi.com/sqlserver/c
我有 sed 语句来替换我文件中的一些内容。它正在使用名为 file.bak 的备份 copu在替换内容之前。 sed -i.bak -r "s#^(.*/abc_def_APP/).*(/appli
The database was backed up on a server running version 8.00.2039. That version is incompatible with
我没有做过多少 SQL,对此还是很陌生,所以请原谅这可能是一个基本问题。 我被要求研究创建一个 SQL 作业来备份我们的数据库,将 .baks 存储在另一台机器上,然后将它们恢复到第二台服务器。我一直
我有一个在 Visual Studio 2008 中创建的网站,我需要将其上线。如何将数据库文件备份到 .bak,以便将其交给托管公司放置在服务器上? 最佳答案 从 SQL 提示符: BACKUP D
我有一个包含数据库备份的 bak 文件。 我想将这个数据库恢复到一个新位置,我需要从这个文件中检索数据库名称,知道如何做吗? 我需要它来覆盖数据文件位置和日志文件位置。 感谢您的帮助。 最佳答案 RE
我正在使用 C#、.NET 3.5 和 SMO 在 SQL Server 2005 中创建数据库(我们的生产数据库)到其他一些数据库(我们的 DEV 和测试数据库)的副本。 我已经设法从数据库创建备份
我使用 perl 脚本运行 perl -p -i.bak -e "..." *.sh dir/*.sh 这创建了每个文件的副本,如 script.sh script.sh.bak 我现在想从 .bak
在 Perl 中,我使用通用模式遍历文件: $^I=".bak"; while(<>) { s/pattern/replacement/g; print; } $^I 将在其中创建备份。但是,
我需要从我的生产数据库的 .bak 自动创建重复的数据库。我已经通过 GUI 进行了多次操作,但是当从命令行执行时,我对各种开关感到有些困惑,特别是文件名和确保正确复制所有权。 只是寻找实现这一点的
他们是否有可能使用 Microsoft SQL Server Management Studio 从 .bak 文件中恢复选定的表。通过使用查询浏览器,我可以在脚本选项卡中打开备份文件,从而选择所需的
我知道这是一个奇怪的问题,但是出于测试目的是否可以故意为损坏的 MS SQL Server 数据库制作 .bak 文件?我想让它损坏,这样我就可以尝试通过故障排除进行恢复,并提高我的数据库恢复故障排除
我换过电脑。因此我无法访问我的 MySQL 数据库。但是,我能够获取 my 2013-05-09 1145.ini.bak 文件。我能否从该文件中检索所有文件夹和数据。 我已经尝试用谷歌搜索这个,但没
我在 MySQL 中有一个数据库,我需要在 .bak 文件中备份它。我发现了很多关于将 .bak 转换为 .sql 的主题,但没有找到关于将 .sql 转换为 .bak 的主题。可行吗?如果是这样 -
我正在尝试在 visual studio 上运行一个经典的 asp 项目,因此我正在尝试恢复数据库。尝试恢复时,我似乎找不到 .bak 文件。它在 C 驱动器中不可见。我查了一下,发现它与权限有关。我
我正在尝试在 visual studio 上运行一个经典的 asp 项目,因此我正在尝试恢复数据库。尝试恢复时,我似乎找不到 .bak 文件。它在 C 驱动器中不可见。我查了一下,发现它与权限有关。我
我们有一个大型 SQL 数据库,我们在每晚备份中将其拆分为 4 个单独的 bak 文件,以便可以更轻松地将其发送到异地。我们使用这个语句(数据库名称已更改) BACKUP DATABASE [Data
我正在 MAC 上通过 Docker 运行本地主机数据库。我有一项作业要求我将 .bak 文件与我编写的程序一起提交。我使用 Azure Data Studio 作为 DBMS。我在任何地方都找不到这
我是一名优秀的程序员,十分优秀!