1.1. 事物的控制控制事務(wù) 銀行轉(zhuǎn)賬 李四給張三匯款 ACID A:原子性:整個(gè)事務(wù)中所有的步驟是不可分割的,,原子性原則規(guī)定一個(gè)事務(wù)的各個(gè)步驟都必須完成,,否則整個(gè)事務(wù)都不會(huì)完成。即保證一個(gè)事務(wù)中所有的操作都能完成或者都不能完成,,如果事務(wù)在完成之前出現(xiàn)任何錯(cuò)誤,那么數(shù)據(jù)庫(kù)自身必須保證自動(dòng)回滾所做過(guò)的任何事務(wù)部分(并且必須自動(dòng)進(jìn)行) C:一致性:無(wú)論是事務(wù)前,,事務(wù)中,,事務(wù)后,數(shù)據(jù)始終處于一致的狀態(tài),。例如李四給張三匯款10000,,那么就需要從李四賬戶減去10000,給張三的賬戶增加10000,。Oracle使用撤銷段來(lái)保證數(shù)據(jù)的一致性,。
I:隔離性:隔離性的原則規(guī)定,未完成的事務(wù)必須不可視,。在某個(gè)事務(wù)進(jìn)行期間,,只有執(zhí)行該事務(wù)的會(huì)話能看見所做的變化,而其他所有的會(huì)話看見的都是沒有變化的數(shù)據(jù)(而不是更改后的新值),。這個(gè)規(guī)定的邏輯含義是:首先,,由于整個(gè)事務(wù)可能沒有全部完成,因此不允許其他用戶看到可能回滾的變化,;其次,,在某個(gè)事務(wù)進(jìn)行期間,數(shù)據(jù)是不連貫的,,李四的賬戶減掉10000,,但張三的賬戶還沒有增加10000,。事務(wù)的隔離性要求數(shù)據(jù)庫(kù)必須對(duì)其他用戶隱藏正在進(jìn)行的事務(wù),這些用戶只能看到?jīng)]有被更新的數(shù)據(jù),,只有在事務(wù)完成時(shí),,他們才能看到所有變化。Oracle使用撤銷段來(lái)保證事務(wù)的隔離性,。 創(chuàng)建練習(xí)環(huán)境:創(chuàng)建一個(gè)aa表,,插入3條記錄,并提交事物,。
查看aa表的記錄,,插入一條記錄,當(dāng)我們執(zhí)行一條DML語(yǔ)句時(shí)候,,就自動(dòng)開始了一個(gè)事物
此時(shí)insert記錄的事務(wù)并沒有提交,,沒有提交事務(wù)就沒有真正的完成,此時(shí)還有rollback的機(jī)會(huì),。 Scott用戶在當(dāng)前會(huì)話中查看aa表時(shí)可以看到被插入的記錄
打開一個(gè)新的sqlplus會(huì)話,,查看aa表時(shí)會(huì)發(fā)現(xiàn)并沒有新插入的記錄:這是事物的隔離性
在第一個(gè)sqlplus會(huì)話中提交事物
提交之后才能在第二個(gè)會(huì)話中看到被插入的第四條記錄
D:持久性:一旦使用commit命令來(lái)結(jié)束某個(gè)事務(wù),那么就必須保證數(shù)據(jù)庫(kù)不丟失這個(gè)事務(wù),。在事務(wù)進(jìn)行期間,,隔離性的原則要求除了指定會(huì)話涉及的用戶之外的任何用戶都不能查看當(dāng)前所做的變化。不過(guò)事務(wù)一旦完成,,所有用戶都必須能夠立即看到所做的變化,,同時(shí)數(shù)據(jù)庫(kù)必須保證這些變化絕不會(huì)丟失。Oracle通過(guò)使用日志文件來(lái)滿足這個(gè)需求,。日志文件具有兩種形式:聯(lián)機(jī)重做日志文件,,歸檔重做日志文件。 一個(gè)正確配置的oracle數(shù)據(jù)庫(kù)是不可能丟失數(shù)據(jù)的,。當(dāng)然用戶的錯(cuò)誤(包括不恰當(dāng)?shù)?/span>DML或刪除對(duì)象)也會(huì)造成數(shù)據(jù)的丟失 DDL語(yǔ)句有自動(dòng)提交功能(create,、drop、truncate,、alter)
創(chuàng)建表AA,,插入一條記錄 (第一個(gè)sqlplus會(huì)話中操作)
回退事物
在表中插入一條記錄
在sqlplus中正常退出
在另外一個(gè)sqlplus中查看aa表中的記錄,會(huì)發(fā)現(xiàn)新插入的tom1的記錄了,。如果使用sqlplus工具更改了數(shù)據(jù)之后,,正常退出sqlplus時(shí),oracle會(huì)自動(dòng)提交事物,。
目前aa表中只有tom1的記錄,,另外一個(gè)sqlplus會(huì)話進(jìn)程中。
模擬實(shí)例重啟
使用scott用戶連接,,查看aa表中的內(nèi)容,,發(fā)現(xiàn)insert tom2的記錄由于實(shí)例重啟自動(dòng)被回滾了,。
使用autocommit實(shí)現(xiàn)事物的自動(dòng)提交
即使執(zhí)行回滾,查詢結(jié)果仍然包含新插入的數(shù)據(jù),,關(guān)閉自動(dòng)提交時(shí)可以使用set autocommit off
關(guān)于事物的總結(jié): 1. 需要注意的是,,Commit:只是用來(lái)確認(rèn)這個(gè)數(shù)據(jù)已經(jīng)正式的修改了,不一定非得寫入硬盤,,DBWn什么都不做,。執(zhí)行commit命令時(shí)發(fā)生的所有物理操作時(shí)LGWR進(jìn)程將日志緩沖區(qū)的內(nèi)容寫入磁盤。DBWN進(jìn)程完全沒有執(zhí)行任何操作,。DBWN進(jìn)程與提交事物處理沒有關(guān)系,,不過(guò)最終DBWN進(jìn)程會(huì)將變化的數(shù)據(jù)塊寫入磁盤。 2. commit和rollback語(yǔ)句只應(yīng)于DML語(yǔ)句,,我們無(wú)法回滾DDL語(yǔ)句,。DDL語(yǔ)句一旦被執(zhí)行就會(huì)立即具有持久狀態(tài)。 3.自動(dòng)提交和隱式提交:oracle在某些情況下可以進(jìn)行自動(dòng)提交:執(zhí)行DDL語(yǔ)句是一種情況,,退出某個(gè)用戶進(jìn)程也是一種自動(dòng)提交,。 1.2. 索引索引是oracle提供的一個(gè)對(duì)象,提供了一種快速訪問(wèn)數(shù)據(jù)的途徑,,提高了數(shù)據(jù)庫(kù)的檢索性能,。索引使數(shù)據(jù)庫(kù)程序無(wú)需對(duì)整個(gè)表進(jìn)行全表掃描,就可以在其中找到所需要的數(shù)據(jù),,就想書的目錄,,可以通過(guò)他快速查找所需信息,無(wú)需閱讀整本書,。 ora 2.通過(guò)ROWID 3.使用索引 索引的分類: 1,B樹索引結(jié)構(gòu) 索引的頂部為根,,其中包含指向下一級(jí)索引的項(xiàng),。下一級(jí)為分支塊,分支塊又指向索引中下一級(jí)的塊,,最低一級(jí)的塊稱為葉節(jié)點(diǎn),,其中包含指向表數(shù)據(jù)行的索引項(xiàng)。葉節(jié)點(diǎn)為雙向連接,,有助于按關(guān)鍵字值得升序和降序掃描索引,。 1.2.1. 創(chuàng)建普通索引創(chuàng)建普通索引的語(yǔ)法 create [unique] index 索引名稱 on 表名(列名)[tablespace 表空間名稱] [unique]用于指定唯一索引,默認(rèn)情況下為非唯一索引 [tablespace]為索引指定表空間 練習(xí)環(huán)境
在雇員EMP表中,,在雇員名稱列創(chuàng)建B樹索引,,oracle創(chuàng)建的普通索引如果沒有說(shuō)明類型就是B樹索引
查看剛剛創(chuàng)將的索引 EMP_NAME_IDX
1.2.2. 創(chuàng)建唯一索引和非唯一索引唯一索引:保證定義索引的列中沒有任何重復(fù)值,唯一索引的索引關(guān)鍵字只能指向表中的一行,。 非唯一索引:定義索引的列中可以有重復(fù)值 在薪水級(jí)別salgrade表中,,為級(jí)別編號(hào)(grade)列創(chuàng)建唯一索引
1.2.3. 反向鍵索引與常規(guī)B樹索引相反,,反向鍵索引在保持順序的同時(shí),反轉(zhuǎn)索引列的字節(jié),。反向鍵索引通過(guò)反轉(zhuǎn)索引鍵的數(shù)據(jù)值,,使得索引的修改平均分布到整個(gè)索引樹上,主要應(yīng)用多個(gè)實(shí)例可同時(shí)訪問(wèn)同一個(gè)數(shù)據(jù)庫(kù)的場(chǎng)景中,。使用反向鍵索引將索引插入操作分散在多個(gè)索引塊鍵,,如果使用B數(shù)索引的情況下,由于索引關(guān)鍵字在索引樹中的位置相近而處于同一個(gè)索引塊中,,多個(gè)實(shí)例同時(shí)更新時(shí)會(huì)發(fā)生沖突,,從而導(dǎo)致I/O訪問(wèn)上的瓶頸。 語(yǔ)法如下: CREATE index 索引名稱 on 表名(列名) REVERSE;
1.2.4. 位圖索引位圖索引適用于低基數(shù)的列,,即該列的值是有限的幾個(gè),,例如雇員表中的工種(job)列,即便是幾百萬(wàn)條雇員記錄,,工種也是有限的,。JOB列可以作為位圖索引 位圖索引的優(yōu)點(diǎn): 相對(duì)B樹索引而言,基于位圖索引列的查詢可以減少響應(yīng)時(shí)間 相比其他索引技術(shù),,位圖索引占用空間有所減少 位圖索引不應(yīng)當(dāng)在頻繁發(fā)生INSERT,,update,delete操作的表上使用,這是因?yàn)閱蝹€(gè)位圖索引項(xiàng)指向表的很多數(shù)據(jù)行,,當(dāng)修改索引項(xiàng)時(shí)需要將其指向的數(shù)據(jù)行全部鎖定,,這會(huì)嚴(yán)重降低數(shù)據(jù)庫(kù)的并發(fā)處理能力。位圖索引適用于數(shù)據(jù)倉(cāng)庫(kù)和決策支持系統(tǒng)中. 在雇員表(emp)表中,,為工種(job)列創(chuàng)建位圖索引
在雇員表(emp)中,,為雇員名稱(ename)列創(chuàng)建大寫函數(shù)索引 基于函數(shù)的索引
查看索引列相關(guān)的信息:索引名,表名,,索引列
1.3. 維護(hù)索引重建索引: 索引需要維護(hù),,如果建立了索引的表中有大量的刪除和插入操作,會(huì)使得索引很大,,因?yàn)閯h除操作后,,刪除值得索引空間不能被自動(dòng)重新使用。對(duì)于大表和DML操作頻繁的表,,索引的維護(hù)是很重要的,。ORACLE提供了REBUILD指令來(lái)重建索引,使索引空間可以重用刪除值所占用的空間,,使索引更加進(jìn)奏,。
在重建索引時(shí),也可以修改索引的表空間
合并索引碎片 合并索引碎片可以釋放部分磁盤空間,,是索引維護(hù)的一種重要方式,,也是維護(hù)磁盤空間的方式
刪除索引 DROP INDEX語(yǔ)句刪除索引 刪除雇員表中的INDEX_BIT_JOB位圖索引
1.4. 視圖視圖是一個(gè)虛表,,不占用物理空間,因?yàn)橐晥D本身的定義語(yǔ)句存儲(chǔ)在數(shù)據(jù)字典里,。視圖中的數(shù)據(jù)是從一個(gè)或多個(gè)實(shí)際的表中獲得,。 物化視圖:也成實(shí)體化視圖,含有實(shí)際數(shù)據(jù),,占用存儲(chǔ)空間,,在數(shù)據(jù)倉(cāng)庫(kù)中經(jīng)常應(yīng)用物化視圖 創(chuàng)建視圖的語(yǔ)法 CREATE [OR REPLACE] [FORCE |NO FORCE] VIEW view_name [(alias [,alias]..)] as select_statement [WITH CHECK_OPTION [CONSTRAINT constraint]] [WITH READ ONLY]; 在語(yǔ)法中 OR REPLACE:如果視圖已經(jīng)存在,此選項(xiàng)將重新創(chuàng)建該視圖,。 FORC:如果使用此關(guān)鍵字,,則無(wú)論基表是否存在,都將創(chuàng)建視圖 NO FORCE:這是默認(rèn)值,,如果使用此關(guān)鍵字,,則僅當(dāng)基表存在時(shí)才創(chuàng)建視圖 VIEW_NAME:要?jiǎng)?chuàng)建的視圖名 ALIAS:指定由視圖的查詢所選擇的的表達(dá)式或列的別名。別名的數(shù)目必須與視圖所選擇的的表達(dá)式的數(shù)據(jù)相匹配,。 select_statement:SELECT 語(yǔ)句 WITH CHECK_OPTION:此選項(xiàng)指定只能插入或更新視圖可以訪問(wèn)的行,,constraint標(biāo)識(shí)CHECK OPTION約束指定的名稱 WITH READ ONLY:此選項(xiàng)保證不能再視圖上執(zhí)行任何修改操作。 創(chuàng)建帶有錯(cuò)誤的視圖 如果在CREATE VIEW語(yǔ)法中使用FORCE選項(xiàng),,即使存在以下情況,,也會(huì)創(chuàng)建視圖 視圖定義的查詢引用了一個(gè)不存在的表 視圖定義的查詢引用了現(xiàn)有表中無(wú)效的列。 視圖的所有者沒有所需的權(quán)限,。 在這些情況下,,oracle僅檢查CREATE VIEW語(yǔ)句中語(yǔ)法錯(cuò)誤,如果語(yǔ)法正確,,將會(huì)創(chuàng)建視圖,,并將視圖的定義存儲(chǔ)在數(shù)據(jù)字典中,但是該視圖卻不能使用,。這種視圖被認(rèn)為是帶有錯(cuò)誤創(chuàng)建的,。可以用SHOW ERRORS VIEW視圖名來(lái)查看錯(cuò)誤 1.4.1. 對(duì)單表的視圖操作SQL> create table order_master (orderno number(5) CONSTRAINT p_ord PRIMARY KEY, 2 odate DATE,vencode number(5), 3 o_status char(1));
插入數(shù)據(jù) SQL> insert into order_master values (1,to_date('2010-01-01','yyyy-mm-dd'),1,'a'); SQL> insert into order_master values (2,to_date('2011-01-01','yyyy-mm-dd'),2,'p');
創(chuàng)建訂單狀態(tài)為"p"的視圖,,提示沒有創(chuàng)建視圖的權(quán)限
授予SCOTT用戶創(chuàng)建視圖的權(quán)限
創(chuàng)建視圖 SQL> create view pen_view as select * from order_master where o_status = 'p';
查詢視圖
通過(guò)視圖修改數(shù)據(jù),將狀態(tài)為“p”的訂單修改為“d” SQL> update pen_view SET o_status='d' where o_status='p';
如果修改成功,,在查詢視圖將查詢不出任何記錄,,因?yàn)樾薷牧藙?chuàng)建視圖是作為條件的列
為了避免修改視圖后查詢不到記錄的現(xiàn)象,使用with check option語(yǔ)句創(chuàng)建檢查約束以防止上述情況的發(fā)生,,同時(shí)可以使用CONSTRAINT指定約束名稱 SQL> create or replace view pen_view as select * from order_master where o_status='p' 2 with check option constraint penv;
為order_master插入記錄 SQL> insert into order_master values (3,to_date('2011-01-01','yyyy-mm-dd'),3,'p');
更新視圖 SQL> update pen_view set o_status='d' where o_status='p';
提示with check option違反where子句 1.4.2. 創(chuàng)建只讀視圖SQL> create or replace view pen_view as select * from order_master with read only;
查看視圖
為視圖插入記錄
1.4.3. 創(chuàng)建帶有錯(cuò)誤的視圖
因?yàn)椴淮嬖?/span>venmast表 創(chuàng)建表venmast SQL> create table venmast (id int); 手動(dòng)編譯剛才創(chuàng)建的錯(cuò)誤視圖
查看視圖
1.4.4. 創(chuàng)建帶ORDER BY子句的視圖SQL> create or replace view pen_view as select * from order_master order by orderno;
1.5. 復(fù)雜視圖DML語(yǔ)句是指用于修改數(shù)據(jù)的INSERT,,DELETE,UPDATE語(yǔ)句,。因?yàn)橐晥D是一個(gè)虛表,,所以這些語(yǔ)句也可以與視圖一同使用,。一般情況下不通過(guò)視圖修改數(shù)據(jù),而是直接修改基本表,,因?yàn)檫@樣調(diào)理更清晰,。在視圖上使用DML語(yǔ)句有如下限制:(相對(duì)于表) DML語(yǔ)句只能修改視圖中的一個(gè)基表 如果對(duì)記錄的修改違反了基表的約束條件,則將無(wú)法更新視圖 如果創(chuàng)建的視圖包含連接運(yùn)算符,,DISTINCT運(yùn)算符,,集合運(yùn)算符,聚合函數(shù)和group BY子句,,則將無(wú)法更新視圖,。 如果創(chuàng)建的視圖包含偽列或表達(dá)式,則將無(wú)法更新視圖,。 簡(jiǎn)單視圖基于單個(gè)基表,,不包括函數(shù)和分組函數(shù),那么可以在此視圖中進(jìn)行INSERT,,UPDATE,DELETE操作,。這些操作實(shí)際上是在基表中插入、更新和刪除行,。 復(fù)雜視圖從多個(gè)提取數(shù)據(jù),,包括函數(shù)和分組函數(shù),復(fù)雜視圖不一定能進(jìn)行DML操作,。 刪除視圖可以使用
1.6. 物化視圖物化視圖是和普通視圖相對(duì)應(yīng)的,,在oracle使用普通視圖時(shí),它會(huì)重復(fù)執(zhí)行創(chuàng)建視圖的所有sql語(yǔ)句,,如果這樣的SQL語(yǔ)句含有多張表的連接或者ORDER BY子句,,而且表的數(shù)據(jù)量很大,則會(huì)非常耗時(shí),,效率非常低下,。為了解決這個(gè)問(wèn)題,oracle提出了物化視圖的概念 物化視圖就是具有物理存儲(chǔ)的特殊視圖,,占用物理空間,,就象表一樣,物化視圖是基于表,,物化視圖等創(chuàng)建的,。它需要和源表進(jìn)行同步,不斷的刷新物化視圖中的數(shù)據(jù),。物化視圖有兩個(gè)重要概念:查詢重寫和物化視圖的同步 查詢重寫: 對(duì)SQL語(yǔ)句進(jìn)行重寫,。當(dāng)用戶使用SQL語(yǔ)句對(duì)基表進(jìn)行查詢時(shí),如果已經(jīng)建立了基于這些基表的物化視圖,oracle將自動(dòng)計(jì)算和使用物化視圖來(lái)完成查詢,,在某些情況下可以節(jié)約查詢時(shí)間,,減少系統(tǒng)I/O。這種查詢優(yōu)化技術(shù)成為查詢重寫,。參數(shù)QUERY_REWRITE_ENABLED決定是否使用重寫查詢,。在創(chuàng)建物化視圖時(shí)需要使用ENABLE QUERY REWRITE來(lái)啟動(dòng)查詢重寫功能 可通過(guò)SHOW命令查看該參數(shù)的值
物化視圖的同步: 物化視圖是基于表創(chuàng)建的,所以當(dāng)基表發(fā)生變化時(shí),,需要同步數(shù)據(jù)以更新物化視圖中的數(shù)據(jù),,這樣保持無(wú)話視圖中的數(shù)據(jù)和基表的數(shù)據(jù)的一致性。oracle提供了兩種物化視圖刷新方式 ON COMMIT:指物化視圖在對(duì)基表的DML操作事物提交的通行進(jìn)行刷新 ON DEMAND:指物化視圖在用戶需要的時(shí)候進(jìn)行刷新,,可以手工通過(guò)DBMS_IVIEW.refresh等方法來(lái)進(jìn)行刷新,,也可以通過(guò)JOB定時(shí)刷新 選擇刷新方式后,還需要選擇一種刷新類型,,刷新類型值刷新時(shí)基表與物化視圖如何實(shí)現(xiàn)數(shù)據(jù)同步,,oracle提供了一下4種刷新類型: COMPLETE:對(duì)整個(gè)物化視圖進(jìn)行完全刷新。 FAST:采用增量刷新,,只刷新自上次刷新以后進(jìn)行的修改 FORCE:oracle在刷新會(huì)判斷是否可以進(jìn)行快速刷新,,如果可以則采用FAST刷新方式,否則使用COMPLETE方式,。 NEVER:物化視圖不進(jìn)行任何刷新 1.6.1. 創(chuàng)建物化視圖創(chuàng)建物化視圖的前提條件: 具備創(chuàng)建物化視圖的權(quán)限,,QUERY REWRITE的權(quán)限,以及對(duì)創(chuàng)建物化視圖所涉及的表的訪問(wèn)權(quán)限和創(chuàng)建表的權(quán)限 使用SCOTT用戶來(lái)舉例說(shuō)明 1.授予相應(yīng)的權(quán)限 SQL> show user; USER is "SYS" SQL> grant create materialized view to scott; SQL> grant query rewrite to scott; SQL> grant create any table to scott; SQL> grant select any table to scott; 2.創(chuàng)建物化視圖日志 物化視圖日志是用戶選擇了FAST刷新類型時(shí)需要使用的,,以增量同步基表的變化,。 對(duì)SCOTT用戶的EMP表和DEPT表創(chuàng)建物化視圖,所以對(duì)這兩個(gè)基表創(chuàng)建物化視圖日志 SQL> create materialized view log on dept with rowid;
SQL> create materialized view log on emp with rowid;
創(chuàng)建物化視圖 通過(guò)CREATE MATERIALIEZED VIEW語(yǔ)句來(lái)創(chuàng)建物化視圖,, SQL> create materialized view mtrlview_test 2 build immediate 3 refresh fast 4 on commit 5 enable query rewrite as 6 select d.dname,d.loc,e.ename,e.job,e.mgr,e.hiredate,e.sal,d.rowid d_rowid,e.rowid e_rowid 7 from dept d,emp e where d.deptno=e.deptno;
其中: BUILD IMMEDIATE:該參數(shù)的意思是立即創(chuàng)建物化視圖;也可以選擇BUILD DEFFERED,該參數(shù)說(shuō)明在物化視圖定義以后不會(huì)立即執(zhí)行,,而是延遲執(zhí)行,,在使用該視圖在創(chuàng)建。 REFRESH FAST:刷新數(shù)據(jù)的類型選擇FAST類型 ON COMMIT:在基表有更新時(shí)提交后立即更新物化視圖 ENABLE QUERY REWRITE :啟動(dòng)查詢重寫功能,,在創(chuàng)建物化視圖是明確說(shuō)明啟用查詢重寫功能,。 AS:定義后面的查詢語(yǔ)句 查詢體:物化視圖的查詢內(nèi)容。該SQL語(yǔ)句的查詢結(jié)果集輸出到物化視圖中,,保存在由oracle自動(dòng)創(chuàng)建的表中,。 刪除物化視圖
1.7. 序列序列是用來(lái)生成唯一,連續(xù)的整數(shù)的數(shù)據(jù)庫(kù)對(duì)象,,序列通常用來(lái)自動(dòng)生成主鍵或唯一鍵的值。序列可以按升序或降序排列。 1.7.1. 創(chuàng)建序列授予SCOTT用戶創(chuàng)建序列的權(quán)限 SQL> grant create sequence to scott; 創(chuàng)建序列,,從序號(hào)1開始,,每次增加1,最大為100,,不循環(huán),, SQL> create sequence s1 2 start with 1 3 increment by 1 4 maxvalue 100 5 nocycle 6 cache 10;
查看序列可以 SQL> select * from user_sequences; 1.7.2. 如何從序列中取值查看當(dāng)前已經(jīng)取到的值 SQL> select s1.currval from dual; 從序列中取值
清除表中的記錄
從序列中取值
在打開一個(gè)sqlplus會(huì)話,使用SCOTT用戶連接
會(huì)發(fā)現(xiàn)所有的會(huì)話會(huì)共享一個(gè)序列,。
執(zhí)行以下命令
會(huì)發(fā)現(xiàn)ID不連續(xù),,這個(gè)也是難免得。
查詢序列的當(dāng)前值是8
假如實(shí)例重啟后
按創(chuàng)建序列的要求,,每次會(huì)拿10個(gè)序列號(hào)放到緩存中,,實(shí)例重啟后,緩存中的序列就會(huì)消失,,
會(huì)發(fā)現(xiàn)此時(shí)序列從11開始了,,緩存中緩存的是11到20 再次重新啟動(dòng)實(shí)例
此時(shí)序列從21開始,。緩存中緩存的是21到30
1.7.3. 修改序列修改序列為沒有最大封頂值
修改序列號(hào)每次增值值為10
修改序列放到緩存當(dāng)中的數(shù)量為20
1.7.4. 刪除序列
1.8. 同義詞同義詞分為私用同義詞和公有同義詞 私有同義詞只能被當(dāng)前模式的用戶訪問(wèn),,私有同義詞名稱不能不可與當(dāng)前模式的對(duì)象名同名。要在自身的模式創(chuàng)建私有同義詞,,用戶必須擁有創(chuàng)建同義詞的系統(tǒng)權(quán)限,。要在其他用戶模式下創(chuàng)建私有同義詞,,用戶必須擁有CREATE ANY SYNONYM系統(tǒng)權(quán)限。 創(chuàng)建私有同義詞的語(yǔ)法如下: CREATE [OR REPLACE] SYNONYM [schema.]synonym_name FOR [schema.]object_name; [OR REPLACE]:在同義詞存在的情況下替換該同義詞 synonym_name:要?jiǎng)?chuàng)建同義詞的名稱 object_name:指定要為之創(chuàng)建同義詞的對(duì)象的名稱,。
創(chuàng)建tom用戶授予create session
授予tom用戶創(chuàng)建表的權(quán)限
使用tom用戶創(chuàng)建表aa
Sys用戶若要訪問(wèn)tom用戶下的aa表,,select語(yǔ)句這樣寫 SQL>select * from tom.aa; 可以給tom.aa起個(gè)別名xx,以后訪問(wèn)xx就代表scott.aa; 查看同義詞 使用tom用戶連接 Sql>Desc user_synonms; Sql>Select * from user_synonyms; 1.8.1. 創(chuàng)建私有同義詞使用sys用戶連接
使用TOM用戶連接
創(chuàng)建的xx同義詞是私有的同義詞,,tom用戶創(chuàng)建的xx同義詞,,只有tom用戶能使用 使用sys用戶連接
使用TOM用戶連接
使用sys用戶連接,為tom用戶創(chuàng)建公有同義詞的權(quán)限
1.8.2. 創(chuàng)建公有同義詞
使用sys用戶訪問(wèn)XXX公有同義詞,,就是在訪問(wèn)tom.aa表了
1.8.3. 刪除公有同義詞tom用戶沒有刪除公有同義詞的權(quán)限,。
為tom用戶授權(quán)刪除公有同義詞的權(quán)限
刪除tom用戶創(chuàng)建的公有同義詞XXX
DROP SYNONYM語(yǔ)句用于從數(shù)據(jù)庫(kù)中刪除同義詞,要?jiǎng)h除同義詞,,用戶必須擁有相應(yīng)的權(quán)限,。這樣刪除的是同義詞,并不是對(duì)應(yīng)的表,。 1.9. 分區(qū)表的含義oracle允許用戶把一個(gè)表中的所有行分成幾部分,,并將他們存儲(chǔ)在不同的表空間。分成的每一個(gè)部分稱為一個(gè)分區(qū),,被分區(qū)的表稱為分區(qū)表,。 對(duì)于包含大量數(shù)據(jù)的表來(lái)說(shuō),分區(qū)很有用,表分區(qū)有以下有點(diǎn): 2 改善表的查詢性能,,在對(duì)表進(jìn)行分區(qū)后,,用戶執(zhí)行sql查詢時(shí)可以只訪問(wèn)特定的分區(qū)而非整個(gè)表。 2 表更容易管理,,因?yàn)榉謪^(qū)表的數(shù)據(jù)存儲(chǔ)在多個(gè)部分中,,按分區(qū)加載和刪除數(shù)據(jù)比在表中加載和刪除更容易。 2 便于備份和恢復(fù),,可以獨(dú)立的備份和恢復(fù)每個(gè)分區(qū) 2 提高數(shù)據(jù)安全性,,將不同的分區(qū)分布在不同的磁盤,可以減小所有分區(qū)的數(shù)據(jù)同時(shí)損壞的可能性,。 符合以下條件的表可以創(chuàng)建分區(qū)表: 2 數(shù)據(jù)量大于2GB 2 已有的數(shù)據(jù)和新添加的數(shù)據(jù)有明顯的界限劃分 表分區(qū)對(duì)用戶是透明的,,即應(yīng)用程序可以不知道表已被分區(qū),在更新和查詢分區(qū)表是當(dāng)做普通表來(lái)操作,,但oracle優(yōu)化程序是知道表已經(jīng)被分區(qū)了,。 要分區(qū)的表不能具有LONG和LONG RAW數(shù)據(jù)類型的列。 分區(qū)表的分類:oracle提供的分區(qū)方法有范圍分區(qū),,列表分區(qū),,散列分區(qū),復(fù)合分區(qū),,間隔分區(qū)和虛擬列分區(qū)等,。其中間隔分區(qū)和虛擬列分區(qū)是oracle11g的新增特性。 范圍分區(qū):是一種常用的表分區(qū)方法,,它是oracle引進(jìn)的第一個(gè)分區(qū)類型,。范圍分區(qū)用于可以根據(jù)某些條件按范圍分開的數(shù)據(jù)。如果數(shù)據(jù)均勻的分布在所建立的不同的范圍內(nèi),,那么使用范圍分區(qū)將得到最好的分區(qū)效果,。范圍可以基于順序數(shù)或部分?jǐn)?shù),范圍分區(qū)技術(shù)通?;跁r(shí)間(例如月或季度) 練習(xí)范圍分區(qū)之前將scott用戶下的aa表刪除
1.9.1. 創(chuàng)建范圍分區(qū)創(chuàng)建表aa,,創(chuàng)建范圍分區(qū),以ID為范圍,,創(chuàng)建了3個(gè)分區(qū)P1,,P2,P3 SQL> create table aa (id number,name varchar2(10)) 2 partition by range(id)( 3 partition p1 values less than (10), 4 partition p2 values less than (20), 5 partition p3 values less than (30));
向表中插入數(shù)據(jù) SQL> insert into aa values (1,'tom1'); SQL> insert into aa values (2,'tom2'); SQL> insert into aa values (11,'tom11'); SQL> insert into aa values (12,'tom12'); SQL> insert into aa values (21,'tom21'); SQL> insert into aa values (22,'tom22'); SQL> commit; Commit complete. 查看p1分區(qū)的數(shù)據(jù)
查看p2分區(qū)的數(shù)據(jù)
查看p3分區(qū)的數(shù)據(jù)
如果向表中插入以下記錄,,會(huì)提示插入的分區(qū)關(guān)鍵字未映射到任何分區(qū)
按范圍分區(qū)是,,如果某些記錄暫時(shí)無(wú)法預(yù)測(cè)范圍,可以創(chuàng)建maxvalue分區(qū),,所有不在指定范圍內(nèi)的記錄都會(huì)被存儲(chǔ)到maxvalue所在的分區(qū)中,。
在插入剛才的記錄
查看P4分區(qū)的記錄
查看分區(qū)
|
|