Oracle安裝介質:
OracleInstanceClient
VirtualBox虛擬機/再安裝擴展插件(才能使虛擬機和主機共享文件)
xxx.vdi文件.導入到VirtualBox虛擬機.
取消虛擬機使用硬件加速(這個功能必須在主機的BIOS)裏面進行設置).
設置網絡鏈接類型.
關閉虛擬機防火牆(主機和虛擬機之間通訊).
建立共享文件夾.
網絡映射驅動器設置共享文件夾.
安裝Oracle數據庫軟件.
設置虛擬機的內存通常是主機內存的1/4.
Oracle11g數據庫軟件sql
客戶端鏈接Oracle數據庫:
例如:sqlplus scott/tiger@127.0.0.1:1521/orcl數據庫
Oracle Database 客戶機
SQLDevloper Java開發能夠在任何平臺上使用.
PLSQLDevloper只能在window系統使用.express
一個Oracle服務器:
是一個數據庫管理系統(RDBMS).它提供開放的,全面的,近乎完整的信息管理.
是由一個Oracle數據庫和多個實例組成.windows
Oracle存放數據庫目錄:
oradata
orcl
*.ctl控制文件,記錄數據庫的結構
*.dbf數據文件,存放數據.
*.log日誌文件.數組
多個實例訪問一個數據庫,這就是Oracle數據庫集羣.
內存A(實例) |----------
|
內存B(實例) |---------- [Oracle數據庫:Orcl,物理概念]
|
內存C(實例) |----------tomcat
項目集羣:
TomcatA |
|
TomcatB |(prj.war) (MYSQL數據庫)
|
TomcatC |
只要有tomcat能夠訪問MYSQL數據庫.項目就能夠正常運行.安全
集羣(cluster)的優勢:
1.Load Balance 負載均衡:減輕服務器壓力.
2.Fail Over 失敗遷移:提升系統的可靠性.服務器
Oracle集羣的專有名詞,RAC : Real Application Cluster網絡
Oracle內存中的實例如何操做硬盤上的數據庫文件?
經過操做系統進程:
讀
寫
內存/實例
(PGA : Program Global Area) ---| -|
Oracle客戶端 ------| (PGA) ---| --- (SGA : System Global Area) - (經過操做系統進程:讀、寫) -| (Oracle數據庫:orcl)
(PGA) ---| -|併發
Oracle命令:
-- 清理屏幕數據
HOST CLS;
-- 查看當前用戶
SHOW USER;
-- 查看當前用戶下的表
SELECT * FROM TAB;
-- 查看錶結構
DESC/DESCRIBE 表名;
查看行寬:SHOW LINESIZE;
設置行寬:SET LINESIZE 值;
-- 設置列寬:
COL/COLUMN 列名稱 FOR/FORMAT a1(表明一個字符寬度)/9(表明一個數字寬度);
*** Oracle執行時間開關(默認關閉):SET TIMING ON|OFF(開啓|關閉);
*** 別名 AS,給表起別名不能使用AS.
WHERE、HAVING後面的條件不能使用別名.
*** 查詢一個值是不是空值:
SELECT * FROM ... WHERE comm IS [NOT] NULL;
*** Oracle中的濾空函數:
1.NVL(a,b):
當a的值爲空的時候,返回b值,不然返回a值
2.NVL2(a,b,c):
表示當a爲NULL的時候,返回c,不然返回b.
*** Oracle錄屏命令:
開始:SPOOL txt文件路徑;
結束:SPOOL OFF;
*** / 表示執行上一條SQL語句.
*** 修改錯誤SQL語句:
1.使用CHANGE/C命令
2.使用ED/EDIT命令
*** 在上一條SQL語句追加SQL語句:
使用A/APPEND命令:(至少要有兩個空格)
*** SQL優化原則:
1.儘可能使用列名錶明*
2.Oracle判斷WHERE條件的順序:從右往左。
3.儘可能使用WHERE代替HAVING.
4.理論上多表查詢的效率優於子查詢.
5.儘可能不要使用集合運算.
*** SQL中的空值:
1.包含空值NULL的表達式結果都爲NULL
2.NULL 永遠不等於 NULL
3.查詢的字段有空值,不可使用NOT IN來查詢.
4.NULL空值的排序,空值最大.在此排序後加上 NULLS LAST 以控制排序效果
5.分組函數在計算時會自動過濾掉空值.
解決:能夠經過濾空函數來處理.
*** 僞表:DUAL
是Oracle管理員提供的僞表,存在僅僅是爲了知足語法的要求.
*** 僞列:
LEVEL : 在層次查詢中表明查詢的深度.
ROWNUM : 行號,永遠按照默認的順序生成.
行號只能使用 < <= 符號不能只用 > >= 符號.
對於 = 等號只能使用 ROWNUM=1.
由於Oracle是行式數據庫,只能每行讀取.
ROWID:行地址,至關於一個指針,它表示指向到數據文件的位置.(*.dbf數據文件)
*** 臨時表:
手動建立:CREATE GLOBAL TEMPORARY TABLE 表名(...);
ORDER BY 在排序的時候回自動建立.
臨時表特色:
臨時表當事務或會話結束的時候,表中的數據會自動刪除.
*** SQL字符串鏈接:
1.鏈接函數:CONCAT('hello','world')
MYSQL:SELECT CONCAT('hello','world');
ORACLE:SELECT CONCAT('hello','world') FROM DUAL;
2.鏈接符: ||
*** 行轉列函數:WM_CONCAT(...) 屬於分組函數.
*** WHERE 子句中不能使用別名.
*** Oracle中去掉碎片:
1.ALTER TABLE 表名 MOVE;
2.先導出、再導入碎片就會被移除.
*** Oracle執行SQL腳本:
@SQL腳本路徑
*** Oracle開啓關閉操做數據的回顯信息:
SET FEEDBACK ON(開,默認)|OFF(關);
Oracle查詢語句:
SELECT [ALL/DISTINCT] * FROM ...
[ALL/DISTINCT]做用於全部列
*** 查詢字符串類型大小寫敏感.
*** 查詢日期類型格式敏感.
Oracle數據庫默認的日期格式:DD-MON-RR(日-月-年)
能夠進行修改
*** Oracle查詢日期格式:
SELECT * FROM V$NLS_PARAMETERS;
*** Oracle修改日期格式:
ALTER SESSION/SYSTEM SET NLS_DATE_FORMAT = 'yyyy-mm-dd';
*** 日期類型和日期類型之間只能進行減法運算.
*** Oracle鏈接數據庫的三種認證方式:
密碼認證.
sqlplus 用戶名/密碼@ip:端口號/數據庫名
sqlplus 用戶名/密碼 as sysdba
主機認證.
sqlplus / as sysdba|system
全局認證.
比較運算符:
>大於 、 >=大於等於 、 <小於 、 <=小於等於 、!=(<>)不等於
BETWEEN ... AND ...
[NOT] IN
LIKE 'pattern(%_)' *** 模糊查詢包含下劃線的字符就須要轉義:'\_'
IS [NOT] NULL
邏輯運算符:
AND 而且
OR 或
NOT 非
Oracle排序:ORDER BY子句:
ORDER BY 排序字段(列名、表達式、別名、序號(列的索引,從1開始)) ASC(升序,默認)|DESC(降序)
Oracle函數:
函數必須有返回值,可是能夠沒有參數.
單行函數:
1.字符函數:
LOWER 轉小寫
UPPER 轉大寫
INITCAP 首字母大寫
CONCAT 鏈接函數 CONCAT(a,b)
SUBSTR 截取函數 SUBSTR(a,b,c);
表示從a中的b位置開始截取,取c位.
LENGTH(單位:字符)/LENGTHHN(單位:字節) 獲取字符串大小
INSTR 查詢函數,INSTR(a,b) 表示在a中查找b.
LPAD(左填充)/RPAD(右填充)
LPAD('abcd',10,'*') 、RPAD('abcd',10,'*')
TRIM 去除兩端字符 TRIM(a FROM b)表示從b的兩端去除包含a的字符串.
REPLACE 替換函數 REPLACE(a,b,c) 表示在a中出現的b字符使用c替換.
2.數字函數:
ROUND 四捨五入 ROUND(a,b)表示對數值a保留多少位小數.
TRUNC 截斷
MOD 求餘 MOD(a,b) 表示a對b求餘.
3.日期函數:
TO_CHAR : TO_CHAR(a,b) 表示將a值按照b格式化爲一個字符串.
例如:SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss') FROM DUAL;
MONTHS_BETWEEN 兩個日期類型相差的月數.
ADD_MONTHS 向指定的日期中加上若干個月數.
NEXT_DAY 指定日期的下一個日期.
例如:SELECT NEXT_DAY(SYSDATE,'星期五') FROM DUAL;
NEXT_DAY的應用:每一個星期一自動備份數據.
LAST_DAY 本月的最後一天.
ROUND 日期四捨五入.
ROUND(SYSDATE,'YEAR') , ROUND(SYSDATE,'MONTH')
TRUNC 日期截斷.
TRUNC(SYSDATE,'YEAR') , TRUNC(SYSDATE,'MONTH')
4.轉換函數:
隱式轉換:Oracle系統自動完成.
源數據類型 --> 目標數據類型
VARCHAR2或CHAR NUMBER或DATE
NUMBER或DATE VARCHAR2
顯示轉換:
TO_CHAR-> <-TO_CHAR
NUMBER --- CHARACTER --- DATE
<-TO_NUMBER TO_DATE->
TO_CHAR : TO_CHAR(a,b) 表示將a值按照b格式化爲一個字符串.
例如:SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss') FROM DUAL;
日期格式的元素:字符串和日期之間的轉換。
YYYY
YEAR
MM
MONTH
DY
DAY
DD
hh24
mi
ss
數字格式的元素:字符串和數值之間的轉換。
9 數字
0 零
$ 美圓福
L 本地貨幣符號
. 小數點
, 千位符
5.通用函數:適用於任何數據類型,也適用於空值.
NVL(a,b) 表示當a爲NULL的時候,返回b,不然返回a.
NVL2(a,b,c) 表示當a爲NULL的時候,返回c,不然返回b.
NULLIF(a,b) 表示當a等於b的時候返回NULL,不然返回a.
COALESCE(a,b,...,n) 表示從左往右返回第一個不爲空的值.
6.條件表達式:很實用.
CASE 表達式:屬於SQL99語法.
CASE express
WHEN 值1 THEN 處理1
WHEN 值2 THEN 處理2
...
ELSE 默認處理
END
DECODE 函數:Oracle本身的語法.
DECODE(express,值1,處理1,...,值n,處理n,默認處理);
多行函數:分組函數
AVG 求平均值
COUNT 計數
MAX 取最大值
MIN 取最小值
SUM 求和函數
GROUP BY 子句:
求部門的平均工資大於2000的部門?
SELECT DEPTNO,AVG(NVL(SAL,0)) AS "平均工資"
FROM EMP
GROUP BY DEPTNO
HAVING AVG(NVL(SAL,0)) > 2000
ORDER BY "平均工資" DESC;
WHERE和HAVING的區別?
1.WHERE後面不能有分組函數.HAVING能夠.
2.WHERE在查詢數據進入內存以前過濾數據.
3.HAVING在查詢數據進入內存以後過濾數據.
向上彙報:ROLL UP . GROUP BY語句的加強.
...GROUP BY ROLLUP(express1,express2,...)
*** BREAK ON DEPTNO SKIP 2 格式修飾.
BREAK ON NULL 取消格式修飾.
問題:
--------------------------------
DEPTNO JOB 工資總和
---------- --------- ----------
10 CLERK 1300
MANAGER 2450
PRESIDENT 5000
8750
20 CLERK 1900
ANALYST 6000
MANAGER 2975
10875
30 CLERK 950
MANAGER 2850
SALESMAN 5600
9400
29025
-------------------------------------------------
實現上面效果:
BREAK ON DEPTNO SKIP 2;
SELECT DEPTNO,JOB,SUM(SAL) AS "工資總和"
FROM EMP
GROUP BY ROLLUP(DEPTNO,JOB);
BREAK ON NULL;
多表查詢:
笛卡爾集:是多表查詢的基礎.
多表查詢的鏈接條件能夠避免所有的笛卡爾集.
鏈接的類型:
Oracle鏈接類型 SQL99鏈接類型
等值鏈接 CROSS JOINS
不等值鏈接 NATURAL JOINS
外鏈接 USING CLAUSE
自鏈接 FULL OR TWO SIDED OUTER JOINS
(不)等值鏈接:
查詢員工號、姓名、月薪、部門名稱?
SELECT e.EMPNO,e.ENAME,e.SAL,d.DNAME
FROM EMP e,DEPT d
WHERE e.DEPTNO = d.DEPTNO;
外鏈接:
按照部門統計員工人數,顯示部門號、部門名稱、部門人數?
Oracle語法:
SELECT d.DEPTNO,d.DNAME,COUNT(e.EMPNO)
FROM DEPT d,EMP e
WHERE e.DEPTNO = d.DEPTNO(+)
GROUP BY d.DEPTNO,d.DNAME;
SQL99語法:
SELECT d.DEPTNO,d.DNAME,COUNT(e.EMPNO)
FROM DEPT d
LEFT JOIN EMP e
ON e.DEPTNO = d.DEPTNO
GROUP BY d.DEPTNO,d.DNAME;
自鏈接:經過表的別名,將同一張表視爲多張表使用.
自鏈接不適合操做大數據的表.
當數據過大時,使用層次查詢代替.
查詢員工信息:員工的姓名 、 老闆的姓名.
SELECT E1.ENAME 員工姓名, E2.ENAME 老闆姓名
FROM EMP E1,EMP E2
WHERE E1.MGR = E2.EMPNO;
-----------------------------
員工姓名 老闆姓名
---------- ----------
FORD JONES
SCOTT JONES
TURNER BLAKE
ALLEN BLAKE
WARD BLAKE
JAMES BLAKE
MARTIN BLAKE
MILLER CLARK
ADAMS SCOTT
BLAKE KING
JONES KING
CLARK KING
SMITH FORD
-----------------------
層次查詢:
在層次查詢當中,只能有一張表.
SELECT LEVEL,ENAME, MGR
FROM EMP
CONNECT BY PRIOR EMPNO = MGR
-- 若是是從根節點開始遍歷:還能夠換一個方式寫.
-- START WITH MGR IS NULL
START WITH EMPNO = 7839 -- 從這個節點往下遍歷.
ORDER BY 1;
子查詢:
查詢月薪比SCOTT員工高的員工信息?
SELECT *
FROM EMP
WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME='SCOTT');
*** 寫子查詢注意的問題:
1.括號的使用.
2.合理的書寫風格.
3.能夠在主查詢的 WHERE、 SELECT、 HAVING、 FROM 後面放置子查詢.
(1)SELECT後面的子查詢語句只能是單行子查詢.
4.不能夠在GROUP BY後放置子查詢.
5.FROM 後面的子查詢.
(1)子查詢的結果做爲主查詢的數據源.
在已知的條件上增長新條件.
6.主查詢和子查詢能夠是不一樣表,只要子查詢返回的結果主查詢可使用便可.
7.通常不對子查詢進行排序.但在TOP-N問題分析中,必須對子查詢進行排序.
8.通常先執行子查詢再執行主查詢,可是相關子查詢例外.
(1)相關子查詢:
將主查詢中的某些值做爲參數傳遞給子查詢,
9.單行子查詢只能使用單行操做符,多行子查詢只能使用多行操做符.
單行操做符:= 、 > 、 >= 、 < 、 <= 、 !=(<>)
多行操做符:IN 、 ANY:任何 、 ALL:所有
10.子查詢中的NULL空值問題.
練習題:
1.找到員工工資最高的前三名,顯示:序號、員工編號、姓名、月薪?
SELECT ROWNUM,E.*
FROM
(SELECT E.*
FROM EMP E
ORDER BY E.SAL DESC) E
WHERE ROWNUM <= 3;
*** 擴展:Oracle使用ROWNUM實現分頁查詢?
SELECT E.*
FROM
(SELECT ROWNUM R,E.*
FROM
(SELECT E.*
FROM EMP E
ORDER BY E.SAL DESC) E
WHERE ROWNUM <= high) E
WHERE E.R >= low;
pageNo : 當前頁.
pageSize : 頁大小.
lastNum : (pageNo - 1) * pageSize
low : lastNum + 1
high : lastNum + pageSize
2.找到員工表月薪大於本部門平均薪水的員工
顯示:員工編號、姓名、月薪、部門平均月薪?
語法一:
SELECT E.DEPTNO,E.SAL,AVGE.AVGSAL
FROM EMP E,
(
SELECT E.DEPTNO,AVG(NVL(E.SAL,0)) AVGSAL
FROM EMP E
GROUP BY E.DEPTNO
) AVGE
WHERE E.DEPTNO = AVGE.DEPTNO
AND E.SAL > AVGE.AVGSAL;
語法二:
SELECT E.DEPTNO,E.SAL,(SELECT AVG(E1.SAL) AVGSAL FROM EMP E1 GROUP BY E1.DEPTNO HAVING E1.DEPTNO = E.DEPTNO) AS "DEPTAVGSAL"
FROM EMP E
WHERE E.SAL > (SELECT AVG(E1.SAL) AVGSAL FROM EMP E1 GROUP BY E1.DEPTNO HAVING E1.DEPTNO = E.DEPTNO);
3.統計每一年入職的員工個數
顯示:總數、年份1,年份2,...?
-- 計數思想.
集合運算:
1.並集:UNION [DISTINCT(默認)|ALL].
2.交集:INTERSECT.
3.減集:MINUS.
使用集合運算注意的問題:
1.參與集合運算的各個集合必須列數相同、列類型一致。
2.採用第一個集合的表頭做爲集合的表頭。
3.ORDER BY 對集合排序寫在最後。
4.使用括號。
Oracle中的表類型:
1.標準表
2.臨時表
3.索引表
SQL的新增、修改、刪除:
SQL類型:
1.DML(Data Manipulation Language 數據操做語言):
INSERT(增)、 UPDATE(改)、 DELETE(刪)、 SELECT(查)
2.DDL(Data Definition Language 數據定義語言):
CREATE DROP TRUNCATE TABLE(二維表)
CREATE DROP VIEW(視圖)
SEQUENCE(序列)
INDEX(索引)
SYNONYM(同義詞)
3.DCL(Data Control Language 數據控制語言):
GRANT(受權)
REVOKE(撤銷權限)
INSERT插入、新增操做:
語法:
INSERT INTO 表名[(列1,列2,...)] VALUES(值1,值2,...)[,(值1,值2,...)];
*** Oracle中的地址符 & 用法至關靈活.·
至關於PrepareStatement
用於新增:
INSERT INTO 表名[(字段列表)] VALUES(&column1,&column2,...);
用於查詢:
SELECT * FROM &TABLENAME;
批處理:
建立一張表結構與EMP表結構相同.
CREATE TABLE EMP10 AS SELECT * FROM EMP WHERE 1=2;
將EMP表中的數據批量插入到EMP10表中?
INSERT INTO EMP10 SELECT * FROM EMP WHERE DEPTNO = 10;
思考:如何海量插入數據?
1.數據泵.
2.SQL*LOADER工具
3.使用外部表.
UPDATE更新:
語法:
UPDATE 表名 SET 字段=值(數值,子查詢返回結果) WHERE ...
DELETE、TRUNCATE 刪除:
DELETE和TRUNCATE的區別?
1.DELETE逐條記錄刪除,TRUNCATE先刪除表,再重建表.
2.DELETE屬於DML(能夠回滾),TRUNCATE屬於DDL(不能夠回滾).
3.DELETE不會釋放空間,TRUNCATE會釋放空間.
4.DELETE會產生碎片,TRUNCATE不會產生碎片.
碎片的產生會影響查詢效率.
5.DELETE能夠閃回(FLASHBACK),TRUNCATE不能夠閃回
Oracle碎片圖解:
Oracle一張二維表中數據是從後往前存儲.
--------------------------------------------
Oracle指針:
HWM(High Water Mark 高水位線)
---------------------------->
--------------------------------------------
*** DELETE操做的效率比TRUNCATE效率高.
緣由:DELETE操做並非真正的被刪除,知識把數據換個地方存儲.
UNDO表空間.
Oracle數據庫事務:
Oracle屬於自動開啓事務.
1.起始標識:事務中的第一條DML語句.
2.結束標識:
(1)提交:
顯示提交:COMMIT
隱式提交:EXIT(退出)、DDL、DCL
(2)回滾:
顯示回滾:ROLLBACK [TO SAVEPOINT 保存點名稱]
隱式回滾:非正常退出、掉電...
定義事務保存點:SAVEPOINT 保存點名稱;
數據庫的隔離級別:
SQL99提供的4種事務隔離級別:
1.READ UNCOMMITTED (讀未提交數據):
容許事務讀取未被其它事務提交的變動,髒讀,不可重複讀,幻讀的問題都會出現.
2.READ COMMITTED (讀已提交數據):
只容許事務讀取其它事務提交的變動,能夠避免髒讀,可是不可重複讀和幻讀的問題會出現.
3.REPEATABLE READ (可重複讀):
確保事務能夠屢次從一個字段中讀取相同的值,在這個事務持續期間,禁止其它事務對這個字段進行更新,
能夠避免不可重複讀,可是幻讀的問題任然存在.
4.SERIALIZABLE (串行化):
確保事務能夠從一個表中讀取相同行,在這個事務持續期間,禁止其它事務對該表進行
插入、新增和刪除.全部的併發問題均可以免.可是性能十分低下.
Oracle中有3種事務隔離級別:
1.READ COMMITTED(讀已提交數據,默認)
2.SERIALIZABLE(串行化)
3.READ ONLY(只讀)
建立和管理二維表:
建立表條件:
1.具備CREATE TABLE權限
2.有存儲空間
建立表必須指定:
表名、列名、數據類型、數據類型大小
建立表:
1.CREATE OR REPLACE TABLE 表名 (
列名 數據類型 [數據約束],
...
);
2.CREATE OR REPLACE TABLE 表名[字段列表] AS (SubQuery);
操做表字段:
1.新增一個字段:
ALTER TABLE 表名 ADD 字段名 數據類型 [數據約束];
2.修改列屬性:
ALTER TABLE 表名 MODIFY 字段名 新數據類型 [數據約束];
3.修改列名稱:
ALTER TABLE 表名 RENAME COLUMN 原字段名 TO 新字段名;
4.刪除一個字段:
ALTER TABLE 表名 DROP COLUMN 字段名;
修改表名:
RENAME 原表名 TO 新表名;
刪除|清空表數據:
DELETE|TRUNCATE TABLE 表名;
刪除表:
DROP TABLE 表名;
刪除的表被放置到Oracle回收站中.
*** Oracle數據類型:
VARCHAR2(SIZE):可變長字符串.
CHAR(SIZE):定長字符串.
NUMBER(P,S):可變長數值.
DATE:日期型數據.
LONG:可變長字符數據,最大可達到2G.
CLOB:字符數據,最大可達到4G.
RAW AND LONG RAW:原始的二進制數據.
BLOB:二進制數據,最大可達到4G.
BFILE:存儲外部的二進制數據,最大可達到4G.
ROWID:行地址.
*** 數據的完整性約束:
約束是表一級的限制.
若是存在依賴關係,約束能夠防止刪除錯誤數據.
約束的類型:
NOT NULL:非空約束
UNIQUE:惟一約束
PRIMARY KEY:主鍵約束
FOREIGN KEY:外鍵約束,
主表的外鍵必須是副表的主鍵.
CHECK:
GENDER VARCHAR2(1) CHECK(GENDER IN('0','1')),
SAL NUMBER(10,2) CHECK(SAL > 0)
*** 查看Oracle回收站:
SHOW RECYCLEBIN;
清空Oracle回收站:
PURGE RECYCLEBIN;
查看回收站表數據:
SELECT * FROM "回收站表名";
*** CONSTRAINT:使用 CONSTRAINT 對約束命名.
*** 字段 CONSTRAINT 外鍵名稱 [FOREIGN KEY] REFERENCES 表名(字段列表)
ON DELETE SET NULL
ON UPDATE CASCADE
視圖VIEW:
視圖是一張虛表。
視圖創建在已有的表基礎之上。
視圖的優勢:
簡化查詢。
限制數據操做權限。
視圖建立:
CREATE OR REPLACE VIEW 視圖名
AS (SubQuery)
[WITH CHECK OPTION] [WITH READ ONLY];
*** 不建議經過視圖對錶進行修改.
刪除視圖:DROP VIEW 視圖名;
SEQUENCE序列:
與AUTO_INCREMENT同樣.
就是一個數組,事先放置到內存當中.
能夠提升效率.
建立序列SEQUENCE:
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE] -- 數組是否循環
[CACHE n | NOCACHE]; --數組默認長度
操做指針從序列中取出數據:
CURRVAL : 存放序列的當前值.
NEXTVAL : 存放指針的下一個值.
取值:序列名.CURRVAL|NEXTVAL
序列在下列狀況下會出現裂縫:
1.回滾
2.系統異常
3.多個表共用一個序列
若是不講序列的值裝入內存,可使用
USER_SEQUENCES表查看序列的當前有效值.
修改序列:
ALTERE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE] -- 數組是否循環
[CACHE n | NOCACHE]; --數組默認長度
刪除序列:
DROP SEQUENCE 序列名;
索引INDEX:
建立索引:
CREATE INDEX 索引名稱 ON 表名(字段列表);
索引表由Oracle數據庫自動維護.
刪除索引:
DROP INDEX 索引名稱;
刪除索引必須擁有DROP ANY INDEX權限.
同義詞SNYONYM:就是別名
能夠表明任意的數據庫對象.
建立同義詞:
CREATE [PUBLIC] SNYONYM 同義詞名稱 FOR [用戶名.]表|視圖...
同義詞的建立必須具備CREATE SNYONYM權限.
刪除同義詞:
DROP SNYONYM 同義詞名稱;
PLSQL程序設計:Oracle自創語法.
操做數據庫的複雜邏輯.
相似使用Java Jdbc操做Oracle.
Oracle對SQL語言的擴展.執行效率高.
*** 開啓|關閉Oracle的輸出開關:SET SERVEROUTPUT ON|OFF(默認);
*** 查看Oracle PLSQL程序包 DESC|DESCRIBE 程序包名稱;
*** 接收鍵盤輸入:ACCEPT 地址名 PROMPT '提示語';
使用鍵盤輸入值:&地址名
地址名存儲的是輸入值得地址名,這個地址保存了輸入的值.
PLSQL語法格式:
DECLARE
-- 聲明變量、光標、例外
BEGIN
-- 語句序列.
DBMS_OUTPUT.PUT_LINE('hello world!');
EXCEPTION
-- 例外處理語句.
END;
/
什麼是PLSQL?
1.PLSQL(Procedure Language Structured Query Language).
2.PLSQL是Oracle對SQL語言的過程化擴展.
3.指在SQL命令語言中增長了過程處理語句(例如:分支、循環等),
使SQL語言具備過程處理能力.
PLSQL變量和常量:
變量語法格式:
變量名 數據類型 [:=初始值];
常量語法格式:
變量名 CONSTANT 數據類型 [:=初始值];
變量數據類型:
CHAR
VARCHAR
DATE
NUMBER
BOOLEAN
LONG
EMP.ENAME%TYPE 引用型變量
EMP%ROWTYPE 記錄型變量
PLSQL條件語句:
語法格式:
IF 表達式1 THEN 處理語句1
ELSIF 表達式2 THEN 處理語句2
...
ELSIF 表達式n THEN 處理語句n
ELSE 另外處理語句
ENDIF;
循環語句:
1.
WHILE 表達式
LOOP
-- 循環體.
END LOOP;
*** 相似Java中的WHILE循環.
2.
LOOP
EXIT 表達式
-- 循環體
END LOOP;
*** 相似Java中的DO...WHILE循環.
3.
FOR 變量名 IN 表達式
LOOP
-- 循環體
END LOOP;
*** 相似Java中的FOR循環.
CURSOR光標|遊標:
相似Java中的ResultSet.
聲明光標CURSOR格式:
CURSOR 光標名稱 [(參數名 數據類型[,參數名 數據類型]...)]
IS SELECT 語句(可使用光標參數);
光標用於存儲一個查詢返回的多行數據.
操做光標:
打開光標:OPEN 光標名稱[(參數值[,參數值]...)];
取一行光標值:FETCH 光標名稱 INTO 變量;
關閉光標:CLOSE 光標名稱;
光標的屬性:返回TRUE|FALSE
%ISOPEN 是否開啓
%ROWCOUNT 影響的行數.
%FOUND 找到
%NOTFOUND 未找到
使用方式:
光標名稱+光標屬性(返回TRUE|FALSE)
練習:
1.使用光標查詢員工的姓名和月薪,並打印?
2.查詢某個部門的員工信息?
例外EXCEPTION:
例外是程序設計語言提供的一種功能,
用來加強程序的健壯性和容錯性.
*** Java程序中的例外EXCEPTION:
Java例外處理機制:向上拋出.
try{
...
}catch(Exception e1){
...
}catch(Exception e2){
...
}finally{
...
}
Oracle的系統定義異常:
NO_DATA_FOUND:未找到數據異常。
TOO_MANY_ROWS:SELECT ... INTO ... 語句匹配多行記錄異常。
ZERO_DIVIDE:被零除異常。
VALUE_ERR:算術異常或轉換異常。
TIME_OUT_RESOURCE:等待資源時發生超時異常。
Oracle用戶自定義異常:
異常名稱 EXCEPTION;
向EXCEPTION拋出異常:
RAISE 異常名稱;
被零除異常問題?
SET SERVEROUTPUT ON;
DECLARE
PNUM NUMBER := 1;
VALUE_ONE EXCEPTION;
-- 1.自定義異常.
BEGIN
PNUM := 1/0;
IF PNUM = 1 THEN RAISE VALUE_ONE;
-- 2.拋出異常.
EXCEPTION
WHEN ZERO_DIVIDE
THEN DBMS_OUTPUT.PUT_LINE('系統出現異常!');
DBMS_OUTPUT.PUT_LINE('0不能做爲被除數!')
WHEN VALUE_ERR
THEN DBMS_OUTPUT.PUT_LINE('算術或者轉換異常!');
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('未知異常!');
WHEN VALUE_ONE THEN DBMS_OUTPUT.PUT_LINE('值爲1');
-- 3.處理異常.
END;
/
使用PLSQL處理Oracle數據庫問題步驟:
1.需求分析
2.概要設計HIGH LEVEL DESIGN
詳細設計LOW LEVEL DESIGN
3.編碼CODING
4.測試TEST
5.上線APPLICATION
使用PLSQL處理Oracle問題考慮的問題:
1.SQL語句.
2.變量:初始值,如何獲得
*** Java的垃圾回收機制不受Java代碼的控制。
Java中System類下的gc()函數只是請求調用Java回收機制.
Java回收機制受虛擬機內存:-Xms100M -Xmx200M影響.
當Java的內存已滿,Java會優先回收最近最少使用的垃圾.
OUT參數中使用遊標:
*** 必須將存儲過程放到程序包中.
建立包頭:
CREATE [OR REPLACE] PACKAGE 包名 AS
TYPE empcursor IS REF CURSOR;
PROCEDURE queryEmpList(dno IN NUMBER,empList OUT empcursor);
END 包名;
建立包體:
CREATE [OR REPLACE] PACKAGE BODY 包名 AS
PROCEDURE 存儲過程名稱(dno IN NUMBER,empList OUT empcursor)
BEGIN
OPEN empList FOR SELECT * FROM EMP WHERE DEPTNO = dno;
END 存儲過程名稱;
END 包名;
觸發器TRIGGER:
觸發器是一個與表相關聯的、存儲的PLSQL程序.每當一個特定的
SQL操做語句(INSERT,UPDATE,DELETE)在指定的表上發出的時候,
數據庫會自動的執行觸發器中定義的語句序列.
觸發器的類型:
1.語句級觸發器:
在指定的操做語句以前或以後執行一次,
無論這條語句影響了多少行.
2.行級觸發器(FOR EACH ROW):
觸發語句做用的每一條記錄都會被觸發,在行級觸發器中
使用 :old 和 :new 僞記錄變量,識別值得狀態.
建立觸發器語法格式:
CREATE [OR REPLACE] TRIGGER 觸發器名稱
BEFORE|AFTER
INSERT|UPDATE|DELETE [OF 字段列表]
ON 表名
[FOR EACH ROW [WHEN(條件)]]
DECLARE
-- 聲明變量.
BEGIN
-- 實現邏輯語句.
EXCEPTION
-- 例外處理語句.
END;
/
*** 觸發器與僞記錄變量的值:
觸發語句 :old :new
INSERT 全部字段都是NULL空值 將要插入的數據
UPDATE 更新以前改行的值 更新改行後的值
DELETE 刪除改行以前的值 全部的字段都是NULL空值
*** Oracle觸發器中拋出異常,建議使用RAISE_APPLICATION_ERROR(errorCode,errorMessage)
函數拋出. errorCode錯誤代碼範圍:(-20999,-20000).
練習:
1.商品庫存和訂單問題?
2.複雜的安全性檢查,禁止在非工做時間插入新員工信息?
非工做時間:
(1)週末
(2)上班前9.30,下班後6.30
3.數據確認,員工漲工資不能漲長越少?
*** 觸發器總結:
觸發器應用:
1.數據確認.
2.實施複雜的安全性檢查.
3.作審計,跟蹤表上所作的數據操做等.
Oracle數據庫已經作了審計功能.
4.數據的備份和同步.
查詢觸發器、過程以及函數:
SELECT * FROM USER_TRIGGERS;
SELECT * FROM USER_SOURCE;
存儲過程PROCEDURE和存儲函數FUNCTION:
是指在數據庫中供全部用戶程序調用的子程序
叫存儲過程、存儲函數.
存儲過程PROCEDURE和存儲函數FUNCTION的最大區別:
存儲函數能夠經過RETURN返回結果.
建立存儲過程:
CREATE [OR REPLACE] PROCEDURE 存儲過程名稱(形參列表)
AS
DECLARE
-- 聲明變量.
BEGIN
-- 執行語句.
EXCEPTION
-- 例外處理語句.
END;
/
*** Oracle存儲過程形式參數的定義
格式:形參名稱 IN|OUT|INOUT 數據類型
調用存儲過程:
1.EXECUTE/EXEC 存儲過程名稱;
2.在PLSQL中調用存儲過程:
DECLARE
BEGIN
存儲過程名稱(實參列表);
END;
/
練習:
1.給指定的員工漲指定額外的工資?
存儲函數FUNCTION:
函數(FUNCTION)是一個命名的存儲程序,能夠帶參數,
並返回一個值,函數和過程的結構相似,可是必須有一
個RETURN子句,用於返回函數值.函數說明要指定函數
名稱,結果值的類型,以及參數類型等.
Oracle建立存儲函數:
CREATE [OR REPLACE] FUNCTION 函數名(形參列表)
RETURN 返回函數值的數據類型
AS
DECLARE
-- 聲明變量.
BEGIN
-- 邏輯處理語句.
EXCEPTION
-- 異常處理語句.
END;
/
調用存儲函數FUNCTION:
1.SELECT 函數名(實參列表) FROM DUAL;
2.PLSQL調用函數.
*** 何時使用存儲過程,何時使用存儲函數?
原則:若是隻有一個返回值,使用存儲函數,不然
使用存儲過程.
*** 存儲過程和存儲函數中的形參類型IN和OUT:
通常來講,存儲過程和函數的區別就是在於函數
能夠有一個返回值,而存儲過程沒有.
可是存儲過程和函數均可以經過OUT制定一個或
多個輸出參數.咱們能夠利用OUT參數,在存儲過
程和函數中實現返回多個值.
練習:
1.查詢某個員工的姓名、月薪、職位?
數據字典DICTIONARY:
Oracle中的二維表:
1.基本表
描述數據庫信息,只能由數據庫
服務器進行修改.
2.用戶表
用戶自定義表.
Oracle數據字典總表:DICTIONARY.
數據字典命名規則:
前綴 說明
USER 用戶本身的.
ALL 用戶能夠訪問到的.
DBA 管理員視圖.
V$ 性能相關的數據,動態性能視圖.
USER_OBJECTS:
經過查詢USER_OBJECTS能夠肯定當前用戶建立的全部對象.
能夠獲取一下信息:
DATE CREATED -- 建立時間
DATE OF LAST MODIFICATION 最後一次修改時間.
STATUS(狀態:VALID(有效) 、 INVALID(無效))
ALL_OBJECTS:
能夠經過查詢ALL_OBJECTS來肯定當前用戶能訪問
的數據庫對象.
數據庫管理:
利用DBCA(Database Configuration Assistant)建立Oracle數據庫:
在安裝Oracle的時候能夠選擇安裝ORCL數據庫,
可是在真實的環境中,不要使用DBCA安裝ORCL數據庫.
Oracle安裝文件下有Database Configuration Assistant插件.
Database Configuration Assistant功能:
建立數據庫
配置數據庫選項
刪除數據庫
管理模板
配置自動存儲管理:ASM (Automatic Store Manage)
DBA:Database Administrator 數據庫管理員
(DBA職責) 數據庫管理任務:
1.評測數據庫服務器硬件.
2.安裝Oracle數據庫軟件.
3.規劃數據庫.
4.建立並打開數據庫.
5.數據庫備份.
6.註冊用戶.
7.實現數據庫計劃.
8.全庫備份、增量備份.
9.調整數據庫性能.
Database Configuration Assistant建立數據庫步驟:
1.從如下列表中選擇模板來建立數據庫
2.填寫數據庫全名稱和SID
3.使用Web版數據庫管理工具.
4.設置密碼.
Oracle初始化參數存儲於SPFILE邏輯文件.
Oracle閃回FLASHBACK:
閃回解決的問題:
1.錯誤的刪除了數據,而且COMMIT.
2.錯誤的刪除了表 DROP TABLE.
3.如何獲取表上的歷史記錄.
4.如何撤銷一個已經提交的事務.
閃回的類型:
1.閃回表(FLASHBACK TABLE):
將表回退到過去的一個時間上.
2.閃回刪除(FLASHBACK DROP):
操做Oracle的回收站.
3.閃回版本查詢(FLASHBACK VERSION QUERY):
表上的歷史記錄.
4.閃回事務查詢(FLASHBACK TRANSACTION QUERY):
獲取一個操做UNDO_SQL,而後經過UNDO_SQL來撤銷事務.
5.閃回數據庫:
將數據庫回退到過去的一個時間上.
6.閃迴歸檔日誌:
閃回操做最初出如今Oracle 9i中,最初只有第一種類型,
在10g版本中才增長後幾個版本.
閃回的好處:
1.恢復中,閃回技術是革命性的進步.
2.傳統的恢復技術緩慢.
它是整個數據庫或者一個文件的恢復,不僅是恢復損壞的數據.
在數據庫日誌中每一個修改都必須被檢查.
3.閃回的速度快.
經過行和事務把改變編入索引.
僅僅改變的數據會被恢復.
4.閃回的命令很容易.
沒有複雜棘手的多步程序.
閃回表(Flashback Table):
閃回表,其實是將表中的數據快速恢復到過去的一個焦點或者系統改變號SCN上,
實現表的閃回,須要設計到與撤銷表空間相關的UNDO信息,經過SHOW PARAMETER UNDO
命令能夠了解這些信息.
用戶對錶數據的修改操做,都記錄在撤銷表空間中,這爲表的閃回提供了數據恢復
的基礎,例如:某個修改操做在提交後被記錄在撤銷表空間中,保留時間爲900秒,
用戶能夠在這900秒的時間內對錶進行閃回操做,從而將表中的數據恢復到修改
以前的狀態.
執行表的閃回,須要有Flashback Any Table 權限.
*** 使用系統管理員查看UNDO信息,
ALTER SYSTEM SET UNDO_RETENTION=1200 SCOPE=BOTH;
SCOPE : MEMORY|SPFILE|BOTH
-- 修改撤銷表空間的時間.
*** 系統改變號SCN -- 和Oracle系統時間相對應.
SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss:mm') 時間,
TIMESTAMP_TO_SON(SYSDATE) SCN
FROM DUAL;
*** 開啓表的行移動功能:ALTER TABLE 表名 ENABLE ROW MOVEMENT;
閃回表(Flashback Table)語法格式:
FLASHBACK TABLE [schema.]表名
TO
[BEFORE DROP [RENAME TO 表名]]
BEFORE DROP ->表示恢復到刪除以前,
RENAME TO 表名 ->表示更換表名.
或[SCN 值]
表示將表閃回到這個系統改變號對應的時間點上.
或[TIMESTAMP 值]
表示將表閃回到這個時間點上.
[[ENABLE|DISABLE] TRIGGER]
ENABLE TRIGGER表示觸發器恢復之後爲enable狀態,
默認則爲disable狀態.
問題:
如何獲取離該操做最近的一段時間或SCN?
閃回表注意的問題:
1.系統表不能被閃回.
2.不能跨越DDL操做.
3.會被寫入警告日誌.
4.產生撤銷和重作的數據.
閃回刪除(Flashback Drop):
查看回收站:SHOW RECYCLEBIN;
清空回收站:PURGE RECYCLEBIN;
查看回收站中的表信息:
*** 使用RECYCLEBIN NAME 值做爲表使用.
SELECT * FROM "RECYCLEBIN NAME";
*** 回收站只對表使用.
*** 管理員沒有回收站.
執行閃回刪除:
FLASHBACK TABLE 原表名|"RECYCLEBIN NAME"
TO BEFORE DROP [RENAME TO 新表名];
當回收站中有重複的表時?
經過表名將表從回收站還原,回收站默認還原
最新刪除的表.
*** 當第二張同名表要還原的時候,須要從新命名錶名.
閃回表和閃回刪除小結:
1.閃回表:
SHOW PARAMETERS UNDO ---> 900秒
SCN 系統改變號.
執行閃回表:
行移動.
系統表不能閃回(數據字典)
不能跨越DDL操做.
如何獲取離該操做最近的一個時間.
2.閃回刪除:
Oracle回收站.
管理員沒有回收站.
執行閃回刪除.
經過表名或"RECYCLEBIN NAME" 閃回.
閃回同名的表.
閃回版本查詢(FLASHBACK VERSION QUERY):
閃回版本查詢,提供了一個審計行改變的查詢
功能,經過它能夠查找到全部已經提交了的行記錄。
Flashback Version Query語法格式:
SELECT
字段列表
[,VERSIONS_OPERATOR,
VERSIONS_STARTTIME,
VERSIONS_ENDTIME,
VERSIONS_XID -- 事務號
]
FROM 表名
VERSION BETWEEN
[SCN|TIMESTAMP]
[express|MINVALUE]
AND
[express|MAXVALUE]
AS OF -- AS OF:表示恢復單個版本
[SCN|TIMESTAMP]
express;
-- BETWEEN ... AND ... :表示時間段.
FVQ->解決如何獲取最近操做的時間或SCN?
閃回事務查詢(Flashback Transaction Query):
閃回事務查詢其實是閃回版本查詢的一個擴充,
經過它能夠審計某個事務甚至撤銷一個已經提交的事務.
實現閃回事務查詢,須要先了解FLASH_TRANSACTION_QUERY視圖,從該視圖中能夠獲取事務的歷史
操做記錄,以及撤銷語句(UNDO_SQL).
使用閃回事務查詢,能夠了解某個錶的歷史操做記錄對應的一個撤銷
SQL語句,若是想要撤銷這個操做,就能夠執行這個SQL語句.
Oracle的導入(import)導出(export):
*** 輕量級的備份和還原.
*** RMAN(Recovery Manager) 數據的備份.
export導出:
exp -help; 能夠查看導出的數據文檔.
exp導出的三種方式:
1.表方式:將指定表的數據導出.
exp scott/tiger@localhost:1521/orcl
file=d:/temp/a.dmp
log=d:/temp a.log
tables=emp,dept
2.用戶方式:將指定用戶的全部對象以及數據導出.
exp scott/tiger@localhost:1521/orcl
file=d:/temp/a.dmp
log=d:/temp a.log
3.全庫方式:將數據庫中的全部對象導入導出(管理員權限).
exp system/password@localhost:1521/orcl
file=d:/temp/a.dmp
log=d:/temp a.log
full=y
imp導入的三種方式:
1.表方式:將指定表的數據導入.
imp hr/hr@localhost:1521/orcl
file=d:/temp/a.dmp
log=d:/temp impa.log
tables=emp,dept
fromuser=scott touser=hr
commit=y
ignore=y
2.將指定用戶的全部對象以及數據導入.
imp hr/hr@localhost:1521/orcl
file=d:/temp/a.dmp
log=d:/temp/ia.dmp
fromuser=scott touser=hr
commit=y
ignore=y
3.全庫方式:將數據庫中的全部對象導入(管理員權限).
imp system/password@1521/orcl
file=d:/temp/a.dmp
log=d:/temp/ia.dmp
full=y
commit=y
destory=y
管理方案(schema):
EM管理器的使用.
什麼是方案?
11gOracle登陸(enterprise manager)EM:
路徑:
https://localhost:1158/em/
登陸須要權限:SELECT_CATALOG_ROLE
*** 命令行切換用戶:
CONN 用戶名/密碼 [AS SYSDBA(管理員)]
用戶管理安全:
用戶user:
1.建立一個用戶:
CREATE USER 用戶名 [PROFILE DEFAULT]
IDENTIFIED BY 密碼 [ACCOUNT UNLOCK]
GRANT CONNECT TO 用戶名;
2.刪除用戶:
DROP USER 用戶名 [CASCADE(級聯)];
一個Oracle用戶具有:
(1)一個惟一的用戶名.
(2)一個驗證方法.
(3)一個默認表空間.
(4)一個臨時表空間.
(5)一個用戶概要文件.
(6)一個消費羣.
(7)一個鎖狀態.
(8)每一個表空間的配額.
(9)權限和角色.
角色role:
建立角色:
CREATE ROLE 角色名稱;
賦予角色權限:
GRANT ... TO 角色名稱;
權限privilege:
用戶權限分類:
(1)系統權限system:
(2)對象權限object:
概要文件profile:
Oracle用戶的認證方式:
1.password密碼認證.
2.External外部認證(或主機認證),當前用戶必須是管理員administrator.
外部認證方式優先於密碼認證方式.
sqlplus / [as sysdba];
3.global全局認證方式(例如:生物認證方式(指紋,眼膜),token認證方式):
*** windows系統打開本地用戶和組:lusrmgr.msc
*** Oracle預約義用戶:
SYS(數據庫擁有者):
擁有DBA權限.
擁有ADMIN OPTION的全部權限.
擁有startup,shutdown,以及若干維護ml.
擁有數據字典.
SYSTEM用戶:
擁有DBA權限.
*** 這些用戶並不是用於常規操做.
*** 用戶解鎖:ALTER USER 用戶名 ACCOUNT UNLOCK;
*** 用戶修改密碼:ALTER USER 用戶名 IDENTIFIED BY 新密碼;
*** 使用ADMIN OPTION 撤銷系統權限(system privilege):
GRANT CREATE TABLE TO 用戶名 WITH ADMIN OPTION;
REVOKE CREATE TABLE TO 用戶名;-- 不會產生級聯撤銷.
*** 使用grant option 撤銷對象權限:
撤銷時會產生級聯效果.
*** 用戶建立表條件:
(1)有CREATE TABLE權限.
(2)有表空間.
給用戶分配表空間:
ALTER USER 用戶名 QUOTA UNLIMITED ON USERS;
*** 經常使用於建立一個普通用戶語句:
CREATE USER 用戶名 [PROFILE DEFAULT]
IDENTIFIED BY 密碼 [ACCOUNT UNLOCK];
GRANT CONNECT,RESOURCE TO 用戶名;
概要文件profile:
1.指定密碼規則.
2.控制資源消費.
Oracle分佈式數據庫:
數據在物理上被存放在多個節點上,可是邏輯上是一個總體.
分佈式數據庫的獨立性:
分佈式數據的獨立性是指用戶不關心數據是如何分割和
存儲,只需它關心須要什麼數據.
數據庫鏈路:DBLINK
數據庫鏈路是單向的.
跨節點的數據建立及查詢.
跨節點的數據更新.
定義數據庫鏈路:
CREATE DATABASE LINK 所須要鏈接數據庫的真實名稱SID
CONNECT TO 所須要鏈接數據庫的用戶名
INDENTIFIED BY 所須要鏈接數據庫的密碼
USING [所須要鏈接數據庫的服務命名];
*** Oracle數據庫程序安裝包下:
啓動Oracle Net Manager 建立服務命名.
*** 建立數據庫鏈路須要:CREATE DATABASE 權限.
分佈式數據庫的查詢:
SELECT ENAME,DNAME
FROM DEPT,EMP@所須要鏈接數據庫的真實名稱SID
WHERE EMP.DEPTNO=DEPT.DEPTNO;
使用同義詞給遠端的數據庫建立別名:
CREATE SYNONYM 同義詞名稱 FOR EMP@所須要鏈接數據庫的真實名稱SID;
分佈式數據庫的插入:
INSERT INTO EMP SELECT * FROM EMP@SID;
數據的複製:
CREATE TABLE EMP AS SELECT * FROM EMP@SID;
分佈式數據庫跨節點更新:
快照:
定義快照維護關係表的異步副本,
指在主表修改後的指定時間內刷新副本,
用於主表修改少,但查詢頻繁的表.
CREATE SNAPSHOT 表名
REFRESH START WITH SYSDATE
NEXT NEXT_DAY(SYSDATE,'MONDAY')
AS SELECT * FROM EMP@SID;
觸發器:
利用觸發器實現數據的同步.
CREATE [OR REPLACE] TRIGGER 觸發器名稱 BEFORE|AFTER INSERT|UPDATE|DELETE [OF 字段列表] ON 表名 [FOR EACH ROW [WHEN(條件)]] DECLARE -- 聲明變量. BEGIN -- 實現邏輯語句. EXCEPTION -- 例外處理語句. END; /