วิธีการคืนค่าไปยังฐานข้อมูลอื่นในเซิร์ฟเวอร์ sql


224

ฉันมีการสำรองข้อมูลของDatabase1จากสัปดาห์ที่แล้ว การสำรองข้อมูลจะทำทุกสัปดาห์ในตารางเวลาและฉันจะได้รับ.bakไฟล์ ตอนนี้ฉันต้องการซอกับข้อมูลบางอย่างดังนั้นฉันต้องการคืนค่าไปยังฐานข้อมูลอื่น - ฐานข้อมูล 2

ฉันได้เห็นคำถามนี้: เรียกคืนฐานข้อมูล SQL Server ในพีซีเครื่องเดียวกันที่มีชื่อแตกต่างกันและขั้นตอนที่แนะนำคือการเปลี่ยนชื่อฐานข้อมูลดั้งเดิม แต่ฉันออกจากตัวเลือกนั้นเพราะฉันอยู่ในเซิร์ฟเวอร์การผลิตและฉันไม่สามารถทำมันได้

มีวิธีอื่นในการกู้คืนDatabase2หรืออย่างน้อยฉันจะเรียกดูข้อมูลของไฟล์. bak นั้นได้อย่างไร

ขอบคุณ

ป.ล. : คำตอบที่สองจากลิงค์ด้านบนดูมีแนวโน้ม แต่ก็ยังคงมีข้อผิดพลาด

Restore Filelist กำลังยกเลิกอย่างผิดปกติ

คำตอบ:


304

คุณสามารถสร้าง db ใหม่จากนั้นใช้ "Restore Wizard" เพื่อเปิดใช้งานตัวเลือก Overwrite หรือ;

ดูเนื้อหา;

RESTORE FILELISTONLY FROM DISK='c:\your.bak'

จดชื่อโลจิคัลของ. mdf & .ldf จากผลลัพธ์จากนั้น;

RESTORE DATABASE MyTempCopy FROM DISK='c:\your.bak'
WITH 
   MOVE 'LogicalNameForTheMDF' TO 'c:\MyTempCopy.mdf',
   MOVE 'LogicalNameForTheLDF' TO 'c:\MyTempCopy_log.ldf'

เพื่อสร้างฐานข้อมูลที่มีเนื้อหาของMyTempCopyyour.bak

ตัวอย่าง (คืนค่าการสำรองข้อมูลของฐานข้อมูลที่เรียกว่า 'creditline' เป็น 'MyTempCopy';

RESTORE FILELISTONLY FROM DISK='e:\mssql\backup\creditline.bak'

>LogicalName
>--------------
>CreditLine
>CreditLine_log

RESTORE DATABASE MyTempCopy FROM DISK='e:\mssql\backup\creditline.bak'
WITH 
   MOVE 'CreditLine' TO 'e:\mssql\MyTempCopy.mdf',
   MOVE 'CreditLine_log' TO 'e:\mssql\MyTempCopy_log.ldf'

>RESTORE DATABASE successfully processed 186 pages in 0.010 seconds (144.970 MB/sec).

5
สวัสดีฉันดูเหมือนจะหายไปบางสิ่งบางอย่างมันทำให้เกิดข้อผิดพลาดbackkup set holds a backup of a database other than existing "tmp" databaseซึ่งฉันเข้าใจ toวลีควรเป็นเส้นทางกายภาพจริงMyTempCopyหรือไม่
LocustHorde

แปลกtoคือฐานข้อมูล & บันทึกตำแหน่งสำหรับฐานข้อมูลใหม่อัปเดตตัวอย่างด้านบน
Alex K.

52
สำหรับใครก็ตามที่ลองใช้สิ่งนี้อย่าสร้าง MyTempCopy มันจะถูกสร้างขึ้นในระหว่างการกู้คืน
Blazes

3
ทำงานเฉพาะกับ REPLACE, RECOVERY, options ในกรณีของฉัน (SQL2012) cr dba.stackexchange.com/questions/51489/…
dc2009

7
ควรใช้ REPLACE, RECOVERY เพื่อทำสิ่งนี้ ดังนั้นจะเป็น: RESTORE DATABASE MyTempCopy FROM DISK='e:\mssql\backup\creditline.bak' WITH REPLACE, RECOVERY, MOVE 'CreditLine' TO 'e:\mssql\MyTempCopy.mdf', MOVE 'CreditLine_log' TO 'e:\mssql\MyTempCopy_log.ldf'
Raihan

67

SQL Server 2008 R2:

สำหรับฐานข้อมูลที่มีอยู่ที่คุณต้องการ "กู้คืน:: จากการสำรองข้อมูลของฐานข้อมูลอื่นให้ทำตามขั้นตอนเหล่านี้:

  1. จากแถบเครื่องมือคลิกปุ่มการตรวจสอบกิจกรรม
  2. คลิกกระบวนการ กรองตามฐานข้อมูลที่คุณต้องการกู้คืน ฆ่ากระบวนการที่กำลังทำงานอยู่โดยคลิกขวาที่แต่ละกระบวนการและเลือก "กระบวนการฆ่า"
  3. คลิกขวาที่ฐานข้อมูลที่คุณต้องการกู้คืนและเลือก Tasks -> Restore -> จากฐานข้อมูล
  4. เลือกปุ่มตัวเลือก "จากอุปกรณ์:"
  5. เลือก ... และเลือกไฟล์สำรองข้อมูลของฐานข้อมูลอื่นที่คุณต้องการกู้คืน
  6. เลือกชุดข้อมูลสำรองที่คุณต้องการกู้คืนโดยเลือกช่องทำเครื่องหมายทางด้านซ้ายของชุดข้อมูลสำรอง
  7. เลือก "ตัวเลือก"
  8. เลือกเขียนทับฐานข้อมูลที่มีอยู่ (ด้วยการแทนที่)
  9. สำคัญ:เปลี่ยนชื่อไฟล์ "เรียกคืนเป็น" ข้อมูลแถวเป็นชื่อไฟล์ของฐานข้อมูลที่มีอยู่ที่คุณต้องการแทนที่หรือเพียงแค่ตั้งชื่อใหม่
  10. ทำเช่นเดียวกันกับชื่อไฟล์บันทึก
  11. ตรวจสอบจากหน้าจอมอนิเตอร์กิจกรรมว่าไม่มีกระบวนการใหม่เกิดขึ้น หากพวกเขาฆ่าพวกเขา
  12. คลิกตกลง

12

3
มีภาพหน้าจอบางส่วนที่นี่stackoverflow.com/questions/3829271/…
Tomas Kubes

แม้จะเป็นโปรแกรมเมอร์ฉันต้องการใช้ตัวช่วยนี้ ง่ายขึ้นและสะอาดขึ้น
v1n1akabozo

1
ขั้นตอนสำคัญคือ # 8 สำหรับฉัน ขอบคุณแดเนียล
jbooker

Sql 2014 .. ขั้นตอนที่ 6 ก: เปลี่ยนฐานข้อมูลปลายทางเป็นฐานข้อมูลที่คุณต้องการกู้คืน ขั้นตอนที่ 9 & 10: สิ่งนี้ควรได้รับการดูแลจากคุณโดยการเปลี่ยนฐานข้อมูลปลายทาง แต่ตรวจสอบอีกครั้งโดยไปที่ Files และตรวจสอบชื่อไฟล์ตามที่อธิบายไว้ในขั้นตอนที่ 9 และ 10 เดิม
JzInqXc9Dg

49

สำหรับ SQL Server 2012 โดยใช้ Sql Server Management Studio ฉันพบขั้นตอนเหล่านี้จากหน้า Microsoft ซึ่งมีประโยชน์ในการกู้คืนไปยังไฟล์ฐานข้อมูลและชื่ออื่น: (อ้างอิง: http://technet.microsoft.com/en-us/library/ms175510 .aspx )

หมายเหตุ ขั้นตอนที่ 4 และ 7 เป็นสิ่งสำคัญในการตั้งค่าเพื่อไม่ให้เขียนทับฐานข้อมูลที่มีอยู่


ในการกู้คืนฐานข้อมูลไปยังตำแหน่งใหม่และเลือกที่จะเปลี่ยนชื่อฐานข้อมูล

  1. เชื่อมต่อกับอินสแตนซ์ที่เหมาะสมของโปรแกรมฐานข้อมูลเซิร์ฟเวอร์ SQL แล้วใน Object Explorer คลิกชื่อเซิร์ฟเวอร์เพื่อขยายทรีเซิร์ฟเวอร์
  2. คลิกขวาฐานข้อมูลแล้วคลิกคืนค่าฐานข้อมูล Restore Databaseเปิดกล่องโต้ตอบ
  3. ในหน้าทั่วไปให้ใช้ส่วนแหล่งข้อมูลเพื่อระบุแหล่งที่มาและตำแหน่งที่ตั้งของชุดข้อมูลสำรองที่จะกู้คืน เลือกหนึ่งในตัวเลือกต่อไปนี้:

    • ฐานข้อมูล

      • เลือกฐานข้อมูลที่จะเรียกคืนจากรายการดรอปดาวน์ รายการประกอบด้วยฐานข้อมูลเท่านั้นที่ได้รับการสำรองตาม ประวัติการสำรองข้อมูลmsdb

        หมายเหตุหากมีการสำรองข้อมูลจากเซิร์ฟเวอร์อื่นเซิร์ฟเวอร์ปลายทางจะไม่มีข้อมูลประวัติสำรองสำหรับฐานข้อมูลที่ระบุ ในกรณีนี้เลือกอุปกรณ์เพื่อระบุไฟล์หรืออุปกรณ์ที่จะกู้คืนด้วยตนเอง

    • เครื่อง

      • คลิกปุ่มเรียกดู (... ) เพื่อเปิดกล่องโต้ตอบเลือกอุปกรณ์สำรองข้อมูล ในกล่องMedia type Backupเลือกหนึ่งในประเภทอุปกรณ์ที่ระบุ เพื่อเลือกหนึ่งหรือมากกว่าอุปกรณ์สำหรับ การสำรองข้อมูลสื่อกล่องคลิกAdd หลังจากที่คุณเพิ่มอุปกรณ์ที่คุณต้องการลงในกล่องรายการสื่อสำรองข้อมูลให้คลิกตกลงเพื่อกลับไปที่ หน้าทั่วไป ในกล่องรายการSource: Device: Databaseเลือกชื่อของฐานข้อมูลที่ควรกู้คืน

        หมายเหตุ รายการนี้จะใช้ได้เฉพาะเมื่อเลือกอุปกรณ์ ฐานข้อมูลที่มีการสำรองข้อมูลบนอุปกรณ์ที่เลือกเท่านั้นที่จะสามารถใช้ได้

  4. ในส่วนปลายทางกล่องฐานข้อมูลจะถูกเติมโดยอัตโนมัติด้วยชื่อของฐานข้อมูลที่จะเรียกคืน หากต้องการเปลี่ยนชื่อของฐานข้อมูลให้ป้อนชื่อใหม่ใน ฐานข้อมูลกล่อง
  5. ในกล่องคืนค่าให้ปล่อยให้เป็นค่าเริ่มต้นเป็นถึงข้อมูลสำรองล่าสุดที่นำมาหรือคลิกที่Timelineเพื่อเข้าถึงTimeline ของข้อมูลสำรองกล่องโต้ตอบเพื่อเลือกจุดในเวลาเพื่อหยุดการดำเนินการกู้คืนด้วยตนเอง
  6. ในการสำรองข้อมูลตั้งค่าให้เรียกคืนตารางเลือกข้อมูลสำรองที่ต้องการกู้คืน ตารางนี้แสดงการสำรองข้อมูลที่มีอยู่สำหรับตำแหน่งที่ระบุ โดยค่าเริ่มต้นแนะนำให้ใช้แผนการกู้คืน เพื่อแทนที่แผนการกู้คืนที่แนะนำคุณสามารถเปลี่ยนการเลือกในตาราง การสำรองข้อมูลที่ขึ้นอยู่กับการเรียกคืนการสำรองข้อมูลก่อนหน้าจะถูกยกเลิกโดยอัตโนมัติเมื่อไม่ได้เลือกการสำรองข้อมูลก่อนหน้า
  7. เพื่อระบุตำแหน่งใหม่ของไฟล์ฐานข้อมูลให้เลือกไฟล์หน้าและจากนั้นคลิกย้ายไฟล์ทั้งหมดไปยังโฟลเดอร์ จัดให้มีสถานที่ใหม่สำหรับโฟลเดอร์แฟ้มข้อมูลและโฟลเดอร์แฟ้มเข้าสู่ระบบ หรือคุณสามารถเก็บโฟลเดอร์เดิมไว้และเปลี่ยนชื่อฐานข้อมูลและชื่อไฟล์บันทึก

3
อันนี้ใช้งานได้อย่างมีเสน่ห์ ขอขอบคุณเป็นพิเศษสำหรับขั้นตอนที่ 4 และ 7
Anatoly Yakimchuk

นอกจากนี้ฉันต้องไปที่แท็บ 'ตัวเลือก' และตรวจสอบ 'เขียนทับฐานข้อมูลที่มีอยู่ (ด้วยการแทนที่)' ... จากนั้นก็ใช้งานได้
John Kurtz

1
@JohnKurtz คุณไม่จำเป็นต้องทำเช่นนั้นหากคุณกู้คืนฐานข้อมูลใหม่
Rots

ฉันได้สร้างฐานข้อมูลเปล่าเพื่อกู้คืน นั่นจะต้องเป็นความแตกต่าง
John Kurtz

1
ยืนยันว่าใช้งานได้ตามที่อธิบายไว้ถ้าคุณป้อนชื่อของฐานข้อมูลที่ไม่มีอยู่ในขั้นตอนที่ 4 ยืนยันว่าถ้าคุณเลือกฐานข้อมูลอื่นที่มีอยู่แล้วคุณต้องตรวจสอบ 'เขียนทับฐานข้อมูลที่มีอยู่ (ด้วยการแทนที่)' เปิด ' แท็บตัวเลือก ' ขอบคุณสำหรับความอดทนของคุณ!
John Kurtz

34

ที่จริงแล้วไม่จำเป็นต้องกู้คืนฐานข้อมูลในเงื่อนไข SQL Server ดั้งเดิมเนื่องจากคุณ "ต้องการทำซอกับข้อมูลบางอย่าง" และ "เรียกดูข้อมูลของไฟล์. bak ที่"

คุณสามารถใช้ApexSQL Restore - เครื่องมือ SQL Server ที่แนบการสำรองฐานข้อมูล SQL แบบเนทีฟและแบบดั้งเดิมที่ถูกบีบอัดและการสำรองข้อมูลล็อกธุรกรรมเป็นฐานข้อมูลแบบสดเข้าถึงได้ผ่านทาง SQL Server Management Studio, Visual Studio หรือเครื่องมือของบุคคลที่สามอื่น ๆ จะช่วยให้การสำรองข้อมูลบันทึกเดียวหรือหลายเต็มความแตกต่างและการทำธุรกรรม

ยิ่งกว่านั้นฉันคิดว่าคุณสามารถทำงานได้ในขณะที่เครื่องมืออยู่ในโหมดทดลองใช้งานได้อย่างสมบูรณ์ (14 วัน)

คำเตือน: ฉันทำงานเป็นวิศวกรฝ่ายสนับสนุนผลิตภัณฑ์ที่ ApexSQL


9

นี่คือสิ่งที่ฉันได้ร่วมด้วยกันจากโพสต์ต่างๆเพื่อคัดลอกฐานข้อมูลโดยใช้การสำรองข้อมูลและกู้คืนพร้อมย้ายเพื่อแก้ไขตำแหน่งทางกายภาพและ sql เพิ่มเติมเพื่อแก้ไขชื่อโลจิคัล

/**
 * Creates (or resets) a Database to a copy of the template database using backup and restore.
 *
 * Usage: Update the @NewDatabase value to the database name to create or reset.
 */

DECLARE @NewDatabase SYSNAME = 'new_db';

-- Set up
USE tempdb;

DECLARE @TemplateBackups SYSNAME = 'TemplateBackups';
DECLARE @TemplateDatabase SYSNAME = 'template_db';
DECLARE @TemplateDatabaseLog SYSNAME = @TemplateDatabase + '_log';

-- Create a backup of the template database
BACKUP DATABASE @TemplateDatabase TO DISK = @TemplateBackups WITH CHECKSUM, COPY_ONLY, FORMAT, INIT, STATS = 100;

-- Get the backup file list as a table variable
DECLARE @BackupFiles TABLE(LogicalName nvarchar(128),PhysicalName nvarchar(260),Type char(1),FileGroupName nvarchar(128),Size numeric(20,0),MaxSize numeric(20,0),FileId tinyint,CreateLSN numeric(25,0),DropLSN numeric(25, 0),UniqueID uniqueidentifier,ReadOnlyLSN numeric(25,0),ReadWriteLSN numeric(25,0),BackupSizeInBytes bigint,SourceBlockSize int,FileGroupId int,LogGroupGUID uniqueidentifier,DifferentialBaseLSN numeric(25,0),DifferentialBaseGUID uniqueidentifier,IsReadOnly bit,IsPresent bit,TDEThumbprint varbinary(32));
INSERT @BackupFiles EXEC('RESTORE FILELISTONLY FROM DISK = ''' + @TemplateBackups + '''');

-- Create  the backup file list as a table variable
DECLARE @NewDatabaseData VARCHAR(MAX);
DECLARE @NewDatabaseLog VARCHAR(MAX);

SELECT @NewDatabaseData = PhysicalName FROM @BackupFiles WHERE Type = 'D';
SELECT @NewDatabaseLog = PhysicalName FROM @BackupFiles WHERE Type = 'L';

SET @NewDatabaseData = REPLACE(@NewDatabaseData, @TemplateDatabase, @NewDatabase);
SET @NewDatabaseLog = REPLACE(@NewDatabaseLog, @TemplateDatabase, @NewDatabase);

RESTORE DATABASE @NewDatabase FROM DISK = @TemplateBackups WITH CHECKSUM, RECOVERY, REPLACE, STATS = 100,
   MOVE @TemplateDatabase TO @NewDatabaseData,
   MOVE @TemplateDatabaseLog TO @NewDatabaseLog;

-- Change Logical File Name
DECLARE @SQL_SCRIPT VARCHAR(MAX)='
    ALTER DATABASE [{NewDatabase}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    ALTER DATABASE [{NewDatabase}] MODIFY FILE (NAME=N''{TemplateDatabase}'', NEWNAME=N''{NewDatabase}'');
    ALTER DATABASE [{NewDatabase}] MODIFY FILE (NAME=N''{TemplateDatabase}_log'', NEWNAME=N''{NewDatabase}_log'');
    ALTER DATABASE [{NewDatabase}] SET MULTI_USER WITH ROLLBACK IMMEDIATE;
    SELECT name AS logical_name, physical_name FROM SYS.MASTER_FILES WHERE database_id = DB_ID(N''{NewDatabase}'');
';
SET @SQL_SCRIPT = REPLACE(@SQL_SCRIPT, '{TemplateDatabase}', @TemplateDatabase);
SET @SQL_SCRIPT = REPLACE(@SQL_SCRIPT, '{NewDatabase}', @NewDatabase);
EXECUTE (@SQL_SCRIPT);

สวัสดี NateN ฉันต้องการกู้คืนไฟล์. bak ของฉัน (ซึ่งมีอยู่ในเครื่องในเครื่อง d: เส้นทางพา ธ ) ไปยังฐานข้อมูลอื่นฉันลองใช้รหัสนี้สำหรับการทดสอบหน่วย แต่ให้ข้อผิดพลาด .. "ไม่สามารถเข้าถึงแบบเอกสิทธิ์ได้เพราะฐานข้อมูล กำลังใช้งานอยู่ "ไม่สามารถกู้คืนฐานข้อมูลได้โปรดช่วยฉันได้ไหม
Victor Athoti

ฐานข้อมูลที่คุณกู้คืนไม่สามารถใช้งานได้โดยกระบวนการอื่น ฉันไม่แน่ใจว่าจะเขียนสคริปต์กระบวนการทั้งหมดที่เข้าถึงฐานข้อมูลได้หรือไม่
Nathan Niesen

สวัสดี NateN มันทำงานได้ดีในตอนนี้ฉันใช้โค้ดตัวอย่างของคุณแล้วฉันก็ทำการเปลี่ยนแปลงเล็กน้อยในรหัสนั้นและทำงานได้ดี ... ขอขอบคุณอีกครั้งที่ให้รหัสตัวอย่าง ...
Victor Athoti

1
สำหรับ sql2014 ขึ้นไปDECLARE @BackupFiles...บรรทัดต้องการคอลัมน์พิเศษ:SnapshotURL nvarchar(360)
คำสั่ง

3

จริงๆแล้วมันค่อนข้างง่ายกว่าการกู้คืนไปยังเซิร์ฟเวอร์เดียวกัน โดยทั่วไปคุณเพียงแค่เดินผ่านตัวเลือก "กู้คืนฐานข้อมูล" นี่คือการสอนสำหรับคุณ:

http://www.techrepublic.com/blog/window-on-windows/how-do-i-restore-a-sql-server-database-to-a-new-server/454

โดยเฉพาะอย่างยิ่งเนื่องจากเป็นการคืนค่าที่ไม่ได้ใช้งานจริงคุณสามารถรู้สึกสบายใจที่จะลองใช้งานโดยไม่ต้องกังวลกับรายละเอียดมากเกินไป เพียงแค่วางไฟล์ SQL ของคุณในตำแหน่งที่คุณต้องการบนเซิร์ฟเวอร์ใหม่ของคุณและตั้งชื่ออะไรก็ได้ที่คุณต้องการและคุณก็พร้อมที่จะไป


สวัสดี, ฉันต้องการกู้คืนไปยังเซิร์ฟเวอร์เดียวกัน, ฐานข้อมูลอื่น ... (คืนค่า db มีชื่ออื่น)
LocustHorde

ขออภัยฉันอ่านคำถามผิด ใช้หลักการพื้นฐานเดียวกันนี้คุณเพียงแค่ต้องแน่ใจว่าชื่อใหม่และชื่อไฟล์ (the mdf, ldf ฯลฯ ) นั้นแตกต่างกัน
IAmTimCorey

3

หากไม่มีฐานข้อมูลฉันใช้รหัสต่อไปนี้:

ALTER PROCEDURE [dbo].[RestoreBackupToNewDB]    
         @pathToBackup  varchar(500),--where to take backup from
         @pathToRestoreFolder  varchar(500), -- where to put the restored db files 
         @newDBName varchar(100)
    AS
    BEGIN

            SET NOCOUNT ON
            DECLARE @fileListTable TABLE (
            [LogicalName]           NVARCHAR(128),
            [PhysicalName]          NVARCHAR(260),
            [Type]                  CHAR(1),
            [FileGroupName]         NVARCHAR(128),
            [Size]                  NUMERIC(20,0),
            [MaxSize]               NUMERIC(20,0),
            [FileID]                BIGINT,
            [CreateLSN]             NUMERIC(25,0),
            [DropLSN]               NUMERIC(25,0),
            [UniqueID]              UNIQUEIDENTIFIER,
            [ReadOnlyLSN]           NUMERIC(25,0),
            [ReadWriteLSN]          NUMERIC(25,0),
            [BackupSizeInBytes]     BIGINT,
            [SourceBlockSize]       INT,
            [FileGroupID]           INT,
            [LogGroupGUID]          UNIQUEIDENTIFIER,
            [DifferentialBaseLSN]   NUMERIC(25,0),
            [DifferentialBaseGUID]  UNIQUEIDENTIFIER,
            [IsReadOnly]            BIT,
            [IsPresent]             BIT,
            [TDEThumbprint]         VARBINARY(32) -- remove this column if using SQL 2005
            )
            INSERT INTO @fileListTable EXEC('RESTORE FILELISTONLY FROM DISK ='''+ @pathToBackup+'''')
            DECLARE @restoreDatabaseFilePath NVARCHAR(500)
            DECLARE @restoreLogFilePath NVARCHAR(500)
            DECLARE @databaseLogicName NVARCHAR(500)
            DECLARE @logLogicName NVARCHAR(500)
            DECLARE @pathSalt uniqueidentifier = NEWID()

            SET @databaseLogicName = (SELECT LogicalName FROM @fileListTable WHERE [Type]='D') 
            SET @logLogicName = (SELECT LogicalName FROM @fileListTable WHERE [Type]='L')           
            SET @restoreDatabaseFilePath= @pathToRestoreFolder + @databaseLogicName + convert(nvarchar(50), @pathSalt) + '.mdf'
            SET @restoreLogFilePath= @pathToRestoreFolder + @logLogicName + convert(nvarchar(50), @pathSalt) + '.ldf'

            RESTORE DATABASE @newDBName FROM DISK=@pathToBackup     
            WITH 
               MOVE @databaseLogicName TO @restoreDatabaseFilePath,
               MOVE @logLogicName TO @restoreLogFilePath

            SET NOCOUNT OFF
    END

3
  • ฉันมีข้อผิดพลาดเดียวกันกับหัวข้อนี้เมื่อฉันกู้คืนฐานข้อมูลใหม่โดยใช้ฐานข้อมูลเก่า (ใช้. bak ให้ข้อผิดพลาดเดียวกัน)

  • ฉันเปลี่ยนชื่อของฐานข้อมูลเก่าด้วยชื่อของฐานข้อมูลใหม่ (เหมือนรูปนี้) มันได้ผล

ป้อนคำอธิบายรูปภาพที่นี่


2
ครั้งต่อไปโปรดลบชื่อธนาคาร
Danh

1

นี่คือวิธีการคืนค่าสำเนาสำรองเป็นฐานข้อมูลเพิ่มเติมที่มีชื่อฐานข้อมูลเฉพาะ

สำหรับ SQL 2005 จะทำงานได้อย่างรวดเร็ว ฉันมั่นใจว่าเวอร์ชั่นใหม่กว่านี้จะทำงานเหมือนเดิม

ก่อนอื่นคุณไม่จำเป็นต้องใช้ db เดิมของคุณออฟไลน์ แต่เพื่อความปลอดภัยฉันชอบที่จะ ในตัวอย่างของฉันฉันจะเมานต์ฐานข้อมูล "การเรียกเก็บเงิน" ของฉันและจะมีชื่อว่า "billingclone"

1) ทำการสำรองข้อมูลที่ดีของฐานข้อมูลการเรียกเก็บเงิน

2) เพื่อความปลอดภัยฉันเอาต้นฉบับออฟไลน์ดังนี้:

3) เปิดหน้าต่าง Query ใหม่

**สำคัญ! เปิดหน้าต่างแบบสอบถามนี้จนกว่าคุณจะทำทั้งหมด! คุณต้องกู้คืน db จากหน้าต่างนี้!

ตอนนี้ใส่รหัสต่อไปนี้:

-- 1) free up all USER databases
USE master;
GO
-- 2) kick all other users out:
ALTER DATABASE billing SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- 3) prevent sessions from re-establishing connection:
ALTER DATABASE billing SET OFFLINE;

3) ถัดไปใน Management Studio ให้คลิกฐานข้อมูลใน Object Explorer เลือก "กู้คืนฐานข้อมูล"

4) ป้อนชื่อใหม่ในช่อง "ถึงฐานข้อมูล" การเรียกเก็บเงิน IE แบบปิด

5) ในที่มาสำหรับการคืนค่าคลิก "จากอุปกรณ์" และคลิกที่ปุ่ม ... นำทาง

6) คลิกเพิ่มและไปที่การสำรองข้อมูลของคุณ

7) ใส่เครื่องหมายถูกถัดจากคืนค่า (เลือกชุดการสำรองข้อมูลที่จะเรียกคืน)

8) ถัดไปเลือกหน้าตัวเลือกที่มุม LH ด้านบน

9) แก้ไขชื่อไฟล์ฐานข้อมูลใน RESTORE AS ทำสิ่งนี้ทั้ง db และบันทึก IE billingclone.mdf และ billingclone_log.ldf

10) กด OK แล้วรอให้งานเสร็จ

11) กดรีเฟรชใน Object Explorer ของคุณแล้วคุณจะเห็นฐานข้อมูลใหม่ของคุณ

12) ตอนนี้คุณสามารถทำให้ db การเรียกเก็บเงินของคุณกลับมาออนไลน์ได้ ใช้หน้าต่างแบบสอบถามเดียวกันกับที่คุณใช้ในการเรียกเก็บเงินออฟไลน์ ใช้คำสั่งนี้:

-- 1) free up all USER databases
USE master; GO
-- 2) restore access to all users:
ALTER DATABASE billing SET MULTI_USER WITH ROLLBACK IMMEDIATE;GO
-- 3) put the db back online:
ALTER DATABASE billing SET ONLINE;

ทำ!


1
  1. ทำสำเนาจากฐานข้อมูลของคุณด้วยตัวเลือก "คัดลอกฐานข้อมูล" ด้วยชื่ออื่น
  2. สำรองฐานข้อมูลคัดลอกใหม่
  3. เรียกคืนมัน!
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.