Tôi có một số .bak
tệ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.
Tôi có một số .bak
tệ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.
Câu trả lời:
Đây là những gì tôi đề nghị:
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 .
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:
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ợ.
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 ( IDENTITY
so với SEQUENCE
, postgres không biết gì NVARCHAR
vì 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
( CLUSTER
có 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 INDEX
cú pháp. Bạn sẽ cần cài đặt postgis và sử dụng INDEXTYPE
từ 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: