程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle學習(18)【DBA向】:分布式數據庫

Oracle學習(18)【DBA向】:分布式數據庫

編輯:Oracle教程

Oracle學習(18)【DBA向】:分布式數據庫


分布式數據庫

什麼是分布數據庫?

l數據物理上被存放在網絡的多個節點上,邏輯上是一個整體。

分布式數據庫的獨立性

l分布數據的獨立性指用戶不必關心數據如何分割和存儲,只需關心他需要什麼數據。

Oracle分布式RDBMS

本地操作 遠程操作 分布操作
\

本地操作

RDBMS

SQLPLUS等工具


\

lORACLE_HOME=/oracle/oracle1/app/oracle/product/8.1.6 lORACLE_SID=o8i1 lORACLE_OWNER=oracle1

 

 

遠程操作

利用本地的工具,訪問遠程的數據庫

\

分布操作

l跨節點數據的創建及查詢 l跨節點數據更新
\




分布操作過程

定義數據庫鏈路

 

定義數據庫鏈路

 

CREATE DATABASE LINK [db_link_name] CONNECT TO

[user_name] IDENTIFIED BY [password]USING '[tns_name]';

 

?[DB_LINK_NAME]:是所要連接的數據庫的服務名,也就是該數據庫的真實名稱(通常就是SID)。

 

 

?[USRE_NAME]:是所要連接的用戶名稱。

 

 

?[PASSWORD]:是所要連接的用戶的密碼。

 

 

?[TNS_NAME]:是所要連接的數據庫的服務命名。

 

 

例如:

 

 

?\

 

利用 Net Manager 配置本地命名

步驟: 1.打開Net Manager
2.出現歡迎界面 3.展開 “本地”,選擇 “服務命名”。單擊頁面左邊的加號 + 4.出現 網絡服務名向導。輸入一個網絡服務名稱,例如: remoteOrcl。單擊下一步 5.選擇協議,用於連接數據庫。您可以接受默認的 TCP/IP (網絡協議),點擊下一步 6.輸入遠端數據庫計算機的地址,點擊下一步 7.輸入遠端數據庫的SID,點擊下一步 8.向導的最後一頁使您能夠利用您輸入的信息測試連接。 9.在左邊的樹狀菜單中,會出現我們剛才配置的服務命名 10.保存網絡配置 11.查看文件C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora,是否已經加入以下內容:
\


分布式數據庫查詢

select ename,dname

from dept, emp@L2

where emp.deptno=dept.deptno;

 

l L2即為前面所創建的數據庫鏈路。

透明存取-別名

lcreate synonym emp1 for emp@L2 ;

selectdname,ename,sal

fromemp1, dept

whereemp1.deptno=dept.deptno;


建立遠程表的視圖

createview emp

as

select * from emp1@L1

union

select * from emp2@L2 ;



Select* from emp;

分布式數據庫的其他操作

插入操作:
?insert into emp select * from emp@L2;

數據復制:
?create table emp as select * from emp@L2;
 

分布式數據庫的跨節點更新

l快照 l觸發器

快照

 

定義快照維護關系表的異步副本

 

 

?指在主表修改後的指定時間內刷新副本,用於主表修改少,但頻繁查詢的表。

 

 

create snapshot emp(

refresh start with sysdate

next next_day(sysdate,’Monday’)

as select * from emp@L1 ;

 

select* from emp; (本地數據庫中查詢快照的數據)

利用觸發器實現數據的同步

 

createor replace trigger update_emp

 

afterupdate on emp

 

foreach row

 

begin

 

update emp@L2 set emp.sal=:new.sal

 

where emp.empno=:new.empno;

 

end;

 

 

上述知識點的一些sql實現:

SQL> --創建數據庫鏈路
SQL> conn / as sysdba
已連接。
SQL> grant create database link to scott;


授權成功。


SQL> conn scott/tiger
已連接。
SQL> create database link l2 connect to scott identified by tiger using 'remoteorcl';


數據庫鏈接已創建。

 

SQL> select ename,dname
2 from dept, emp@L2
3 where emp.deptno=dept.deptno;


ENAME DNAME
---------------------------------------- --------------
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING ACCOUNTING
TURNER SALES
ADAMS RESEARCH


ENAME DNAME
---------------------------------------- --------------
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING




已選擇14行。
 

SQL> /


ENAME DNAME
---------------------------------------- --------------
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING ACCOUNTING
TURNER SALES
ADAMS RESEARCH


ENAME DNAME
---------------------------------------- --------------
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING




已選擇14行。

 

SQL> /


ENAME DNAME
---------------------------------------- --------------
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING123 ACCOUNTING
TURNER SALES
ADAMS RESEARCH


ENAME DNAME
---------------------------------------- --------------
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING




已選擇14行。


SQL> host cls


SQL> create synonym remoteemp for emp@l2;


同義詞已創建。

 

SQL> select ename,dname
2 from dept, remoteemp
3 where remoteemp.deptno=dept.deptno;


ENAME DNAME
---------------------------------------- --------------
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING123 ACCOUNTING
TURNER SALES
ADAMS RESEARCH


ENAME DNAME
---------------------------------------- --------------
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING




已選擇14行。

 

SQL> select ename,dname
2 from dept, remoteemp
3 where remoteemp.deptno=dept.deptno;


ENAME DNAME
---------------------------------------- --------------
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING123 ACCOUNTING
TURNER SALES
ADAMS RESEARCH


ENAME DNAME
---------------------------------------- --------------
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING




已選擇14行。


SQL> create or replace trigger sycnempsal
2 after update
3 on emp
4 for each row
5 begin
6
7 update remoteemp set sal=:new.sal where empno=:new.empno;
8
9 end;
10 /


觸發器已創建


SQL> select sal from emp where empno=7839;


SAL
----------
8186


SQL> update emp set sal=sal+1 where empno=7839;


已更新 1 行。


SQL> commit;


提交完成。


SQL> select sal from emp where empno=7839;


SAL
----------
8187


 



觸發器應用場景三:實現數據的同步備份
只備份員工的薪水




create or replace trigger sycnempsal
after update
on emp
for each row
begin


update remoteemp set sal=:new.sal where empno=:new.empno;


end;
/

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved