chap6管理和維護(hù)表_第1頁
chap6管理和維護(hù)表_第2頁
chap6管理和維護(hù)表_第3頁
chap6管理和維護(hù)表_第4頁
chap6管理和維護(hù)表_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、chap6 管理和維護(hù)表王之倉 青海師范大學(xué)6.1 表的概述在Oracle數(shù)據(jù)庫中,每個(gè)關(guān)系表都由許多列組成。給每一列指派特定的數(shù)據(jù)類型來定義將在這個(gè)列中存儲(chǔ)得數(shù)據(jù)類型。一、 標(biāo)量數(shù)據(jù)類型1、CHAR 最多可以以固定長度的格式存儲(chǔ)2000個(gè)字符或字節(jié)。默許指定為以字符方式進(jìn)展存儲(chǔ),這個(gè)數(shù)據(jù)類型是固定長度的,并且當(dāng)位數(shù)不夠時(shí),需求在其右邊添加空格來補(bǔ)滿。 CREATE TABLE test(name char(20)2、VARCHAR和VARCHAR2 最多可以以可變長度來存儲(chǔ)4000B,因此不需求空格來作補(bǔ)充。VARCHAR2 比 VARCHAR 更適宜運(yùn)用,由于兼容性的緣由,所以依然在 Or

2、acle 數(shù)據(jù)庫中保管著 VARCHAR 。 CREATE TABLE test(name varchar2(20)一、標(biāo)量數(shù)據(jù)類型3、NCHAR NLSnational language support , 國際言語支持的數(shù)據(jù)類型僅可以存儲(chǔ)由數(shù)據(jù)庫 NLS 字符集定義的 Unicode 字符集。該數(shù)據(jù)類型最多可以存儲(chǔ)2000B。NCHAR 的列在位數(shù)不夠時(shí)需求在右邊填充空格。CREATE TABLE test(name Nchar(20)留意:在 Oracle9i 數(shù)據(jù)庫及其更新的版本中,僅運(yùn)用 Unicode 數(shù)據(jù)類型4、NVARCHAR2NLS 的數(shù)據(jù)類型與 VARCHAR2 數(shù)據(jù)類型等

3、價(jià)。這個(gè)數(shù)據(jù)類型最多可存儲(chǔ)4000B 。CREATE TABLE test(name Nvarchar2(20)留意:在 Oracle9i 數(shù)據(jù)庫及其更新的版本中,僅運(yùn)用 Unicode 數(shù)據(jù)類型一、標(biāo)量數(shù)據(jù)類型5、NUMBER用于存儲(chǔ)零、正數(shù)、定長負(fù)數(shù)以及浮點(diǎn)數(shù)。以 NUMBER(P,S)的方式來定義數(shù)字的精度和范圍。 p 表示精度 1-38,它表示存儲(chǔ)在列中數(shù)字的總長度是 p 位。 s 表示范圍,它表示小數(shù)點(diǎn)后的位數(shù)。該取值范圍可以從-84 到 127 。#運(yùn)用精度 5 來定義一個(gè)正數(shù)如 12345CREATE TABLE test(name number(5)#運(yùn)用精度 5 和范圍 2

4、來定義一個(gè)數(shù)字。如 12.34。CREATE TABLE test(name number(5,2)6、LONGLONG 類型的列存儲(chǔ)可變長度的字符串,最多可以存儲(chǔ) 2GB 的數(shù)據(jù)。LONG 類型的列有很多在 VARCHAR2 類型列中所具有的特征??梢赃\(yùn)用 LONG 類型的列來存儲(chǔ) LONG 類型的文本字符串。LONG 數(shù)據(jù)類型的運(yùn)用是為了向前兼容的需求。建議運(yùn)用 LOB 數(shù)據(jù)類型來替代 LONG 類型。例如:CREATE TABLE test(name long)一、標(biāo)量數(shù)據(jù)類型7、DATE用于在數(shù)據(jù)庫中存儲(chǔ)日期和時(shí)間。存儲(chǔ)時(shí)間的精度可以到達(dá) 1/100s。不提供時(shí)區(qū)的相關(guān)信息。CREAT

5、E TABLE test(name DATE)8、TIMESTAMP運(yùn)用年、月、日、小時(shí)、分鐘、秒域來對日期/時(shí)間提供更詳細(xì)的支持。最多可以運(yùn)用 9 位數(shù)字的精度來存儲(chǔ)秒受底層操作系統(tǒng)支持的限制。這個(gè)數(shù)據(jù)類型沒有時(shí)區(qū)的相關(guān)信息,CREATE TABLE test(timestamp_column TIMESTAMP);一、標(biāo)量數(shù)據(jù)類型9、RAW用于存儲(chǔ) raw 類型的二進(jìn)制數(shù)據(jù)。最多可以存儲(chǔ) 2000B。建議運(yùn)用 BLOB 來替代它。CREATE TABLE test(raw_column RAW(2000);10、LONG RAW用于存儲(chǔ) raw 類型的二進(jìn)制數(shù)據(jù)。最多可以存儲(chǔ) 2GB 的數(shù)

6、據(jù)。建議運(yùn)用BLOB來替代它。CREATE TABLE test(raw_column LONG RAW);一、標(biāo)量數(shù)據(jù)類型11、CLOB用于存儲(chǔ)基于字符的大對象??纱鎯?chǔ)4GB。CREATE TABLE test(clob_column CLOB);13、BLOB最多可以存儲(chǔ) 4GB 數(shù)據(jù)的二進(jìn)制大對象,比如照片、PPT、二進(jìn)制圖像等。CREATE TABLE test(blob_column BLOB);一、標(biāo)量數(shù)據(jù)類型14、BFILE存儲(chǔ)指向數(shù)據(jù)庫外部文件的定位符。外部文件最大為 4GB。CREATE TABLE test(bfile_column BFILE);二、集合數(shù)據(jù)類型-嵌套表

7、一種數(shù)據(jù)發(fā)掘模型配置,該配置中表的一個(gè)列包含一個(gè)表。1、嵌套表的定義 嵌套表是表中之表。一個(gè)嵌套表是某些行的集合,它在主表中表示為其中的一列。對主表中的每一條記錄,嵌套表可以包含多個(gè)行。在某種意義上,它是在一個(gè)表中存儲(chǔ)一對多關(guān)系的一種方法。調(diào)查一個(gè)包含部門信息的表,在任何時(shí)間內(nèi)每個(gè)部門會(huì)有很多工程正在實(shí)施。在一個(gè)嚴(yán)厲的關(guān)系模型中,將需求建立兩個(gè)獨(dú)立的表department和project。 二、集合數(shù)據(jù)類型-嵌套表2 舉例闡明嵌套表的運(yùn)用假設(shè)有一個(gè)關(guān)于動(dòng)物豢養(yǎng)員的表,希望其中具有他們豢養(yǎng)的動(dòng)物的信息。用一個(gè)嵌套表,就可以在同一個(gè)表中存儲(chǔ)豢養(yǎng)員和其豢養(yǎng)的全部動(dòng)物的信息。1創(chuàng)建類型animal_t

8、y:此類型中,對于每個(gè)動(dòng)物都包含有一個(gè)記錄,記載了其種類、稱號和出生日期信息。CREATE TYPE animal_ty AS OBJECT (breed varchar2(25),name varchar2(25),birthdate date);2創(chuàng)建animals_nt:此類型將用作一個(gè)嵌套表的根底類型。CREATE TYPE animal_nt as table of animal_ty;3創(chuàng)建表breeder:豢養(yǎng)員的信息表create table breeder(breedername varchar2(25),animals animal_nt)nested table anim

9、als store as animals_nt_tab;二、集合數(shù)據(jù)類型-嵌套表3、向嵌套表中插入記錄insert into breeder values(mary,animal_nt(animal_ty(dog,butch,31-MAR-97), animal_ty(dog,rover,31-MAR-97), animal_ty(dog,julio,31-MAR-97) );insert into breeder values(jane,animal_nt(animal_ty(cat,an,31-MAR-97), animal_ty(cat,jame,31-MAR-97), animal_t

10、y(cat,killer,31-MAR-97);commit;二、集合數(shù)據(jù)類型-嵌套表4、查詢嵌套表select name,birthdate from table(select animals from breeder);select name,birthdate from table (select animals from breeder where breedername=mary)where name=dog;二、集合數(shù)據(jù)類型2-VARRY固定長度(長度運(yùn)用extend方法添加)一維數(shù)組(相當(dāng)于類,有其方法和構(gòu)造方法【類型名】)序號延續(xù)對象類型create or replace ty

11、pe type_name as varry(3) of varchar(20)或者在程序的定義區(qū)中聲明:type type_name is varry(3) of varchar(20);初始化:object_name type_name :=type_name();賦值: object_name(i):=n;三、關(guān)系數(shù)據(jù)類型-游標(biāo)Cursor1 概念 游標(biāo)是SQL的一個(gè)內(nèi)存任務(wù)區(qū),由系統(tǒng)或用戶以變量的方式定義。游標(biāo)的作用就是用于暫時(shí)存儲(chǔ)從數(shù)據(jù)庫中提取的數(shù)據(jù)塊。在某些情況下,需求把數(shù)據(jù)從存放在磁盤的表中調(diào)到計(jì)算機(jī)內(nèi)存中進(jìn)展處置,最后將處置結(jié)果顯示出來或最終寫回?cái)?shù)據(jù)庫。這樣數(shù)據(jù)處置的速度才會(huì)提高

12、,否那么頻繁的磁盤數(shù)據(jù)交換會(huì)降低效率。 三、關(guān)系數(shù)據(jù)類型-游標(biāo)Cursor2 類型 Cursor類型包含三種: 隱式Cursor顯式CursorRef Cursor動(dòng)態(tài)Cursor 四、ROWID1.rowid的引見1SQL select ROWID from Bruce_test where rownum CREATE TABLE s_dept(id NUMBER(7) CONSTRAINT s_dept_id_pk PRIMARY KEY,name VARCHAR2(25) CONSTRAINT s_dept_name_nn NOT NULL,region_id NUMBER(7) CON

13、STRAINT s_dept_region_id_fk REFERENCES region (id), CONSTRAINT s_dept_name_region_id_uk UNIQUE(name, region_id);經(jīng)過子查詢建表的例子SQLCREATE TABLE emp_41 AS SELECT id, last_name, userid, start_dateFROM s_emp WHERE dept_id = 41;在 SQL Developer中創(chuàng)建表Oracle SQL Developer提供了所見即所得的數(shù)據(jù)表設(shè)計(jì)器窗口,可以經(jīng)過導(dǎo)航面板的樹狀視圖,展開數(shù)據(jù)庫銜接節(jié)點(diǎn),右

14、擊數(shù)據(jù)表節(jié)點(diǎn),選擇新建表.菜單項(xiàng),將顯示表設(shè)計(jì)器窗口。在創(chuàng)建表窗口中,可以經(jīng)過添加列按鈕添加新的列,從下拉列表框中選擇列數(shù)據(jù)類型及約束,并可單擊DDL標(biāo)簽頁來查看創(chuàng)建表的數(shù)據(jù)定義言語。創(chuàng)建表時(shí)的命名規(guī)那么和本卷須知命名規(guī)那么1)表名和字段名的命名規(guī)那么:必需以字母開頭,可以含符號A-Z,a-z,0-9,_,$,#2)大小寫不區(qū)分3)不用SQL里的保管字, 一定要用時(shí)可用雙引號把字符串括起來4)用和實(shí)體或?qū)傩韵嚓P(guān)的英文符號長度有一定的限制本卷須知:1)建表時(shí)可以用中文的字段名, 但最好還是用英文的字段名2)創(chuàng)建表時(shí)要把較小的不為空的字段放在前面, 能夠?yàn)榭盏淖侄畏旁诤竺?)建表時(shí)假設(shè)有獨(dú)一關(guān)鍵字

15、或者獨(dú)一的約束條件,建表時(shí)自動(dòng)建了索引4)一個(gè)表的最多字段個(gè)數(shù)也是有限制的,254個(gè).約束名的命名規(guī)那么和語法約束名的命名規(guī)那么約束名假設(shè)在建表的時(shí)候沒有指明,系統(tǒng)命名規(guī)那么是SYS_Cn(n是數(shù)字)約束名字符串的命名規(guī)那么同于表和字段名的命名規(guī)那么創(chuàng)建invoice表并指定主鍵CREATE TABLE invoice (invoice_id NUMBER PRIMARY KEY, -自動(dòng)編號,獨(dú)一,不為空vendor_id NUMBER NOT NULL, -供應(yīng)商ID invoice_number VARCHAR2(50) NOT NULL, -發(fā)票編號 invoice_date DATE

16、 DEFAULT SYSDATE, -發(fā)票日期 invoice_total NUMBER(9,2) NOT NULL, -發(fā)票總數(shù) payment_total NUMBER(9,2) DEFAULT 0 -付款總數(shù) ) 在列屬性中運(yùn)用CONSTRAINT關(guān)鍵字CREATE TABLE invoice ( -自動(dòng)編號,獨(dú)一,不為空invoice_id NUMBER CONSTRAINT invoice_pk PRIMARY KEY, -供應(yīng)商IDvendor_id NUMBER CONSTRAINT vendor_id_nn NOT NULL, -發(fā)票編號invoice_number VARCH

17、AR2(50) CONSTRAINT vendor_number_nn NOT NULL, -發(fā)票日期invoice_date DATE DEFAULT SYSDATE, -發(fā)票總數(shù)invoice_total NUMBER(9,2) CONSTRAINT invoice_total_nn NOT NULL, -付款總數(shù)payment_total NUMBER(9,2) DEFAULT 0 ) ;在表級別運(yùn)用CONSTRAINT關(guān)鍵字CREATE TABLE invoice ( invoice_id NUMBER , -自動(dòng)編號,獨(dú)一,不為空 vendor_id NUMBER, -供應(yīng)商ID i

18、nvoice_number VARCHAR2(50), -發(fā)票編號 invoice_date DATE DEFAULT SYSDATE, -發(fā)票日期 invoice_total NUMBER(9,2) , -發(fā)票總數(shù) payment_total NUMBER(9,2) DEFAULT 0, -付款總數(shù) CONSTRAINT invoice_pk PRIMARY KEY (invoice_id), CONSTRAINT vendor_id_un UNIQUE (vendor_id) ); 外鍵的定義1 vendor表的定義代碼CREATE TABLE vendors ( vendor_id NU

19、MBER, -供應(yīng)商id vendor_name VARCHAR2(50) NOT NULL, -供應(yīng)商稱號 CONSTRAINT vendors_pk PRIMARY KEY (vendor_id), -主鍵 CONSTRAINT vendor_name_uq UNIQUE (vendor_name) -獨(dú)一性約束 ) 外鍵的定義2 在invoice表中為vendor_id列創(chuàng)建外鍵關(guān)聯(lián)CREATE TABLE invoice ( invoice_id NUMBER , -自動(dòng)編號,獨(dú)一,不為空 vendor_id NUMBER REFERENCES vendors (vendor_id),

20、 -供應(yīng)商ID invoice_number VARCHAR2(50), -發(fā)票編號 invoice_date DATE DEFAULT SYSDATE, -發(fā)票日期 invoice_total NUMBER(9,2) , -發(fā)票總數(shù) payment_total NUMBER(9,2) DEFAULT 0, -付款總數(shù) CONSTRAINT invoiceid_vendorid_pk PRIMARY KEY (invoice_id,vendor_id), CONSTRAINT vendor_id_un UNIQUE (vendor_id) ); 外鍵的定義3 在invoice表級別創(chuàng)建外鍵關(guān)聯(lián)

21、CREATE TABLE invoice ( invoice_id NUMBER , -自動(dòng)編號,獨(dú)一,不為空 vendor_id NUMBER, -供應(yīng)商ID invoice_number VARCHAR2(50), -發(fā)票編號 invoice_date DATE DEFAULT SYSDATE, -發(fā)票日期 invoice_total NUMBER(9,2) , -發(fā)票總數(shù) payment_total NUMBER(9,2) DEFAULT 0, -付款總數(shù) CONSTRAINT invoiceid_vendorid_pk PRIMARY KEY (invoice_id,vendor_id

22、), CONSTRAINT vendor_id_un UNIQUE (vendor_id), CONSTRAINT invoice_fk_vendors FOREIGN KEY (vendor_id) REFERENCES vendors(vendor_id) ON DELETE CASCADE ); 6.2.2 創(chuàng)建暫時(shí)表一、認(rèn)識暫時(shí)表目前一切運(yùn)用 Oracle 作為數(shù)據(jù)庫支撐平臺的運(yùn)用,大部分?jǐn)?shù)據(jù)量比較龐大的系統(tǒng),即表的數(shù)據(jù)量普通情況下都是在百萬級以上的數(shù)據(jù)量。當(dāng)然在 Oracle 中創(chuàng)建分區(qū)是一種不錯(cuò)的選擇,但是當(dāng)發(fā)現(xiàn)運(yùn)用有多張表關(guān)聯(lián)的時(shí)候,并且這些表大部分都是比較龐大,而關(guān)聯(lián)的時(shí)候發(fā)現(xiàn)

23、其中的某一張或者某幾張表關(guān)聯(lián)之后得到的結(jié)果集非常小并且查詢得到這個(gè)結(jié)果集的速度非??欤敲催@個(gè)時(shí)候思索在 Oracle 中創(chuàng)建“暫時(shí)表。6.2.2 創(chuàng)建暫時(shí)表對暫時(shí)表的了解在 Oracle 中創(chuàng)建一張表,這個(gè)表不用于其他的什么功能,主要用于本人的軟件系一致些特有功能才用的,而當(dāng)他用完之后表中的數(shù)據(jù)就沒用了。 Oracle 的暫時(shí)表創(chuàng)建之后根本不占用表空間,假設(shè)他沒有指定暫時(shí)表(包括暫時(shí)表的索引)存放的表空的時(shí)候,他插入到暫時(shí)表的數(shù)據(jù)是存放在 ORACLE 系統(tǒng)的暫時(shí)表空間中( TEMP )。6.2.2 創(chuàng)建暫時(shí)表二、暫時(shí)表的創(chuàng)建 創(chuàng)建Oracle 暫時(shí)表,可以有兩種類型的暫時(shí)表: 1 會(huì)話級的

24、暫時(shí)表 2 事務(wù)級的暫時(shí)表6.2.2 創(chuàng)建暫時(shí)表1) 會(huì)話級的暫時(shí)表 由于會(huì)話級暫時(shí)表中的數(shù)據(jù)和當(dāng)前會(huì)話有關(guān)系,當(dāng)當(dāng)前SESSION 不退出的情況下,暫時(shí)表中的數(shù)據(jù)就還存在,而當(dāng)退出當(dāng)前SESSION 的時(shí)候,暫時(shí)表中的數(shù)據(jù)就全部沒有了,當(dāng)然這個(gè)時(shí)候假設(shè)以另外一個(gè)SESSION 登陸的時(shí)候是看不到另外一個(gè)SESSION 中插入到暫時(shí)表中的數(shù)據(jù)的。即兩個(gè)不同的SESSION 所插入的數(shù)據(jù)是互不相關(guān)的。當(dāng)某一個(gè)SESSION 退出之后暫時(shí)表中的數(shù)據(jù)就被截?cái)?truncate table ,即數(shù)據(jù)清空)了。6.2.2 創(chuàng)建暫時(shí)表會(huì)話級的暫時(shí)表創(chuàng)建方法:Create Global Temporary

25、Table Table_Name(Col1 Type1,Col2 Type2.) On Commit Preserve Rows ;舉例:create global temporary table Student(Stu_id Number(5),Class_id Number(5),Stu_Name Varchar2(8),Stu_Memo varchar2(200) on Commit Preserve Rows ;6.2.2 創(chuàng)建暫時(shí)表2 事務(wù)級暫時(shí)表 事務(wù)級暫時(shí)表是指該暫時(shí)表與事務(wù)相關(guān),當(dāng)進(jìn)展事務(wù)提交或者事務(wù)回滾的時(shí)候,暫時(shí)表中的數(shù)據(jù)將自行被截?cái)?,其他的?nèi)容和會(huì)話級的暫時(shí)表的一致(包括

26、退出SESSION 的時(shí)候,事務(wù)級的暫時(shí)表也會(huì)被自動(dòng)截?cái)?。6.2.2 創(chuàng)建暫時(shí)表事務(wù)級暫時(shí)表的創(chuàng)建方法:Create Global Temporary Table Table_Name(Col1 Type1,Col2 Type2.) On Commit Delete Rows ;舉例: create global temporary table Classes (Class_id Number(5), Class_Name Varchar2(8), Class_Memo varchar2(200) on Commit delete Rows ;6.2.2 創(chuàng)建暫時(shí)表3 兩種類型暫時(shí)表的區(qū)別

27、會(huì)話級暫時(shí)表采用 on commit preserve rows ;而事務(wù)級那么采用 on commit delete rows ; 用法上,會(huì)話級別只需當(dāng)會(huì)話終了暫時(shí)表中的數(shù)據(jù)才會(huì)被截?cái)?,而且事?wù)級暫時(shí)表那么不論是 commit 、 rollback 或者是會(huì)話終了,暫時(shí)表中的數(shù)據(jù)都將被截?cái)?。6.2.2 創(chuàng)建暫時(shí)表4 什么時(shí)候運(yùn)用暫時(shí)表 1 ) 當(dāng)某一個(gè) SQL 語句關(guān)聯(lián)的表在 2 張及以上,并且和一些小表關(guān)聯(lián)。可以采用將大表進(jìn)展分拆并且得到比較小的結(jié)果集合存放在暫時(shí)表中 2 ) 程序執(zhí)行過程中能夠需求存放一些暫時(shí)的數(shù)據(jù),這些數(shù)據(jù)在整個(gè)程序的會(huì)話過程中都需求用的等等。6.2.2 創(chuàng)建暫時(shí)表

