2012-11-10 48 views
5

Tôi có 2 cơ sở dữ liệu Oracle và thường xuyên sao chép dữ liệu từ DB để kiểm tra DB bằng TOAD, bằng cách tạo tập lệnh chèn cho Prod DB và chạy nó trên DB thử nghiệm sau.Sao chép dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác trong Oracle

Tôi đang cố gắng làm điều đó nhanh hơn thông qua tệp lô.

Tôi nghĩ rằng tôi có thể sử dụng giải pháp this nhưng DB có cột auto-increment. Nếu tôi sử dụng giải pháp này, cột đó có bị ảnh hưởng không? Tôi có cần phải thay đổi kịch bản theo cách nào đó không? Tôi đã không cố gắng này cho đến nay là tôi không có quyền truy cập làm DB và sẽ có thể kiểm tra này chỉ vào thứ hai.

Có cách nào tốt hơn để tôi có thể thực hiện việc này không? Những gì tôi về cơ bản tìm kiếm là làm toàn bộ thủ tục sao chép bằng cách sử dụng một tập tin thực thi, mà sẽ giảm thiểu thời gian tôi chi tiêu làm điều này bằng cách sử dụng TOAD.

Ngoài ra, tôi có thể được hướng dẫn đúng hướng nếu giải pháp không đơn giản.

+0

Mặc dù nó có thể rất hữu ích, lệnh [COPY] (http://docs.oracle.com/cd/E11882_01/server.112/e16604/apb.htm#CHDEAEDE) sẽ bị lỗi thời, và nó có một số hành vi kỳ lạ. Cách dễ nhất và nhanh nhất để thực hiện việc này là sử dụng [liên kết cơ sở dữ liệu] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_5005.htm#i2061505). –

+1

Xuất nhập khẩu cũng có thể được xem xét. – user75ponic

Trả lời

5

Đảm bảo hai bảng có cấu trúc giống nhau.

Kết nối với cơ sở dữ liệu đích.

Tạo liên kết công khai tới cơ sở dữ liệu nguồn. Người dùng phải có đặc quyền hệ thống "CREATE PUBLIC DATABASE LINK" để thực hiện việc này.

CREATE PUBLIC DATABASE LINK mylink 
    CONNECT TO source_user IDENTIFIED BY source_password 
    USING 'source_entry_in_tnsnames'; 

Sao chép dữ liệu:

INSERT INTO mytable SELECT * FROM [email protected]; 

Nếu khóa chính của bảng xuất phát từ một trình tự, thiết lập các chuỗi để - ít nhất - giá trị tương tự như trong cơ sở dữ liệu nguồn:

ALTER SEQUENCE mysequence increment by 100000; 
SELECT mysequence.nextval FROM DUAL; 
ALTER SEQUENCE mysequence increment by 1; 
+0

Dấu nháy đơn xung quanh 'source_entry_in_tnsnames' là rất quan trọng; mà không có chúng, bạn có thể dành thời gian tự hỏi tại sao Oracle ném lỗi vào bạn. Xem [tài liệu] (https://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_5005.htm). –

Các vấn đề liên quan