ฉันสามารถลดขนาดไฟล์บันทึกธุรกรรมบนฐานข้อมูลมิเรอร์ได้หรือไม่


9

นี่เป็นคำถามที่ตามมาสำหรับคำถามก่อนหน้าเกี่ยวกับสาเหตุที่ฉันไม่สามารถย่อขนาดไฟล์บันทึกในฐานข้อมูลหลัก

เพื่อให้เรื่องสั้นสั้นลงฉันตั้งค่าการทำมิเรอร์ฐานข้อมูล แต่ลืมตรวจสอบให้แน่ใจว่างานที่สำรองข้อมูลบันทึกธุรกรรมกำลังทำงานอีกครั้งและบันทึกธุรกรรมเพิ่มขึ้นเกือบ 60GB

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

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

วิธีหนึ่งในการทำเช่นนี้คือการเฟลโอเวอร์ไปยังฐานข้อมูลที่มิเรอร์และทำการย่อขนาด ทดสอบอย่างละเอียดในสภาพแวดล้อมที่ไม่ใช่การผลิตเพื่อให้แน่ใจว่ามีพฤติกรรมที่คุณต้องการ / คาดหวัง

สิ่งนี้ดูเหมือนจะแนะนำว่าอาจมีวิธีอื่นในการย่อขนาดไฟล์บันทึกบนมิเรอร์และวิธีนี้อาจไม่ปลอดภัยที่จะทำบนเซิร์ฟเวอร์ที่ใช้งานจริง

มีวิธีการอย่างปลอดภัยหดแฟ้มบันทึกธุรกรรมบนมิเรอร์ฐานข้อมูลหรือไม่


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

คำตอบ:


6

DBCC SHRINKFILEคำสั่งจะถูกสะท้อนจากเงินต้นไปยังฐานข้อมูลที่มิเรอร์ นี่คือหลักฐานบางอย่าง

สร้างฐานข้อมูลตัวอย่างบนหลักการ:

create database MirroredDb;
go

สร้างฐานข้อมูลเดียวกันจากข้อมูลสำรองด้วยNORECOVERY:

restore database MirroredDb
from disk = '\\backupdir\MirroredDb.bak'
with norecovery;
go

ตั้งค่าเซสชันการมิเรอร์ของคุณอย่างไรก็ตามวิธีที่คุณเลือก

ในฐานข้อมูลหลักดูขนาดไฟล์ฐานข้อมูล:

use MirroredDb;
go

select
    name,
    size
from sys.database_files;

ชุดผลลัพธ์ของฉันดูเหมือนว่าต่อไปนี้:

name            size
MirroredDb      392
MirroredDb_log  104

บนฐานข้อมูลมิเรอร์สร้างสแน็ปช็อตและดูข้อมูลเดียวกัน:

create database MirroredDbss
on
(
    name = 'MirroredDb',
    filename = 'c:\sqlserver\MirroedDb.ss'
)as snapshot of MirroredDb;

use MirroredDbss;
go

select
    name,
    size
from sys.database_files;

ชุดผลลัพธ์ของฉันมีลักษณะดังนี้:

name            size
MirroredDb      392
MirroredDb_log  104

ตอนนี้ขยายไฟล์บันทึกธุรกรรมบนฐานข้อมูลหลัก (ฉันนำมาไว้ที่ 1 GB):

alter database MirroredDb
modify file
(
    name = MirroredDb_log,
    size = 1GB
);
go

ดูขนาดบันทึกธุรกรรมของฐานข้อมูลหลักตอนนี้เราเห็นขนาดที่ปรับแล้ว:

use MirroredDb;
go

select
    name,
    size
from sys.database_files;

ชุดผลลัพธ์ของฉันมีลักษณะดังนี้:

name            size
MirroredDb      392
MirroredDb_log  131072

สร้างสแนปชอตอื่นบนฐานข้อมูลที่มิเรอร์และดูขนาดไฟล์บันทึกธุรกรรมที่นั่น:

create database MirroredDbss2
on
(
    name = 'MirroredDb',
    filename = 'c:\sqlserver\MirroedDb2.ss'
)as snapshot of MirroredDb;

use MirroredDbss2;
go

select
    name,
    size
from sys.database_files;

ชุดผลลัพธ์ของฉันมีลักษณะดังนี้:

name            size
MirroredDb      392
MirroredDb_log  131072

ตอนนี้ทำDBCC SHRINKFILEบนหลักการ :

use MirroredDb;
go

dbcc shrinkfile('MirroredDb_log', 0);
go

select
    name,
    size
from sys.database_files;

ชุดผลลัพธ์ของฉันคือ:

name            size
MirroredDb      392
MirroredDb_log  104

สร้างสแนปชอตที่สามและสุดท้ายในฐานข้อมูลมิเรอร์และดูขนาด:

create database MirroredDbss3
on
(
    name = 'MirroredDb',
    filename = 'c:\sqlserver\MirroedDb3.ss'
)as snapshot of MirroredDb;

use MirroredDbss3;
go

select
    name,
    size
from sys.database_files;

และฉันได้รับชุดผลลัพธ์ต่อไปนี้:

name            size
MirroredDb      392
MirroredDb_log  104

ดังนั้นอย่างที่คุณเห็นที่นี่DBCC SHRINKFILEคำสั่งคือมิร์เรอร์จริง ๆ กับฐานข้อมูลมิเรอร์


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

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

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

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