ฉันสามารถคืนค่าไฟล์. bak ของ SQL Server ที่ไม่มี SQL Server ได้หรือไม่


16

ฉันมี.bakไฟล์ขนาดใหญ่จากการถ่ายโอนข้อมูล SQL Server 2005

ฉันสามารถกู้คืนสิ่งเหล่านี้ได้โดยไม่ต้องใช้ SQL Server ไม่ว่าจะเป็น PostgreSQL, MySQL หรือไฟล์แบบข้อความ

โซลูชันโอเพนซอร์สจะมีประโยชน์มากที่สุด


1
"ฉันไม่ต้องการทำเช่นนี้เพียงเพื่องานนี้" ทำไมจะไม่ล่ะ? มันเป็นวิธีที่จะทำสิ่งที่คุณพยายามจะทำ
swasheck

การคืนค่าให้กับสิ่งอื่น ๆ มีความหมายหรือไม่? คุณต้องการทำอะไรกับข้อมูลที่ได้?
Philᵀᴹ

1
@Phil ฉันต้องการย้ายข้อมูลผลลัพธ์ไปยังฐานข้อมูล PostgreSQL หรือแม้แต่ไฟล์ข้อความแบบเรียบ
Abe

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

2
นั่นคือข้อมูลที่เราไม่เคยมีมาก่อนตอนนี้ :) ขอบคุณสำหรับข้อมูลเพิ่มเติม - ฉันมีแผน
swasheck

คำตอบ:


19

นี่คือสิ่งที่ฉันแนะนำ:

  1. สร้างเครื่องเสมือนที่ใช้ Windows โดยมีพื้นที่ดิสก์เพียงพอสำหรับเก็บข้อมูล คัดลอกไฟล์สำรองที่นั่น หากคุณไม่ได้มีความสามารถในการสร้างเครื่องเสมือนที่คุณสามารถทำได้ด้วยผลิตภัณฑ์ฟรีเช่น Oracle VirtualBox
  2. ดาวน์โหลดและติดตั้งรุ่นทดลองของ SQL Server ตรวจสอบให้แน่ใจว่าคุณได้รวมทั้งเอ็นจิ้นฐานข้อมูลและเครื่องมือการจัดการ - เสร็จสมบูรณ์
  3. หาก VM มีพื้นที่เพียงพอในการสำรองข้อมูล แต่มีเนื้อที่ไม่เพียงพอในการกู้คืนคุณสามารถทำการ "กู้คืนเสมือน" โดยใช้รุ่นทดลองใช้ผลิตภัณฑ์จาก Red-Gate ด้วยชื่อเดียวกัน (ซึ่งช่วยให้คุณสามารถโต้ตอบกับ ไฟล์สำรองข้อมูลราวกับว่ามันถูกกู้คืน) มิฉะนั้นเรียกคืนฐานข้อมูลด้วยวิธีปกติ

  4. เมื่อฐานข้อมูลพร้อมใช้งาน (ไม่ว่าจะเป็นการกู้คืนปกติหรือกู้คืนเสมือน) คุณสามารถสร้างสคริปต์สำหรับสคีมาและข้อมูลด้วยวิธีต่อไปนี้:

    • เปิด Studio การจัดการและเชื่อมต่อกับอินสแตนซ์ของคุณ
    • เปิด Object Explorer
    • คลิกขวาที่ฐานข้อมูลที่เพิ่งเรียกคืนของคุณเลือกงาน> สร้างสคริปต์ ...
    • คลิกถัดไปคลิกถัดไป
    • ในหน้า "เลือกตัวเลือกสคริปต์" เลื่อนลงและตั้งค่า "ข้อมูลสคริปต์" เป็น True
    • คลิกถัดไป
    • ตรวจสอบวัตถุที่เกี่ยวข้องทั้งหมดแล้วคลิกถัดไป
    • ตรวจสอบตารางที่คุณต้องการและคลิกถัดไป
    • เลือกสคริปต์เป็นไฟล์ ตอนนี้คุณจะมีไฟล์ที่มีวัตถุและข้อมูลทั้งหมดของคุณโดยใช้ SQL Server แทรกไวยากรณ์คุณจะต้องเล่นกับผลลัพธ์เพื่อให้ได้มันในรูปแบบที่เหมาะกับ Postgres (ฉันไม่ได้เป็นส่วนตัวกับความแตกต่างของไวยากรณ์เล็กน้อย)

