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';
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)))
(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
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