Veritabanları arasında veri iletişimi sağlanan köprü nesneleridir.
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 [email protected];
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 [email protected];
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 [email protected]_connect
SET salary=salary*1.1
WHERE last_name = ‘King’;
INSERT işlemi
Kullanımı:
INSERT INTO [email protected]_connect(salary)
VALUES(salary*1.1);
WHERE last_name = ‘King’;
DELETE İşlemi
DELETE FROM [email protected]_connect ;
WHERE employee_id = 100;
SELECT:
SELECT * from [email protected]_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.