คำถามติดแท็ก transaction-log

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

2
การย้อนกลับของ SQL Server ทั้งสองนี้แตกต่างกันอย่างไร
ใน SQL Server 2008 R2 การย้อนกลับสองแบบนี้แตกต่างกันอย่างไร: เรียกใช้ALTERคำสั่งสักครู่แล้วกด 'ยกเลิกการดำเนินการ' ใช้เวลาสองสามนาทีในการย้อนกลับอย่างสมบูรณ์ เรียกใช้ALTERคำสั่งเดียวกันแต่ให้แน่ใจว่าLDFไฟล์นั้นไม่ใหญ่พอที่จะทำให้สำเร็จ เมื่อถึงLDFขีด จำกัด และไม่อนุญาตให้ 'autogrowth' การประมวลผลแบบสอบถามจะหยุดทันที (หรือย้อนกลับเกิดขึ้น) พร้อมกับข้อความแสดงข้อผิดพลาดนี้: The statement has been terminated. Msg 9002, Level 17, State 4, Line 1 The transaction log for database 'SampleDB' is full. To find out why space in the log cannot be reused, see …

6
บันทึกธุรกรรมจะไม่ย่อลง DB คิดว่ามันกำลังจำลองข้อมูล
ฉันมีฐานข้อมูล SQL Server 2008 R2 Express ที่ใช้ Kaspersky Security Center และฉันไม่รู้ว่าเกิดอะไรขึ้นกับการติดตั้ง แต่ฐานข้อมูลดูเหมือนจะคิดว่ามันกำลังถูกจำลองแบบและจะไม่เพิ่มพื้นที่ว่างจากบันทึกธุรกรรม เช่น: USE master; SELECT name, log_reuse_wait, log_reuse_wait_desc, is_cdc_enabled FROM sys.databases WHERE name = 'KAV'; SELECT DATABASEPROPERTYEX('KAV', 'IsPublished'); ผลตอบแทน: name | log_reuse_wait | log_reuse_wait_desc | is_cdc_enabled -----|----------------|---------------------|--------------- KAV | 6 | REPLICATION | 0 DATABASEPROPERTYEX('KAV', 'IsPublished') ---------------------------------------- 0 [not …

1
DBCC CHECKDB ยิงทุก 20 - 60 วินาที
ฉันมีสภาพแวดล้อมแบบ dev ที่กำลังนำไปใช้งานอย่างรวดเร็วในการผลิตและสังเกตเห็นในบันทึกที่ประมาณทุกๆ 20 วินาทีที่ฉันเห็นข้อความ: Starting up database 'dbname' CHECKDB for database 'dbname' finished without errors ฉันสังเกตเห็นสิ่งนี้เพราะผู้ใช้ปลายทางที่ทำการทดสอบนี้มีปัญหาซึ่งฉันแยกเป็นข้อผิดพลาดที่ฉันสังเกตเห็นในบันทึกเหตุการณ์ Windows (แอปพลิเคชันบันทึก): The log for database 'dbname' is not available. Check event log for related messages. บังเอิญฉันไม่พบข้อความที่เกี่ยวข้อง แต่แก้ไขด้วยรอบออฟไลน์ / ออนไลน์ สิ่งเดียวที่ฉันคิดได้ก็คือแอปพลิเคชันนี้รวบรวมข้อมูลทุก ๆ 1 มิลลิวินาที แต่ข้อมูลทั้งหมดนี้ไม่ได้ถูกแทรกลงในฐานข้อมูล เป็นเซิร์ฟเวอร์ dev มันถูกกำหนดค่าเพื่อให้บันทึกและข้อมูลอยู่ในไดรฟ์เดียวกัน ด้วยข้อมูลสองส่วนนี้ฉันจึงเชื่อว่านี่เป็นปัญหา IO และเซิร์ฟเวอร์พยายามกู้คืนจากการขาดการเชื่อมต่อกับที่เก็บข้อมูล (SAN) แต่ถึงอย่างนี้ก็ไม่สมเหตุสมผลสำหรับฉันเพราะมันไม่ได้สูญเสีย …

4
การสำรองข้อมูลบางส่วนให้เล็กเมื่อใช้ SQL Server FILESTREAM
ฉันมีฐานข้อมูลที่มีข้อมูลเกือบ 1TB FILESTREAMที่ฉันไม่ต้องการสำรองข้อมูล (หากข้อมูลถูกลบมันจะถูกสร้างขึ้นใหม่โดยอัตโนมัติภายในสองสามชั่วโมงดังนั้นมันจึงไม่สำคัญ) ข้อมูลส่วนใหญ่มีการเปลี่ยนแปลงทุกสองสามวันดังนั้นการสำรองข้อมูลส่วนต่างจะไม่ช่วยลดขนาดลง ฉันได้ทำการสำรองข้อมูลตามที่ฉันต้องการโดยการตั้งค่าโหมดการกู้คืนเป็นFullสร้างแยกต่างหากFILEGROUPสำหรับFILESTREAMการสำรองข้อมูลจาก "หลัก" FILEGROUPเท่านั้น ปัญหานี้เกิดจากการที่ล็อกไฟล์ (ซึ่งได้รับการสำรอง) ตอนนี้มีขนาดใหญ่โดยไม่จำเป็นเพราะมันรวมถึงFILESTREAMข้อมูล SIMPLEโหมดการกู้คืนทำให้ความสามารถในการสำรองข้อมูลเฉพาะFILEGROUPของฉันลดลงดังนั้นฉันจึงไม่คิดว่าจะเป็นตัวเลือก ความคิดของฉันคือการย้ายFILESTREAMข้อมูลไปยังฐานข้อมูลแยกจากกัน แต่ตอนนี้ฉันสูญเสียความสมบูรณ์ของการอ้างอิงและแน่นอนว่าได้รับมรดกจากปัญหาอื่น ๆ เช่นกัน มีวิธีใดในการสร้างการสำรองข้อมูลบางส่วนในSimpleโหมดการกู้คืน (โดยไม่ต้องตั้งค่าFILESTREAMตารางให้อ่านอย่างเดียว)? ถ้าไม่มีวิธีแก้ไขปัญหาอื่นที่มีเหตุผลสำหรับปัญหาของฉันหรือไม่



1
ALTER TABLE หรือไม่ DROP COLUMN เป็นเพียงข้อมูลเมตาดาต้าเท่านั้น
ฉันพบแหล่งข้อมูลหลายแห่งที่ระบุเปลี่ยนแปลงตาราง ... DROP COLUMN เป็นการดำเนินการเฉพาะเมตาดาต้า แหล่ง สิ่งนี้จะเป็นอย่างไร ข้อมูลในระหว่าง DROP COLUMN ไม่จำเป็นต้องถูกลบออกจากดัชนีที่ไม่ใช่คลัสเตอร์และดัชนี / ฮีปคลัสเตอร์หรือไม่? นอกจากนี้เหตุใดMicrosoft Docs จึงบอกเป็นนัยว่าเป็นการดำเนินการที่บันทึกไว้อย่างสมบูรณ์ การปรับเปลี่ยนที่ทำกับตารางจะถูกบันทึกและสามารถกู้คืนได้อย่างสมบูรณ์ การเปลี่ยนแปลงที่ส่งผลกระทบต่อทุกแถวในตารางขนาดใหญ่เช่นลดลงคอลัมน์หรือในบางรุ่นของ SQL Server เพิ่มคอลัมน์ไม่เป็นโมฆะด้วยค่าเริ่มต้นที่สามารถใช้เวลานานในการสร้างที่สมบูรณ์และบันทึกเข้าสู่ระบบจำนวนมาก เรียกใช้คำสั่ง ALTER TABLE เหล่านี้ด้วยความระมัดระวังเช่นเดียวกับคำสั่ง INSERT, UPDATE หรือ DELETE ที่มีผลกับแถวจำนวนมาก ในฐานะที่เป็นคำถามรอง: เครื่องยนต์จะติดตามคอลัมน์ที่ถูกทิ้งได้อย่างไรหากข้อมูลไม่ได้ถูกลบออกจากหน้าเว็บต้นแบบ

2
การสำรองข้อมูลบันทึกธุรกรรมของ SQL Server: ทดสอบว่าบันทึกท้ายดังต่อไปนี้เป็นข้อมูลสำรองบันทึกล่าสุดที่รู้จักหรือไม่
เรากำลังใช้ SQL Server ด้วยโหมดการกู้คืนแบบเต็ม ด้วยการสำรองข้อมูลเต็มรูปแบบและการสำรองข้อมูลชุดต่างๆเราต้องการตรวจสอบว่าบันทึกการเชื่อมโยงนั้นสมบูรณ์จากการสำรองข้อมูลเต็มรูปแบบล่าสุดไปยังบันทึกหางปัจจุบันหรือไม่ (โดยไม่มีการกู้คืนการสำรองข้อมูลเหล่านี้จริง ๆ วัตถุประสงค์ของที่นี่คือการทดสอบความสอดคล้องของการสำรองข้อมูล) ฉันรู้วิธีการสำรองข้อมูลที่มีอยู่แล้ว: การใช้ RESTORE HEADERONLY ฉันได้รับ FirstLSN และ LastLSN ของทุกไฟล์ซึ่งสามารถเปรียบเทียบได้สำหรับไฟล์ที่ต่อเนื่องกันเพื่อตรวจสอบว่าเข้ากันได้หรือไม่ อย่างไรก็ตามฉันไม่ทราบวิธีการตรวจสอบว่าบันทึกท้ายติดตามการสำรองข้อมูลบันทึกล่าสุด หากฉันมีบันทึกหาง FirstLSN ฉันสามารถเปรียบเทียบกับ LastLSN ของข้อมูลสำรองบันทึกล่าสุดได้ แต่ฉันจะขอรับ FirstLSN ของบันทึกท้ายได้อย่างไร ฉันต้องการโซลูชันที่ใช้งานได้ตั้งแต่ SQL Server 2005 ขึ้นไป (ควรใช้ t-sql) จนถึงตอนนี้ฉันได้ค้นหา Google ไม่เป็นประโยชน์ Btw ฉันโพสต์สิ่งนี้ใน stackoverflow เป็นครั้งแรก; แต่ย้ายมาที่นี่เนื่องจากถูกตั้งค่าสถานะนอกหัวข้อที่นั่น แก้ไข ฉันลองทั้งสองวิธีแก้ปัญหาในตัวอย่างเล็ก ๆ (SQL Server 2005, 9.0.5057): BACKUP DATABASE …

1
SQL Server 2012 Simple Recovery Model ที่มี LOG_BACKUP log_reuse_wait_desc
ในขณะที่ฉันกำลังทำการตรวจสอบของตัวเองไม่มีใครรู้ว่าทำไมฐานข้อมูลในSIMPLEรูปแบบการกู้คืนมีLOG_BACKUPไว้เพื่อlog_reuse_wait_descอะไร SQL Server 2012 SP1 ฐานข้อมูลสร้างขึ้นเมื่อไม่กี่สัปดาห์ที่ผ่านมา ไม่มีการจำลองแบบไม่มีการมิเรอร์ไม่มีบันทึกการจัดส่งและไม่เคยมีสิ่งเหล่านี้ เราทำการสำรองฐานข้อมูลและกู้คืนไปยังอินสแตนซ์อื่นซึ่งจะแสดงSIMPLEและNOTHINGในlog_reuse_waitอินสแตนซ์อื่น แต่ฉันไม่คิดว่าการกู้คืนไปยังอินสแตนซ์อื่นเป็นวิธีที่ดีในการทำให้เกิดปัญหาอีกครั้งเนื่องจากการเรียกคืนการดำเนินการธุรกรรมย้อนกลับ / ย้อนกลับ

2
SQL Server 2008 R2 กู้คืนการสำรองข้อมูลเต็มรูปแบบ COPY_ONLY พร้อมบันทึกธุรกรรม
หลังจากทำวิจัยฉันไม่สามารถหาคำตอบสำหรับคำถามนี้ได้ ความเป็นมาฉันกำลังพยายามตั้งค่าแผนสำรองที่เหมาะกับข้อกำหนดสามข้อต่อไปนี้: ความน่าเชื่อถือของการสำรองข้อมูลมีการสำรองข้อมูลเต็มรูปแบบทุกคืน การสำรองข้อมูลบันทึกธุรกรรมที่สามารถกู้คืนได้ ใช้พื้นที่ดิสก์ในระดับต่ำ การสำรองข้อมูลต้องสามารถเข้าถึงได้ในเครื่องสำหรับเครื่องมือตรวจสอบ ดังนั้นเพื่อให้เหมาะกับความต้องการเหล่านั้นฉันจึงคิดว่าการสำรองข้อมูลเต็มรูปแบบทุกสัปดาห์ความแตกต่างรายวันและธุรกรรมรายชั่วโมง จากนั้นทุกคืนจะมีการสำรองข้อมูล copy_only ซึ่งสามารถจัดส่งนอกสถานที่ได้การสำรองข้อมูลนี้จะทำเพื่อไม่ให้ห่วงโซ่การบันทึกเสียหายและเรามีการสำรองข้อมูลเต็มรูปแบบที่เชื่อถือได้ทุกคืนโดยไม่ต้องกินพื้นที่ดิสก์ในท้องถิ่นมากนัก คำถามเป็นไปได้ไหมที่จะกู้คืนจากข้อมูลสำรอง copy_only และกู้คืนบันทึกธุรกรรมหลังจาก ให้ฉันเป็นตัวอย่างให้คุณรู้ว่าฉันกำลังพูดถึงอะไร ใช้รายการด้านล่างฉันสงสัยว่ามันเป็นไปได้ที่จะเรียกคืน FullbackupCOPY_ONLYC.bak ตามด้วย TransactionbackupG.trn, TransactionbackupH.trn, สุดท้าย TransactionbackupI.trn > ---List of Backups--- FullbackupA.bak 01/01/2013 00:00:00 > DifferntialbackupA.bak 02/01/2013 00:00:00 FullbackupCOPY_ONLYA.bak 02/01/2013 00:00:00 > TransactionbackupA.trn 02/01/2013 01:00:00 > TransactionbackupB.trn 02/01/2013 02:00:00 > TransactionbackupC.trn 02/01/2013 03:00:00 > DifferntialbackupB.bak 03/01/2013 …

2
เนื้อหาของไฟล์บันทึกธุรกรรมโดยละเอียด
ฉันมีคำถามเกี่ยวกับการทำธุรกรรม (ขอเรียกสั้น ๆ ว่า LDF) เนื้อหา ฉันสมมติว่าฐานข้อมูลพร้อมกับแบบจำลองการกู้คืนเต็มรูปแบบ ฉันได้อ่านว่าไฟล์ LDF มี (บันทึก) การดำเนินการแต่ละรายการและทุกครั้งไปยังฐานข้อมูล (ที่อยู่ในโหมดการกู้คืนเต็ม) มันแตกต่างจากการล็อกระหว่างBEGIN TRAN; COMMAND(s); COMMITอะไร ฉันถามเพราะเห็นได้ชัดว่าคุณสามารถย้อนกลับธุรกรรม แต่คุณไม่สามารถย้อนกลับคำสั่งมาตรฐาน (ในโหมดการกู้คืนเต็ม) ฉันเดาว่าระหว่างการทำธุรกรรมเนื้อหาที่ถูกบันทึกลงในไฟล์ LDF นั้นแตกต่างจากการบันทึกการกู้คืนแบบเต็มปกติ นั่นถูกต้องใช่ไหม? แตกต่างกันอย่างไร เป็นเพียงการรวมการดำเนินงาน "เลิกทำ" สำหรับแต่ละการกระทำหรือไม่ ในบันทึกที่เกี่ยวข้องฉันได้ยินมาว่ามีเครื่องมือเชิงพาณิชย์สำหรับ "การย้อนกลับ / เลิกทำ" คำสั่งมาตรฐานโดยใช้ไฟล์ LDF สำหรับการกู้คืนแบบเต็ม พวกเขาทำมันได้อย่างไร? พวกเขาวิเคราะห์เนื้อหาของ LDF หรือไม่และพยายามทำสิ่งที่ตรงกันข้าม / เลิกทำหรือไม่?

3
การประเมินความผิดปกติที่ไม่ดีทำให้ขาดคุณสมบัติ INSERT จากการบันทึกที่น้อยที่สุด?
ทำไมข้อความที่สองINSERT~ 5x ช้ากว่าประโยคแรก จากจำนวนข้อมูลบันทึกที่สร้างขึ้นฉันคิดว่าข้อมูลที่สองไม่ผ่านการรับรองสำหรับการบันทึกขั้นต่ำ อย่างไรก็ตามเอกสารประกอบในคู่มือประสิทธิภาพการโหลดข้อมูลระบุว่าส่วนแทรกทั้งสองควรสามารถบันทึกได้น้อยที่สุด ดังนั้นหากการบันทึกขั้นต่ำเป็นความแตกต่างของประสิทธิภาพที่สำคัญทำไมจึงเป็นไปได้ว่าการสืบค้นครั้งที่สองไม่มีคุณสมบัติสำหรับการบันทึกขั้นต่ำ สิ่งที่สามารถทำได้เพื่อปรับปรุงสถานการณ์? Query # 1: การแทรกแถว 5 มม. โดยใช้ INSERT ... with (TABLOCK) พิจารณาแบบสอบถามต่อไปนี้ซึ่งแทรกแถว 5MM ลงในกอง แบบสอบถามนี้ดำเนินการใน1 secondและสร้างข้อมูลล็อกธุรกรรมตามการรายงานของ64MBsys.dm_tran_database_transactions CREATE TABLE dbo.minimalLoggingTest (n INT NOT NULL) GO INSERT INTO dbo.minimalLoggingTest WITH (TABLOCK) (n) SELECT n -- Any table/view/sub-query that correctly estimates that it will generate 5MM …

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

2
การมองเห็นแถวถูกกำหนดอย่างไร?
ในกรณีที่ง่ายที่สุดเมื่อเราแทรกแถวใหม่ลงในตาราง (และการทำธุรกรรม) มันจะปรากฏให้เห็นในการทำธุรกรรมที่ตามมาทั้งหมด ดูxmaxเป็น 0 ในตัวอย่างนี้: CREATE TABLE vis ( id serial, is_active boolean ); INSERT INTO vis (is_active) VALUES (FALSE); SELECT ctid, xmin, xmax, * FROM vis; ctid │xmin │ xmax │ id │ is_active ───────┼─────┼──────┼────┼─────────── (0,1) │2699 │ 0 │ 1 │ f เมื่อเราอัปเดต (เนื่องจากการตั้งค่าสถานะถูกกำหนดFALSEโดยไม่ได้ตั้งใจ) จะมีการเปลี่ยนแปลงเล็กน้อย: UPDATE vis …

2
การบำรุงรักษาบันทึกธุรกรรมบนฐานข้อมูลมิเรอร์
เวอร์ชันของเซิร์ฟเวอร์ SQL: 2008 R2 Enterprise SP2 ฉันพยายามจัดการกับการบำรุงรักษา SQL Server ของเราและฉันเจอสิ่งที่ฉันคิดว่าไม่ถูกต้อง เรามีอินสแตนซ์การผลิตเดียวซึ่งมี 3 ฐานข้อมูลแต่ละอันถูกมิเรอร์นอกสถานที่ไปยังอินสแตนซ์ DR ในขณะที่ดูอินสแตนซ์ DR ฉันสังเกตเห็นว่าไฟล์ LDF มีขนาดใหญ่มากเกินกว่า 35GB สำหรับฐานข้อมูลที่ใช้งานหนัก ฉันเข้าใจว่าอาจเป็นเพราะฐานข้อมูลมิเรอร์อยู่ในโหมดการกู้คืนแบบเต็มและบันทึกไม่เคยถูกสำรองไว้พวกเขาจะเติบโตต่อไปจนกว่าจะหมดพื้นที่ไดรฟ์ เรากำลังทำการสำรองข้อมูลบันทึกในฐานข้อมูลหลักและคำถามของฉันคือสิ่งที่ gotchas กับการทำสำรองข้อมูลบันทึกในกระจกหรือไม่ ต้องมีการสำรองข้อมูลเต็มรูปแบบอย่างน้อยหนึ่งรายการจากมิเรอร์ก่อนที่จะทำการสำรองข้อมูลบันทึกในกรณีนั้นมีตัวเลือกพิเศษที่จำเป็นต้องใช้เพราะเป็นมิรเรอร์หรือไม่ นี่คือคำแนะนำในการบำรุงรักษาบันทึกธุรกรรมบนฐานข้อมูลMIRROR ขอบคุณสำหรับการป้อนข้อมูลใด ๆ

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