2011-07-05 33 views
5

Tôi mới sử dụng Oracle và tôi đang di chuyển dữ liệu cụ thể từ một DB trên một máy chủ sang DB trên máy chủ khác.Di chuyển dữ liệu giữa các máy chủ khác nhau trong oracle

Hai DB có cùng lược đồ, nhưng tôi muốn kéo các cột cụ thể được tham chiếu bằng khóa của chúng và di chuyển dữ liệu vào máy chủ khác. Tôi đang cố gắng tìm ra kế hoạch tấn công tốt nhất là gì.

Phương pháp cho phép dòng lệnh chỉ để tôi có thể nhập vào khóa dữ liệu tôi muốn di chuyển được ưu tiên. Có lẽ nó có thể thực hiện với một kịch bản PLSQL?

Cảm ơn.

Trả lời

8

Giả sử rằng bạn có thể tạo các kết nối mạng giữa hai cơ sở dữ liệu, tùy chọn đơn giản nhất là tạo ra một liên kết cơ sở dữ liệu giữa chúng, tức là

CREATE DATABASE LINK to_b 
    CONNECT TO username_on_b 
    IDENTIFIED BY password 
    USING 'tns_alias_for_b' 

Sau đó bạn có thể sử dụng liên kết cơ sở dữ liệu để truy vấn dữ liệu từ cơ sở dữ liệu B , tức là

INSERT INTO table_name(list_of_columns) 
    SELECT list_of_columns 
    FROM [email protected]_b 
    WHERE primary_key_value = <<some value>>; 

Đó có thể là câu lệnh SQL thẳng, một phần của thủ tục PL/SQL hoặc một phần của tập lệnh SQL * Plus. Một thủ tục PL/SQL

CREATE OR REPLACE PROCEDURE move_row_from_b( 
    p_key_value IN table_name.primary_key%type 
) 
AS 
BEGIN 
    INSERT INTO table_name(list_of_columns) 
    SELECT list_of_columns 
     FROM [email protected]_b 
    WHERE primary_key_value = p_key_value; 
END move_row_from_b; 

mà có thể được gọi hoặc thông qua EXEC từ SQL * Plus hoặc thông qua một khối ẩn danh PL/SQL

SQL> exec move_row_from_b(23); 

BEGIN 
    move_row_from_b(23); 
END; 

Hoặc bạn có thể viết một SQL * Plus kịch bản

variable key_value number; 
accept key_value prompt 'Enter key: ' 
INSERT INTO table_name(list_of_columns) 
    SELECT list_of_columns 
    FROM [email protected]_b 
    WHERE primary_key_value = :key_value; 
+0

Cảm ơn, tôi chỉ đang xem xét sử dụng liên kết cơ sở dữ liệu, nhưng không chắc đó có phải là cách tiếp cận tốt nhất hay không. Bạn có biết cách tôi có thể làm cho nó chấp nhận đầu vào của người dùng không? I E. Tôi có thể gõ vào "23" và nó chọn cột nơi table_id = '23'? – null

+0

@null - Đã thêm một vài ví dụ về việc gọi nó. Các kịch bản lệnh SQL * Plus có thể chấp nhận đầu vào của người dùng. PL/SQL không thể mặc dù bạn có thể gọi thủ tục và truyền tham số. –

+0

Cảm ơn rất nhiều điều này là chính xác những gì tôi đang tìm kiếm. Tôi đã thấy rằng điều này là có thể, nhưng không chắc đó có phải là cách tiếp cận thông minh hay không (chưa bao giờ thực hiện nó trước đây). – null

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