28、5 暫時(shí)表的缺乏之處 1 )不支持 lob 對象,這也許是設(shè)計(jì)者基于運(yùn)轉(zhuǎn)效率的思索,但實(shí)踐運(yùn)用中確實(shí)需求此功能時(shí)就無法運(yùn)用暫時(shí)表了。 2 )不支持主外鍵關(guān)系 所以,由于以上緣由,可以本人創(chuàng)建暫時(shí)表,以彌補(bǔ) oracle 暫時(shí)表的缺乏之處。閱讀資料:暫時(shí)表創(chuàng)建方法: 1 、以常規(guī)表的方式創(chuàng)建暫時(shí)數(shù)據(jù)表的表構(gòu)造,但要在每一個(gè)表的主鍵中參與一個(gè) SessionID 列以區(qū)分不同的會(huì)話。(可以有 lob 列和主外鍵) 2 、寫一個(gè)用戶注銷觸發(fā)器,在用戶終了會(huì)話的時(shí)候刪除本次會(huì)話所插入的一切記錄 (SessionID 等于本次會(huì)話 ID 的記錄 ) 。 3 、程序?qū)懭霐?shù)據(jù)時(shí),要順便將當(dāng)前的會(huì)話 ID(S

29、essionID) 寫入表中。 4 、程序讀取數(shù)據(jù)時(shí),只讀取與當(dāng)前會(huì)話 ID 一樣的記錄即可。 功能加強(qiáng)的擴(kuò)展設(shè)計(jì): 1 、可以在數(shù)據(jù)表上建立一個(gè)視圖,視圖對記錄的挑選條件就是當(dāng)前會(huì)話的SessionID 。 2 、數(shù)據(jù)表中的SessionID 列可以經(jīng)過Trigger 實(shí)現(xiàn),以實(shí)現(xiàn)對運(yùn)用層的透明性。 3 、高級用戶可以訪問全局?jǐn)?shù)據(jù),以實(shí)現(xiàn)更加復(fù)雜的功能。 擴(kuò)展暫時(shí)表的優(yōu)點(diǎn): 1 、實(shí)現(xiàn)了與Oracle 的基于會(huì)話的暫時(shí)表一樣的功能。 2 、支持SDO_GEOMETRY 等lob 數(shù)據(jù)類型。 3 、支持表間的主外鍵銜接,且主外鍵銜接也是基于會(huì)話的。 4 、高級用戶可以訪問全局?jǐn)?shù)據(jù),以實(shí)現(xiàn)更加復(fù)

30、雜的功能。6.3 維護(hù)參數(shù)1 initransinitrans用于對數(shù)據(jù)塊的行級并行操作的控制。首先引見事務(wù)槽的概念,事務(wù)槽在數(shù)據(jù)塊頭中,存儲(chǔ)了有關(guān)事務(wù)的控制信息。數(shù)據(jù)塊中的每行數(shù)據(jù)有一個(gè)鎖位,該鎖位號與事務(wù)槽一樣,數(shù)據(jù)庫效力器就是經(jīng)過每行的鎖位找到數(shù)據(jù)塊頭中的事務(wù)槽,利用數(shù)據(jù)槽中的事務(wù)信息完成對該行數(shù)據(jù)的操作。每個(gè)事務(wù)只運(yùn)用一個(gè)事務(wù)槽。 設(shè)initrans值為2,那么數(shù)據(jù)庫效力器在一個(gè)數(shù)據(jù)塊中最多有兩個(gè)并行的事務(wù)可以獨(dú)立、并行的經(jīng)過本人的事務(wù)槽,實(shí)現(xiàn)對共享數(shù)據(jù)塊中的行數(shù)據(jù)的事務(wù)操作。2 MAXTRANSMAXTRANS 指的是假設(shè) INITRANS 空間不夠用了,就會(huì)自動(dòng)擴(kuò)展 ITL ,直到

31、最大值也就是 MAXTRANS 值為止,預(yù)設(shè)是 255 。但是,假設(shè) BLOCK 空間曾經(jīng)缺乏,也有能夠無法繼續(xù)擴(kuò)展到 255 個(gè) ITS 空間喔。maxtrains定義了數(shù)據(jù)塊中數(shù)據(jù)槽的最大值。事務(wù)表會(huì)根據(jù)需求動(dòng)態(tài)擴(kuò)展,最大到達(dá)MAXTRANS 個(gè)條目假設(shè)塊上有足夠的自在空間。所分配的每個(gè)事務(wù)條目需求占用塊首部中的2324 字節(jié)的存儲(chǔ)空間。假設(shè)有大量的并發(fā)訪問運(yùn)用的這個(gè)塊,那么參數(shù)不能太小,否那么資源競爭將導(dǎo)致系統(tǒng)并發(fā)性能下降。3 PCTFREE要描畫一個(gè) BLOCK 的運(yùn)作,我們可以把一個(gè) BLOCK 想成一個(gè)水杯。侍者把水倒入放在我們面前的水杯,要多滿呢,我們要求他倒 9 分滿好了,這時(shí)

32、候 PCTFREE 代表著設(shè)定為 10 ,意思就是說,當(dāng) BLOCK 運(yùn)用到達(dá) 90% 的時(shí)候,就不可以在運(yùn)用了,這個(gè) BLOCK 應(yīng)該從 FREELIST 列表中移除 (un-link) 。為何要保管 10% 的空間呢?這是為了提供 update 數(shù)據(jù)時(shí)所能夠添加的空間運(yùn)用,假設(shè)空間保管的太小,就容易發(fā)生 row chaining 。假設(shè)希望在對象創(chuàng)建后更改pctfree參數(shù),可經(jīng)過以下命令SQL alter table t1 pctfree 20;Table altered. 可經(jīng)過dba_tables,dba_indexes查看pct_free的參數(shù)值,例如如下SQL select ta

33、ble_name,pct_free from user_tables where table_name=T1 TABLE_NAME PCT_FREE- -T1 20 4 pctused 當(dāng)一個(gè)block閱歷delete操作使已運(yùn)用空間降到pctused值后,此塊重新被參與freelist,后續(xù)的insert將會(huì)用到這個(gè)block??偨Y(jié):pctfree 很重要,但對于查詢系統(tǒng)根本上可以設(shè)置為0pctused 由于10g以后oracle都采用位圖對段和數(shù)據(jù)塊進(jìn)展管理了,這個(gè)參數(shù)根本可以淘汰initrans ,很重要,但假設(shè)不是特別設(shè)置,不要去修正。maxtrans ,至少10g以上不用了,屬于淘汰

34、行列。6.4 維護(hù)列添加列 語法:ALTER TABLE table_name ADD(new_column_name datatypeDEFAULT value NOT NULL);例子:ALTER TABLE employee ADD(phone VARCHAR2(10),hiredate DATE DEFAULT SYSDATE NOT NULL);留意:為表添加列時(shí)應(yīng)留意,假設(shè)表中曾經(jīng)有數(shù)據(jù),那么新列不能用NOT NULL約束,除非為新列設(shè)置缺省值,在默許情況下,新插入列的值為NULL。1 添加列 語法:ALTER TABLE table_name ADD(new_column_nam

35、e datatypeDEFAULT value NOT NULL);例子:ALTER TABLE employee ADD(phone VARCHAR2(10),hiredate DATE DEFAULT SYSDATE NOT NULL);留意:為表添加列時(shí)應(yīng)留意,假設(shè)表中曾經(jīng)有數(shù)據(jù),那么新列不能用NOT NULL約束,除非為新列設(shè)置缺省值,在默許情況下,新插入列的值為NULL。2 修正列名語法:ALTER TABLE table_name RENAME COLUMN oldname TO newname;舉例:ALTER TABLE employee RENAME COLUMN ename

36、 TO employee_name;3 修正列類型語法:ALTER TABLE table_name MODIFY column_name new_datatype;舉例:ALTER TABLE employee MODIFY ename CHAR(20);留意:可以增大字符類型列的長度和數(shù)值類型列的精度;假設(shè)字符類型列、數(shù)值類型列中的數(shù)據(jù)滿足新的長度、精度,那么可以減少類型的長度、精度;假設(shè)不改動(dòng)字符串的長度,可以將VARCHAR2類型和CHAR類型轉(zhuǎn)換;假設(shè)更改數(shù)據(jù)類型為另一種非同系列類型,那么列中數(shù)據(jù)必需為NULL。刪除列當(dāng)某些列不再需求時(shí),可以將其刪除。但是不能將表中一切列刪除。刪除列

37、的方法有兩種,一種是直接刪除,另一種是將列先標(biāo)志為UNUSED,然后進(jìn)展刪除。1直接刪除列2將列標(biāo)志為UNUSED形狀直接刪除列可以運(yùn)用ALTER TABLE DROP COLUMN語句直接刪除列??梢詣h除一列或多列,同時(shí)刪除與列相關(guān)的索引和約束。假設(shè)刪除的列是一個(gè)多列約束的組成部分,那么必需運(yùn)用CASCADE CONSTRAINTS選項(xiàng)。例子:刪除employess表中的sno,phone,hiredate列,語句為:ALTER TABLE sc DROP COLUMN sno CASCADE CONSTRAINTS;ALTER TABLE employee DROP(phone,hired

38、ate);將列標(biāo)志為UNUSED形狀刪除列時(shí),將刪除表中每個(gè)記錄的相應(yīng)列值,同時(shí)釋放存儲(chǔ)空間。因此,假設(shè)要?jiǎng)h除一個(gè)大的表中的列,由于需求對每個(gè)記錄進(jìn)展處置,并寫入重做日志文件,需求很長的處置時(shí)間。為了防止在數(shù)據(jù)庫運(yùn)用頂峰期間由于刪除列的操作而占用過多的資源,可以暫時(shí)將列置為UNUSED形狀。將列標(biāo)志為UNUSED形狀運(yùn)用 ALTER TABLE SET UNUSED語句。對用戶來說,被標(biāo)志為UNUSED形狀的列像被刪除了一樣,無法查詢該列,但實(shí)踐上該列依然存在,并占用存儲(chǔ)空間??梢栽跀?shù)據(jù)庫空閑時(shí),運(yùn)用ALTER TABLE DROP UNUSED COLUMNS語句刪除處于UNUSED形狀的一

39、切列。將列標(biāo)志為UNUSED形狀例子:將employee表中sage、sname、resume列設(shè)置為UNUSED形狀A(yù)LTER TABLE player SET UNUSED COLUMN sage;ALTER TABLE player SET UNUSED COLUMN (sname,resume);ALTER TABLE player DROP UNUSED COLUMNS;6.5 刪除和截?cái)啾韉rop table tablename;truncate table tablename;delete table tablename;1 刪除表刪除表drop table tablename;

40、特性:它刪除表中一切的數(shù)據(jù)行和表的構(gòu)造。它也刪除表的一切索引。假設(shè)沒有備份,所刪除的數(shù)據(jù)無法恢復(fù)。它提交一切的掛起的事務(wù)。一切基于該表的視圖和別名依然保管但已無效。2 截?cái)啾斫財(cái)啾韙runcate table tablename;特性:它刪除表中一切的數(shù)據(jù)行,但保管表的構(gòu)造。假設(shè)沒有備份,所刪除的數(shù)據(jù)無法恢復(fù)。該語句釋放表所占用的磁盤空間。它并不觸發(fā)表的刪除觸發(fā)器。3 刪除表內(nèi)容delete table tablename;delete語句是dml,這個(gè)操作會(huì)放到rollback segement中,事務(wù)提交之后才生效;假設(shè)有相應(yīng)的trigger,執(zhí)行的時(shí)候?qū)⒈挥|發(fā).小結(jié)1 truncate和

41、 delete只刪除數(shù)據(jù)不刪除表的構(gòu)造(定義)drop語句將刪除表的構(gòu)造被依賴的約束(constrain),觸發(fā)器(trigger),索引(index).2 delete語句是dml,這個(gè)操作會(huì)放到rollback segement中,事務(wù)提交之后才生效;假設(shè)有相應(yīng)的trigger,執(zhí)行的時(shí)候?qū)⒈挥|發(fā).truncate,drop是ddl, 操作立刻生效,原數(shù)據(jù)不放到rollback segment中,不能回滾. 操作不觸發(fā)trigger.3 速度,普通來說: drop; truncate ; delete4 平安性:小心運(yùn)用drop 和truncate,尤其沒有備份的時(shí)候.否那么哭都來不及5

42、運(yùn)用上,想刪除部分?jǐn)?shù)據(jù)行用delete,留意帶上where子句. 回滾段要足夠大. 6.6 分區(qū)表當(dāng)表中的數(shù)據(jù)量不斷增大,查詢數(shù)據(jù)的速度就會(huì)變慢,運(yùn)用程序的性能就會(huì)下降,這時(shí)就應(yīng)該思索對表進(jìn)展分區(qū)。表進(jìn)展分區(qū)后,邏輯上表依然是一張完好的表,只是將表中的數(shù)據(jù)在物理上存放到多個(gè)表空間(物理文件上),這樣查詢數(shù)據(jù)時(shí),不至于每次都掃描整張表。表分區(qū)的詳細(xì)作用:Oracle的分區(qū)表功能經(jīng)過改善可管理性、性能和可用性,從而為各式運(yùn)用程序帶來了極大的益處。通常,分區(qū)可以使某些查詢以及維護(hù)操作的性能大大提高。此外,分區(qū)還可以極大簡化常見的管理義務(wù),分區(qū)是構(gòu)建千兆字節(jié)數(shù)據(jù)系統(tǒng)或超高可用性系統(tǒng)的關(guān)鍵工具。1 范圍

43、分區(qū)范圍分區(qū)將數(shù)據(jù)基于范圍映射到每一個(gè)分區(qū),這個(gè)范圍是他在創(chuàng)建分區(qū)時(shí)指定的分區(qū)鍵決議的。這種分區(qū)方式是最為常用的,并且分區(qū)鍵經(jīng)常采用日期。舉個(gè)例子:能夠會(huì)將銷售數(shù)據(jù)按照月份進(jìn)展分區(qū)。當(dāng)運(yùn)用范圍分區(qū)時(shí),請思索以下幾個(gè)規(guī)那么:1、每一個(gè)分區(qū)都必需有一個(gè)VALUES LESS THEN子句,它指定了一個(gè)不包括在該分區(qū)中的上限值。分區(qū)鍵的任何值等于或者大于這個(gè)上限值的記錄都會(huì)被參與到下一個(gè)高一些的分區(qū)中。2、一切分區(qū),除了第一個(gè),都會(huì)有一個(gè)隱式的下限值,這個(gè)值就是此分區(qū)的前一個(gè)分區(qū)的上限值。3、在最高的分區(qū)中,MAXVALUE被定義。MAXVALUE代表了一個(gè)不確定的值。這個(gè)值高于其它分區(qū)中的任何分區(qū)

44、鍵的值,也可以了解為高于任何分區(qū)中指定的VALUE LESS THEN的值,同時(shí)包括空值例1 按id值SQL create table fnn_test1 2 ( 3 KPI_ID VARCHAR2(10), 4 KPI_NAME VARCHAR2(60), 5 FA_BIL_CODE VARCHAR2(10), 9 PAYOUT_RATE NUMBER(10,2), 10 ACCT_YEAR VARCHAR2(4) 11 ) 12 partition by range (KPI_ID) 13 ( 14 partition PART1 values less than (10000), 15

45、partition PART2 values less than (20000), 16 partition PART3 values less than (30000), 17 partition PART4 values less than (40000) 18 );例2 按時(shí)間SQL create table fnn_test2 2 ( 3 KPI_CODE VARCHAR2(10), 4 KPI_NAME VARCHAR2(60), 5 FA_BIL_CODE VARCHAR2(10), 9 PAYOUT_RATE NUMBER(10,2), 10 ACCT_YEAR VARCHAR2(4) 11 ) 12 partition by range (ACCT_YEAR) 13 ( 14 partition PART_2021 values less than (2021), 15 partition PART_2021 values

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論