Tôi có thể khôi phục tệp SQL Server .bak mà không cần SQL Server không?


16

Tôi có một số .baktệp lớn từ kết xuất SQL Server 2005.

Tôi có thể khôi phục các tệp này mà không cần sử dụng SQL Server, cho PostgreSQL, MySQL hoặc các tệp văn bản phẳng không?

Một giải pháp nguồn mở sẽ hữu ích nhất.


1
"Tôi muốn không phải làm như vậy chỉ cho nhiệm vụ này." Tại sao không? Đó là cách để làm những gì bạn đang cố gắng làm.
swasheck

Liệu khôi phục lại một cái gì đó thậm chí còn có ý nghĩa? Bạn muốn làm gì với dữ liệu kết quả?
Philᵀᴹ

1
@Phil Tôi muốn di chuyển dữ liệu kết quả sang cơ sở dữ liệu PostgreSQL hoặc thậm chí các tệp văn bản phẳng.
Abe

1
@swasheck Tôi đã xóa dòng trích dẫn, vì nó dường như đã làm mất đi câu hỏi. Nhưng để trả lời câu hỏi của bạn, vì tôi không biết làm thế nào để sử dụng nó và máy chủ của tôi chạy Linux. Một máy tính xách tay windows có sẵn không có đủ chỗ.
Abe

2
Vâng, đó là thông tin mà chúng tôi không có trước đây :). Cảm ơn về thông tin bổ sung - Tôi có một kế hoạch
swasheck

Câu trả lời:


19

Đây là những gì tôi đề nghị:

  1. xây dựng một máy ảo chạy Windows, có đủ dung lượng đĩa để chứa bản sao lưu. Sao chép tập tin sao lưu ở đó. Nếu bạn chưa có khả năng xây dựng máy ảo, bạn có thể làm như vậy với các sản phẩm miễn phí như Oracle VirtualBox .
  2. tải xuống và cài đặt phiên bản đánh giá của SQL Server . Đảm bảo bạn bao gồm cả công cụ cơ sở dữ liệu và Công cụ quản lý - Hoàn tất.
  3. nếu VM có đủ dung lượng để giữ bản sao lưu nhưng không đủ dung lượng để khôi phục nó, bạn có thể thực hiện "khôi phục ảo" bằng phiên bản dùng thử của sản phẩm từ Red-Gate có cùng tên (cho phép bạn tương tác với sao lưu tập tin như thể nó đã được khôi phục). Nếu không, khôi phục cơ sở dữ liệu theo cách thông thường .

  4. Khi cơ sở dữ liệu có sẵn (thông qua khôi phục bình thường hoặc khôi phục ảo), bạn có thể tạo tập lệnh cho lược đồ và dữ liệu theo cách sau:

    • Mở Management Studio và kết nối với cá thể của bạn.
    • Mở Object Explorer.
    • Nhấp chuột phải vào cơ sở dữ liệu mới được khôi phục của bạn, chọn Nhiệm vụ> Tạo tập lệnh ...
    • Nhấp vào Tiếp theo, Nhấp vào Tiếp theo
    • Trên trang "Chọn tùy chọn tập lệnh", cuộn xuống và đặt "Dữ liệu tập lệnh" thành True
    • Nhấn tiếp
    • Kiểm tra tất cả các đối tượng có liên quan và nhấp vào Tiếp theo
    • Kiểm tra các bảng bạn muốn và nhấp vào Tiếp theo
    • Chọn kịch bản cho một tập tin. Bây giờ bạn sẽ có một tệp chứa tất cả các đối tượng và dữ liệu của mình bằng cú pháp chèn SQL Server, bạn sẽ phải chơi với đầu ra để có được định dạng phù hợp với Postgres (Tôi không biết về bất kỳ sự khác biệt cú pháp nhỏ nào).

Ngoài ra, bạn có thể thử và chơi với tiện ích bcp để trích xuất dữ liệu sang tệp CSV hoặc tương tự, nhưng bạn sẽ phải thực hiện từng bước này hoặc sử dụng một số tập lệnh thông minh (PowerShell, T-SQL, C # / SMO, v.v. ) để tạo tất cả các lệnh bcp cho bạn. Khi đã ở trong tệp CSV, việc tải dữ liệu vào Postgres sẽ rất đơn giản (nhưng bạn vẫn sẽ có một số công việc để tạo các bảng).

Như một đề xuất cuối cùng, nếu tệp .bak không phải là ginormous và dữ liệu không được bảo mật, tôi sẵn sàng thử và tạo các tệp cho bạn theo định dạng bạn cần. Tôi có rất nhiều máy ảo Windows có dung lượng, thách thức sẽ là đưa tệp .BAK đến nơi tôi có thể truy xuất tệp - đặc biệt là nếu nó lớn hơn hầu hết các dịch vụ chia sẻ tệp hỗ trợ.


+1 Tôi sẽ đề xuất phương pháp bcp khi tôi vào máy tính. Một số gotchas là dấu phân cách bảng, IDENTITY (chuỗi, tính bằng pg), nvarchar, chỉ để đặt tên cho một số. Mặt khác, đây là những gì tôi đã đề xuất (sans Red-Gate) trong phần chỉnh sửa của mình.
swasheck

Có 8, 20GB bak file, và nó sẽ là tuyệt vời nếu bạn có thể giúp đỡ, nhưng xin vui lòng xem các câu hỏi liên quan về gis.se, gis.stackexchange.com/q/28281/3218gis.stackexchange.com/q/28257 / 3218 về Cơ sở dữ liệu đất USDA (SSURGO). Hiện tại rất khó sử dụng truy cập các dữ liệu này theo cách tự động để mô hình hóa mô phỏng. Nó sẽ là một lợi ích lớn cho khoa học để có những dữ liệu này trong một cấu trúc có thể sử dụng nhiều hơn. Bạn có thể tải nó từ máy chủ của tôi. Dữ liệu không được bảo mật, bất kỳ ai cũng có thể lấy nó với giá $ 50 / CD hoặc $ 100 / DVD hoặc có lẽ ít hơn từ đại lý mở rộng của họ.
Abe

Có vẻ như bạn có câu trả lời về cách lấy dữ liệu trên GIS.SE. Tôi đã đi và xem các trang web đó nhưng không thấy nơi họ chỉ định rằng tệp là bản sao lưu SQL Server. Làm thế nào / từ đâu bạn có được các tập tin này?
swasheck

7

Thật không may, không có cách nào để có quyền truy cập vào nội dung của tệp .bak mà không có kiến ​​thức sâu về nội bộ của chính tệp đó. Tôi có thể nghĩ về một người ở đây có thể bí mật với thông tin này, nhưng tôi không thể nói liệu người đó có nói cho bạn biết cách thực hiện hay không

Vì vậy, bạn sẽ cần phải cài đặt một phiên bản SQL Server. Bạn cũng sẽ cần đảm bảo rằng trường hợp này có thể nói chuyện với máy chủ Postgres của bạn (kết nối với pg_hba.conf) Khi ở đó, bạn có một vài đường dẫn tốt để di chuyển dữ liệu.

Đường dẫn đầu tiên sẽ là cài đặt trình điều khiển Windows ODBC của Postgres và thiết lập kết nối với máy chủ pg. Sau đó, bạn có thể sử dụng SSIS để kịch bản di chuyển dữ liệu. Nếu bạn định đi theo con đường này, tôi khuyên bạn nên cài đặt SSIS khi cài đặt máy chủ cơ sở dữ liệu.

Tùy chọn khác cũng liên quan đến kết nối trình điều khiển ODBC, nhưng bạn có thể tạo một máy chủ được liên kết trong SQL Server và chạy chèn trên phiên bản pg thông qua SQL Server. Tôi đã trả lời chính xác câu hỏi này ở đây trước đây để không khó tìm.

BIÊN TẬP

Để kết hợp nhận xét của Aaron, một khi bạn khởi động SQL Server, bạn cũng có thể xuất dữ liệu sang các tệp phẳng theo nhiều cách khác nhau. Nếu bạn chọn đường dẫn này, hãy cho tôi biết và tôi sẽ đăng một vài cách để làm điều đó

EDIT (2):

Quá trình máy chủ được liên kết có thể không phải là cách tiếp cận tốt nhất trừ khi bạn muốn tạo các cấu trúc trước. Đó là phương pháp ưa thích của tôi, nhưng tôi thường đã có sẵn cấu trúc ở cả hai bên.

Điều đó để lại câu trả lời của Aaron Bertrand là câu trả lời hay nhất. Xin lưu ý rằng ngoài các loại dữ liệu ( IDENTITYso với SEQUENCE, postgres không biết gì NVARCHARvì bạn đã đặt mã hóa trên chính cơ sở dữ liệu). Postgres không biết gì về CREATE CLUSTERED INDEX( CLUSTERcó thể làm việc cho bạn). Cuối cùng, vì tôi thấy trong các bình luận rằng bạn sẽ sử dụng dữ liệu không gian, postgresql không biết gì về CREATE SPATIAL INDEXcú pháp. Bạn sẽ cần cài đặt postgis và sử dụng INDEXTYPEtừ khóa để tạo các chỉ mục không gian. Cuối cùng, hãy chắc chắn rằng bạn xử lý các lược đồ phù hợp.

Mẩu chuyện dài:

  1. Tạo tập lệnh và dữ liệu bằng phương pháp của Aaron Bertrand (tôi có thể gắn bó với mức bảng)
  2. Lưu ý chỉ số DDL (nếu nó vẫn còn hiệu lực), nhưng không bao gồm nó
  3. Tạo các chỉ mục trên postgres khi cấu trúc và dữ liệu được đưa ra

3
Tôi không nghĩ bạn cần cấu hình SQL Server để nói chuyện với Postgres. Tôi chắc rằng một khi bạn đã cài đặt SQL Server, bạn có thể trích xuất dữ liệu sang nhiều định dạng mà Postgres sẽ hiểu.
Aaron Bertrand

Lời xin lỗi. Ý tôi là bạn cần định cấu hình Postgres để chấp nhận các kết nối bên ngoài (SQL Server trong trường hợp này)
swasheck

Đừng xin lỗi. :-) Tôi chỉ cần làm rõ rằng bạn không cần phải có SQL Server nói chuyện trực tiếp với Postgres hoặc ngược lại ..
Aaron Bertrand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.