2012-01-20 49 views
9

Tôi đã viết truy vấn sau bằng tài liệu tại: Oracle Documentation để sao chép một số dữ liệu từ cơ sở dữ liệu/bảng trên máy chủ sản xuất của tôi sang cơ sở dữ liệu/bảng trên máy chủ Sandbox.Làm thế nào để sao chép dữ liệu từ cơ sở dữ liệu/bảng này sang cơ sở dữ liệu/bảng khác

COPY FROM username1/[email protected]<production_IP> to username2/[email protected]<sandbox_IP> INSERT TABLE_C (*) USING (SELECT * FROM TABLE_C WHERE COL_A = 4884);

Tuy nhiên, tôi đang liên tục chạy vào Connection failed lỗi. Có gì sai với truy vấn không?

+0

Bảng đích đã tồn tại chưa? – tallybear

+0

'production_IP' có phù hợp với địa chỉ IP không? Nếu có, điều đó là không đủ. Bạn cần phải đặt tên TNS và sử dụng tên SID hoặc tên dịch vụ hoặc sử dụng tên kết nối dễ dàng (bao gồm cả tên SID hoặc tên dịch vụ). – Codo

+0

@tallybear: Có –

Trả lời

16

Trong môi trường Oracle điển hình, bạn đã thiết lập tên TNS. Đó là một dịch vụ tra cứu các tham số kết nối cho các cá thể Oracle được cung cấp một tên SID hoặc tên dịch vụ. Ở dạng đơn giản nhất, tên TNS là một tệp có tên là tnsnames.ora được đặt theo biến môi trường TNS_ADMIN (trỏ đến thư mục chứa tệp).

Với SIDs PRODSANDBOX, sau đó bạn có thể sao chép các bảng từ tiện ích dòng lệnh sqlplus:

COPY FROM username1/[email protected] to username2/[email protected] 
    INSERT TABLE_C (*) USING (SELECT * FROM TABLE_C WHERE COL_A = 4884); 

Xin lưu ý rằng lệnh COPY này chỉ hỗ trợ một tập hạn chế về kiểu dữ liệu Oracle: char, ngày, dài, varchar2, số.

Nếu bạn chưa thiết lập tên TNS, bạn cần phải biết tên máy chủ hoặc địa chỉ IP, số cổng và tên dịch vụ. Cú pháp sau đó sẽ trở thành:

COPY FROM username1/[email protected]//192.168.3.17:1521/PROD_SERVICE to username2/[email protected]//192.168.4.17:1521/SANDBOX_SERVICE 
    INSERT TABLE_C (*) USING (SELECT * FROM TABLE_C WHERE COL_A = 4884); 

Để xác định SID và/hoặc tên dịch vụ, bạn nên xem xét tệp TNSNAMES.ORA trên chính máy chủ cơ sở dữ liệu. Nếu bạn có thể đăng nhập vào cơ sở dữ liệu, bạn có thể sử dụng các truy vấn sau để xác định SID và dịch vụ tên (nhưng đừng hỏi tôi là có):

select name from v$database; 

select * from global_name; 

select instance_number, instance_name, host_name from v$instance; 
Các vấn đề liên quan