2009-06-12 21 views
5

sahibi oldukları Veritabanı Bağlantısı Oluşturma için db bağlantısını oluşturmak için tipik sözdizimi gibidir. Bunu yapmanın bir yolu var mı?aşağıdaki Oracle sözdizimi Başka bir kullanıcı

şu işe ETMEZ:

create database link anotheruser.remote_db_link 
connect to remote_user 
identified by remote_password 
using 'remote_db' 
+0

"Seçilen" yanıt, "başka bir kullanıcının şemasında veritabanı bağlantısı oluşturamıyor" diyor. Bu tam olarak doğru değil. Bunu başarabilecek "Oracle sözdizimi" var. Cevabımı gör. – spencer7593

cevap

8

Restrictions on DBLinks - Başka bir kullanıcının şemasındaki bir veritabanı bağlantı oluşturmak edemez ve bir şemanın adıyla dblink hak olamaz.

+0

:-(Bundan korkuyordum. Zamanınız için teşekkürler. – Jeff

+0

Aslında, başka bir kullanıcının şemasında bir veritabanı bağlantısı oluşturmak mümkün .. – spencer7593

13

Sathya, CREATE DATABASE LINK sözdiziminde, başka bir şemada veritabanı bağlantısı oluşturulmasına izin vermediğinden, doğrudur. ANCAK ... Bu

Pratik Çözüm

sürece anotheruserCREATE DATABASE LINK ayrıcalığı olduğu gibi, başka bir kullanıcının şemasındaki bir veritabanı bağlantı oluşturmak için mümkün IS ve siz gibi bağlanır kullanıcı CREATE ANY PROCEDURE ayrıcalığı vardır.

Burada kullandığım geçici çözüm var:

 
    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" 
    /

en emin gevşemek edelim. İlk olarak, anotherusers şemasında bir prosedür oluşturuyorum; Bu yordam, çalıştırmak istediğim CREATE DATABASE LINK ifadesini içerir.

Yordam yürütüldüğünde, yordamın sahibi olarak çalışır, böylece CREATE DATABASE LINK bildirimi anotheruser tarafından yürütülür.

prosedürün adı

Ben varolan herhangi bir nesne adıyla çakışmaması emin olmak için gereken durum dışında önemli değildir. Bu nesneyi "geçici" olarak işaretlemek için "tmp" i kullanarak ve yordam adının bir parçası olarak geçerli yyyymmddhh24miss'i kullanarak küçük harfleri (yordam adını çift tırnak içine alarak) kullanırım. (Genellikle eşleşen bir object_name olmadığını kontrol etmek için DBA_OBJECTS sorgusu çalıştırıyorum.)

"Bir kerelik" türü yönetici işlevi için bu geçerli bir çözümdür. Bunu diğer alternatife tercih ediyorum: kullanıcı şifresini değiştirmek, şifreyi değiştirmek, kullanıcı olarak bağlanmak ve kurtarıcının şifresini yeniden kaydetmek.)

+0

Vay, harika çözüm ... Çok teşekkürler !!! – kupa

+0

Patron! –

-2

Sys kullanıcısı olarak SYS.DBA_DB_LINKS'deki tüm db linklerini görüntüleyebilirsiniz. görünüm. Bu görünüm bağlantısı $ ve user $ tablosunu kullanır. Genellikle yeni dblink oluşturabilir ve link $ tablosunda gösterebilirsiniz. Ardından sahibini değiştirin (kullanıcı kimliğinden kimliği kullanın). taahhüt. Bitti.

+0

Yanıtladığınız için teşekkür ederiz, ancak bu sorunun zaten kabul edilmiş bir cevabı var: – alestanis

+0

Bu yanıtta açıklanan yaklaşımın Oracle tarafından desteklenmediğini unutmayın.Oracle, Oracle desteğinin yönü haricinde SYS şemasındaki tabloların içeriğini değiştirmek için DML'yi yayınlamaya karşı uyarır. – spencer7593