Sathya đúng, trong đó cú pháp CREATE DATABASE LINK
không cho phép tạo liên kết cơ sở dữ liệu trong lược đồ khác. TUY NHIÊN ...
CÁCH GIẢI QUYẾT
Nó LÀ có thể tạo ra một liên kết cơ sở dữ liệu trong schema của người dùng khác, miễn là anotheruser
có CREATE DATABASE LINK
đặc quyền, và người dùng mà bạn đang kết nối như có CREATE ANY PROCEDURE
đặc quyền.
Đây là workaround tôi sử dụng:
create procedure anotheruser."tmp_doit_200906121431"
is
begin
execute immediate '
create database link remote_db_link
connect to remote_user
identified by remote_password
using ''remote_db'' ';
end;
/
begin
anotheruser."tmp_doit_200906121431";
end;
/
drop procedure anotheruser."tmp_doit_200906121431"
/
Hãy thư giãn mà. Đầu tiên, tôi tạo một thủ tục trong lược đồ của anotherusers
; thủ tục này chứa câu lệnh CREATE DATABASE LINK
mà tôi muốn chạy.
Khi thủ tục được thực hiện, nó chạy với tư cách chủ sở hữu của quy trình, sao cho câu lệnh CREATE DATABASE LINK
được thực thi bởi anotheruser
.
Tên của quy trình không quan trọng, ngoại trừ việc tôi cần đảm bảo rằng nó không xung đột với bất kỳ tên đối tượng hiện có nào. Tôi sử dụng chữ thường (kèm theo tên thủ tục trong dấu ngoặc kép), sử dụng "tmp" để đánh dấu đối tượng này là "tạm thời" và sử dụng yyyymmddhh24miss hiện tại làm một phần của tên thủ tục. (Tôi thường chạy truy vấn DBA_OBJECTS để kiểm tra xem một đối tượng trùng khớp không tồn tại.)
Đối với chức năng quản trị kiểu "một lần", đây là giải pháp khả thi. Tôi thích điều này để thay thế khác: lưu mật khẩu của người khác, thay đổi mật khẩu, kết nối với tư cách người dùng và đặt lại mật khẩu của người khác lại thành lưu.)
Câu trả lời "được chọn" cho biết "bạn không thể tạo liên kết cơ sở dữ liệu trong lược đồ của người dùng khác". Điều này là không đúng sự thật. Có IS "cú pháp Oracle" có thể thực hiện điều này. Xem câu trả lời của tôi. – spencer7593