26 Mart 2012 Pazartesi

Dblink kullanma


Dblink, Databaseler arasında köprü kuran  database objelerdir. Oracle database yada farklı tür databaseler arasında remote köprüler oluşturarak hedef database üzerindeki şema nesnelerine  erişmek için kullanılır. Farklı türk databaseler arasında iletişim kurmak için ise oracle heterojen servislerin kurulup ayarlanması gerekir.
Oluşturulması:
CREATE [PUBLIC] [PRIVATE][SHARED]DATABASE LINK dblink_name
Connect to target_user_name,
İdentified by Target_user_password
USING ’tns_name’;

Erişeceğiniz database üzerindeki bir kullanıcı ve onun şifresini girmen ve database  tnsname.ora dosyasındaki service_name ‘ i belirtilmesi gerekir.
PUBLIC  database üzerindeki tüm herkesin uzak  database’ erişmesi için kullanılır.
PRIVATE ise sadece belirlediğin dblink oluşturucu hesab sahibinin uzak database’ e erişmesi için kullanılır.
SHARED: oluşturulan database herkes tarafından paylaşılmasını sağlar. Ama burada authenticated user ans pasword’ un güvenlik açısından girilmesi gerekir. Sonuçta herkese açık bir dblink oluşturursak bunun güvenlik tarafını da düşünmemiz gerekecektir.
Örnek: shared DBLINK oluşturulması;
CREATE SHARED PUBLIC DATABASE LINK db_lnk
CONNECT TO scott IDENTIFIED BY tiger
AUTHENTICATED BY sec_usr IDENTIFIED BY sec_pass
USING 'ORCL';

Dblink oluşturabilecek bir kullanıcının
 private database link oluşturabilmesi için :  CREATE DATABASE LINK ,
public database link oluşturabilmesi için :  CREATE PUBLIC DATABASE LINK
haklarına sahip olması gerekir.
Current user kullanarakta dblink oluşturabilirsin. Current user, Remote database kullanıcısı ile dblink oluşturduğun user’la aynı olmak zorundadır. O yüzden Curretn user ekini kullacaksak her iki database tarafındada global bir user olması gerekir.
CREATE PUBLIC DATABASE LINK remote_connect
CONNECT TO CURRENT_USER
USING ‘ORCL’;

Örnek:
CREATE PRIVATE DATABASE LINK remote_connect
CONNECT  TO hr IDENTIFIED BY  hr
USING ‘ORCL’;


Örnek  using  satırında belirtmiş olduğumz yerel database’ deki ORCL service name(tnsnames.ora) :
ORCL = (DESCRIPTION = (ADDRESS =
             (PROTOCOL = TCP) (Host = XX.oracle.com) (Port = 1521))
             (CONNECT_DATA = (SID = orcl) (GLOBAL_NAME = orcl.oracle.com)
             (SERVER = DEDICATED)))
Dblink oluştutulurken de GLOBAL_NAME girilebilir. GLOBAL_NAME öğrenmek için
Remote server’da
SELECT GLOBAL_NAME FROM GLOBAL_NAME;

GLOBAL_NAME
-----------
orcl.oracle.com

ile öğrenilebilir. Bir GLOBAL_NAME database_name+domain’ den oluşur.
Local tarafta global name erişimine izin vermek için  initdbname.ora dosyasında ise ;
global_names=true;
yada
ALTER SYSTEM SET GLOBAL_NAME=true;
eklenir.
Remote tarafta ise initdbname.ora dosyasına db_domain set edilmelidir. Dikkat edilmesi gereken nokta database ‘ler aynı domainde olması gerekir.
 Örnek  local database   ora.oracle.net
remote  database ise    orcl.oracle.com
 ise farklı ise Dblink oluşturulur ama erişim sağlanamaz.
Çözüm ,
oluşturacağın dblink ismini remote database yani  orcl.oraclecom  verilir
yada remote database’ in global_name değiştirilir.
ALTER DATABASE RENAME global_name to orcl.oracle.net;
İle aynı domaine sahip olunur. Sorun çözülmüş olur.
Ve global isimli bir dblink oluşturak için;
CREATE PUBLIC DATABASE LINK orcl.oracle.com
CONNECT  TO hr IDENTIFIED BY  hr
USING ‘ORCL’;

Bir view oluşturarak;
CREATE VIEW vw_emp_orcl
AS
SELECT * FROM employees@orcl.oracle.com;

Yada bir synonym oluşturarak;
CREATE PUBLIC SYNONYM sn_emp_orcl
FOR
employees@ orcl.oracle.com;

yada bir tablo oluşturarak;
CREATE TABLE tbl_emp_orcl
AS
SELECT * FROM employees@orcl.oracle.com;

Lokal database ‘de nesne olarak kullanımı yaygınlaştırılabilir.
DDL işlemelerini desteklemez. DML ve Query işlerini rahatlıkla yapabilirsiniz.

Update  işlemi
Kullanımı
UPDATE employees@remote_connect
   SET salary=salary*1.1
   WHERE last_name = 'King';


INSERT işlemi
Kullanımı:
INSERT INTO employees@remote_connect(salary)
VALUES(salary*1.1);
   WHERE last_name = 'King';
 
DELETE İşlemi
 
DELETE FROM employees@remote_connect ;
   WHERE employee_id = 100;
 
 
SELECT:

SELECT * from  employees@remote_connect ;

 
Database üzerinde tüm dblinkleri görmek için
 
SELECT * FROM all_db_links ;

yada 

SELECT * FROM dba_db_links; 
kullanılır.

DBLinkleri silmek için ise

DROP DATABASE LINK dblink_name

Dbinkleri close etmek için

ALTER SESSION CLOSE DATABASE LINK remote_connect;

Kullanılır.

0 yorum:

Yorum Gönder