在SQL Server中为具有多个数据文件的数据库创建快照。

3

如何为既有主数据文件(.mdf)又有次要数据文件(.ndf文件)的数据库创建数据库快照。 在创建时出现“缺少文件databaseName_EX”的异常。
该数据库文件包括databaseName_EX.ndf和databaseName.mdf。

CREATE DATABASE databaseName_report_snap ON
(Name ='databaseNameJ',
FileName='E:\SqlData\databaseName_report.snp')
AS SNAPSHOT OF databaseName;    
2个回答

4
CREATE DATABASE databaseName_report_snap ON
(Name ='databaseName',
FileName='E:\SqlData\databaseName_report.snp'),
(Name ='databaseName_EX',
FileName='E:\SqlData\databaseName_report_ext.snp')
AS SNAPSHOT OF databaseName;    

1
我编写了以下存储过程,用于对具有多个文件的数据库进行快照。它可能会帮助那些偶然遇到这个问题的人。
/*************************************************************************
DATE          VERSION             NAME                    REFERENCE
2018-03-08    Utility             Utsav Verma             Admin Task

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
This SP will create snapshot of given DB on given path.
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

Parameters:
@DBName                   : name of the database to be retsored
@FileGroupDestinationPath : location where snapshot database files will be placed

EXAMPLE CALL

EXEC dbo.USP_CreateSnapshotOfDB 
  @DBName='DBNAME',  
  @FileGroupDestinationPath ='C:\Work\Tmp\';
GO
**************************************************************************/
USE master
GO

CREATE OR ALTER PROCEDURE dbo.USP_CreateSnapshotOfDB(
  @DBName nvarchar(256),
  @FileGroupDestinationPath nvarchar(512))
AS
begin  
  DECLARE 
    @SQL nvarchar(max),
    @SSDBName sysname;
  
  SELECT @SSDBName=name FROM sys.databases WHERE source_database_id=(SELECT database_id FROM sys.databases WHERE name=@DBName);
  SELECT @SQL='DROP DATABASE '+ @SSDBName;
  EXEC sys.sp_executesql @SQL;

  IF OBJECT_ID('tempdb..##DBObjects' , 'U') IS NOT NULL
   drop TABLE ##DBObjects

  SELECT TOP(0) DB= CONVERT(sysname,''), *
  INTO ##DBObjects
  FROM sys.database_files

  EXEC sp_Msforeachdb 'use [?];INSERT INTO ##DBObjects select ''[?]'', * from sys.database_files ';

  SELECT @SQL='';
  SELECT @SQL='ALTER DATABASE '+@DBName+' SET SINGLE_USER WITH ROLLBACK IMMEDIATE; ';
  SELECT @SQL+='CREATE DATABASE '+@DBName+'_SnapShot ON ';
  SELECT @SQL+='(NAME='+NAME+',filename='''+@FileGroupDestinationPath+'\'+NAME+'''),'
  FROM ##DBObjects 
  WHERE db='['+@DBName+']' AND type_desc<>'LOG';
  SELECT @SQL=substring(@SQL,1,len(@SQL)-1);

  SELECT @SQL+= ' AS SNAPSHOT OF '+@DBName +'; ';
  SELECT @SQL+='ALTER DATABASE '+@DBName+' SET MULTI_USER;';

  EXEC sys.sp_executesql @SQL;

END
GO

第一个表格删除操作是什么意思? - Ahad Porkar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接