หรือคุณสามารถลองเล่นกับยูทิลิตี bcpเพื่อดึงข้อมูลไปยังไฟล์ CSV หรือสิ่งที่คล้ายกัน แต่คุณจะต้องทำแบบนี้ต่อตารางหรือใช้สคริปต์ที่ฉลาด (PowerShell, T-SQL, C # / SMO ฯลฯ ) ) เพื่อสร้างคำสั่ง bcp ทั้งหมดสำหรับคุณ เมื่ออยู่ในไฟล์ CSV แล้วควรจะโหลดข้อมูลลงใน Postgres เป็นจำนวนมาก (แต่คุณจะยังมีงานสร้างตาราง)

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


+1 ฉันจะแนะนำวิธี bcp เมื่อฉันไปถึงคอมพิวเตอร์ gotchas บางตัวเป็นตัวคั่นตาราง, ตัวตน (ลำดับ, เป็น pg), nvarchar, เพื่อตั้งชื่อให้สองสามตัว มิฉะนั้นนี่คือสิ่งที่ฉันจะแนะนำ (sans Red-Gate) ในส่วนแก้ไขของฉัน
swasheck

มี 8, 20GB .bak ไฟล์และมันจะดีถ้าคุณสามารถช่วยได้ แต่โปรดดูคำถามที่เกี่ยวข้องใน gis.se, gis.stackexchange.com/q/28281/3218และgis.stackexchange.com/q/28257 / 3218เกี่ยวกับฐานข้อมูล USDA Soils (SSURGO) ขณะนี้มันยากมากที่จะใช้การเข้าถึงข้อมูลเหล่านี้ในวิธีอัตโนมัติสำหรับการจำลองแบบจำลอง มันจะเป็นประโยชน์อย่างมากกับวิทยาศาสตร์ที่จะมีข้อมูลเหล่านี้ในโครงสร้างที่เป็นประโยชน์มากขึ้น คุณสามารถดาวน์โหลดได้จากเซิร์ฟเวอร์ของฉัน ข้อมูลไม่เป็นความลับใด ๆ สามารถรับได้ในราคา $ 50 / CD หรือ $ 100 / DVD หรืออาจน้อยกว่าจากเอเจนต์ส่วนขยาย
Abe

ดูเหมือนว่าคุณมีคำตอบเกี่ยวกับวิธีการรับข้อมูลใน GIS.SE ฉันไปที่ไซต์เหล่านั้นแล้ว แต่ไม่เห็นว่าพวกเขาระบุว่าไฟล์นั้นเป็นข้อมูลสำรองของ SQL Server คุณได้รับไฟล์เหล่านี้มาจากไหน?
swasheck

7

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

ดังนั้นคุณจะต้องติดตั้งอินสแตนซ์ SQL Server คุณต้องตรวจสอบให้แน่ใจว่าอินสแตนซ์นี้สามารถพูดคุยกับเซิร์ฟเวอร์ Postgres ของคุณ (frigging กับ pg_hba.conf) เมื่อมีคุณจะมีเส้นทางที่ดีสองทางในการโยกย้ายข้อมูล

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

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

แก้ไข

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

แก้ไข (2):

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

นั่นทำให้คำตอบของแอรอนเบอร์ทรานด์เป็นคำตอบที่ดีที่สุด โปรดทราบว่านอกเหนือจากประเภทข้อมูล ( IDENTITYเทียบกับSEQUENCEpostgres ไม่รู้อะไรเลยNVARCHARตั้งแต่คุณตั้งค่าการเข้ารหัสในฐานข้อมูลเอง) Postgres ไม่รู้อะไรเลยCREATE CLUSTERED INDEX( CLUSTERอาจใช้ได้กับคุณ) ในที่สุดเนื่องจากฉันเห็นในความคิดเห็นที่คุณจะใช้ข้อมูลเชิงพื้นที่ postgresql รู้CREATE SPATIAL INDEXไวยากรณ์ไม่ คุณจะต้องติดตั้ง postgis และใช้INDEXTYPEคำหลักเพื่อสร้างดัชนีเชิงพื้นที่ สุดท้ายตรวจสอบให้แน่ใจว่าคุณจัดการสกีมาอย่างเหมาะสม

เรื่องสั้นสั้น:

  1. สร้างสคริปต์และข้อมูลโดยใช้วิธีของ Aaron Bertrand (ฉันอาจติดกับระดับตาราง)
  2. จดบันทึก DDL ของดัชนี (หากยังคงถูกต้อง) แต่ไม่รวมไว้
  3. สร้างดัชนีบน postgres เมื่อโครงสร้างและข้อมูลเข้าที่

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

ขอโทษ. ฉันหมายความว่าคุณจะต้องกำหนดค่า Postgres จะยอมรับการเชื่อมต่อภายนอก (SQL Server ในกรณีนี้)
swasheck

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