久久久久无码精品,四川省少妇一级毛片,老老熟妇xxxxhd,人妻无码少妇一区二区

Oracle數(shù)據(jù)庫(kù)臨時(shí)表管理技巧

時(shí)間:2024-06-15 12:49:40 Oracle認(rèn)證 我要投稿
  • 相關(guān)推薦

Oracle數(shù)據(jù)庫(kù)臨時(shí)表管理技巧

  我們?cè)趧?chuàng)建數(shù)據(jù)表的時(shí)候,若沒有特殊的指明,那么我們創(chuàng)建的表是一個(gè)永久的關(guān)系型表格,也就是說(shuō),這個(gè)表格中對(duì)應(yīng)的數(shù)據(jù),除非是我們顯示的刪除的話,表中的數(shù)據(jù)是永遠(yuǎn)都存在的。相對(duì)應(yīng)的,在Oracle數(shù)據(jù)庫(kù)中還有一種類型的表,叫做臨時(shí)表。這個(gè)臨時(shí)表跟永久表最大的區(qū)別就是表中的數(shù)據(jù)不會(huì)永遠(yuǎn)的存在。當(dāng)一個(gè)會(huì)話結(jié)束或者事務(wù)結(jié)束的時(shí)候,這個(gè)臨時(shí)表中的數(shù)據(jù),不用用戶自己刪除,數(shù)據(jù)庫(kù)自己會(huì)自動(dòng)清除。

  1、 事務(wù)臨時(shí)表的管理。

  (1) 事務(wù)臨時(shí)表的創(chuàng)建。

  Oracle數(shù)據(jù)庫(kù)根據(jù)臨時(shí)表的性質(zhì)不同,可以分為事務(wù)臨時(shí)表與會(huì)話臨時(shí)表。事務(wù)臨時(shí)表是指數(shù)據(jù)只有在當(dāng)前事務(wù)內(nèi)有效。一般情況下,如果在創(chuàng)建數(shù)據(jù)表的時(shí)候,沒有特殊指明這表是會(huì)話臨時(shí)表的話,則該表默認(rèn)為事務(wù)臨時(shí)表。

  我們可以以下面的語(yǔ)句創(chuàng)建事務(wù)臨時(shí)表。


  Create global temporary table Temp_user 
  (ID NUMBER(12) Primary key,name varchar2(10));

  筆者建議:

  這個(gè)創(chuàng)建臨時(shí)表的語(yǔ)句中,雖然沒有顯性的指明該表是事務(wù)臨時(shí)表,但是,默認(rèn)的情況下,若沒有指明是什么臨時(shí)表的話,系統(tǒng)默認(rèn)是事務(wù)臨時(shí)表。我們要?jiǎng)?chuàng)建事務(wù)臨時(shí)表時(shí),可以不指定關(guān)鍵字。但是,這查看起來(lái)比較麻煩。我建議,無(wú)論在建立什么臨時(shí)表,都要利用具體的關(guān)鍵字來(lái)顯形的指明,這大家看起來(lái)都方便。一般可以利用ON COMMIT DELETE ROWS關(guān)鍵字來(lái)說(shuō)明該表就是事務(wù)性的臨時(shí)表,而不是會(huì)話性質(zhì)的臨時(shí)表。

  (2) 事務(wù)臨時(shí)表數(shù)據(jù)的變化分析。

  事務(wù)臨時(shí)表的話,當(dāng)事務(wù)結(jié)束的時(shí)候,就會(huì)清空這個(gè)事務(wù)臨時(shí)表。所以,當(dāng)我們?cè)跀?shù)據(jù)庫(kù)臨時(shí)表中插入數(shù)據(jù)后,只要事務(wù)沒有提交的話,該表中的數(shù)據(jù)就會(huì)存在。但是,當(dāng)事務(wù)提交以后,該表中的數(shù)據(jù)就會(huì)被刪除。而且,這個(gè)變化不會(huì)在重做日志中顯示。

  具體事務(wù)臨時(shí)表與會(huì)話臨時(shí)表有什么區(qū)別,我們?cè)诮榻B完會(huì)話臨時(shí)表后會(huì)詳細(xì)介紹。

  2、 會(huì)話臨時(shí)表的管理。

  會(huì)話臨時(shí)表,顧名思義,是指數(shù)據(jù)只在當(dāng)前會(huì)話內(nèi)有效的臨時(shí)表。關(guān)閉當(dāng)前會(huì)話或者進(jìn)行新的連接之后,數(shù)據(jù)表中的內(nèi)容就會(huì)被清除。那會(huì)話臨時(shí)表跟事務(wù)臨時(shí)表到底有什么區(qū)別呢?我們以一個(gè)實(shí)例來(lái)看其中的區(qū)別。

  (1) 首先,創(chuàng)建一個(gè)會(huì)話臨時(shí)表。


  CREATE GLOBAL TEMPOPARY TABLE TEMP_USER 
  (ID NUMBER(12) Primary key,name varchar2(10)) 
  ON COMMIT PRESERVE ROWS;

  也就是說(shuō),會(huì)話臨時(shí)表跟事務(wù)臨時(shí)表的創(chuàng)建語(yǔ)法大致相同,只有最后的關(guān)鍵字有區(qū)別。不過(guò)兩個(gè)表雖然類似,但是其內(nèi)部的處理機(jī)制還是有比較大的區(qū)別。

  (2) 往該表中插入數(shù)據(jù)。


 Insert into TEMP_USER values(1001,’victor’);

  往數(shù)據(jù)庫(kù)臨時(shí)表中插入數(shù)據(jù)的方法,跟往普通表中插入數(shù)據(jù)的方法是一樣的,都利用insert into語(yǔ)句進(jìn)行操作。該臨時(shí)表的數(shù)據(jù)在會(huì)話結(jié)束之前都是存在這個(gè)表格中的。

  (3) 提交該事務(wù)并查詢相關(guān)記錄。

  我們利用COMMIT的語(yǔ)句把該事務(wù)提交以后,再用SELECT查詢語(yǔ)句進(jìn)行查詢。我們知道,若該表是事務(wù)臨時(shí)表的話,則當(dāng)該事務(wù)結(jié)束以后,該表中的內(nèi)容就會(huì)被刪除。但是,這是會(huì)話臨時(shí)表,所以即使該事務(wù)提交了,但是,利用SELECT語(yǔ)句進(jìn)行查詢時(shí),仍然可以查到該條員工記錄。

  (4) 結(jié)束當(dāng)前會(huì)話,并重新連接數(shù)據(jù)庫(kù)。

  關(guān)閉當(dāng)前會(huì)話,從新連接到數(shù)據(jù)庫(kù)后,再利用SELECT語(yǔ)句查詢時(shí),會(huì)有什么結(jié)果呢?此時(shí),就查不到我們剛才插入的數(shù)據(jù)。這也就是說(shuō),在關(guān)閉對(duì)話的時(shí)候,數(shù)據(jù)庫(kù)系統(tǒng)已經(jīng)把原有的數(shù)據(jù)刪除了。從以上的分析我們可以看中,會(huì)話臨時(shí)表與事務(wù)臨時(shí)表主要的差異就在于刪除數(shù)據(jù)時(shí)機(jī)的不同。事務(wù)性臨時(shí)表是在事務(wù)提交的時(shí)候清除數(shù)據(jù),而會(huì)話性臨時(shí)表則是在關(guān)閉當(dāng)前會(huì)話的時(shí)候清除臨時(shí)表。只要當(dāng)前會(huì)話沒有關(guān)閉,即使事務(wù)完成了,會(huì)話臨時(shí)表中的數(shù)據(jù)仍然存在,不會(huì)被清除。

  3、 臨時(shí)表管理需要注意的地方。

  臨時(shí)表相對(duì)與其他表來(lái)說(shuō),是一種比較特殊的表結(jié)構(gòu),但是,作用又比較大,Oracle數(shù)據(jù)庫(kù)若沒有這種表的話,還真是不行。為了管理好這種特殊的表,我們需要注意幾個(gè)細(xì)節(jié)。

  一是要注意臨時(shí)表不能永久的保存數(shù)據(jù)。只所以稱為臨時(shí)表,就是因?yàn)樵摫碇械膬?nèi)容只是臨時(shí)存在的。當(dāng)一個(gè)會(huì)話或者事務(wù)結(jié)束時(shí),該表中的內(nèi)容就會(huì)被自動(dòng)清空。所以,在臨時(shí)表中,一般不要保存永久數(shù)據(jù)。在實(shí)務(wù)中,有個(gè)不好的操作習(xí)慣,就是有些人在測(cè)試數(shù)據(jù)庫(kù)的時(shí)候,喜歡把測(cè)試的數(shù)據(jù)放在臨時(shí)數(shù)據(jù)表中。其實(shí),這是對(duì)Oralce臨時(shí)數(shù)據(jù)表認(rèn)識(shí)的錯(cuò)誤。若我們?cè)跀?shù)據(jù)庫(kù)中,把要測(cè)試的數(shù)據(jù),如銷售定單的內(nèi)容放在數(shù)據(jù)庫(kù)的臨時(shí)表中的話,則在其他功能中,如要測(cè)試銷售定單日?qǐng)?bào)表的功能時(shí),就會(huì)找不到相關(guān)的定單內(nèi)容。因?yàn)殡x開特定的會(huì)話或者事務(wù)的話,臨時(shí)表中的內(nèi)容就會(huì)不存在了。所以,Oralce數(shù)據(jù)庫(kù)中所講的臨時(shí)表不是給我們來(lái)存儲(chǔ)測(cè)試數(shù)據(jù)的。

  二是臨時(shí)表中的數(shù)據(jù)不會(huì)備份、恢復(fù),對(duì)其的修改也不會(huì)有任何的日志信息。若我們?cè)诓僮鲾?shù)據(jù)庫(kù)的時(shí)候,往數(shù)據(jù)庫(kù)的臨時(shí)表中存入了一些信息。此時(shí)突然服務(wù)器出現(xiàn)當(dāng)機(jī)。此時(shí),我們想通過(guò)數(shù)據(jù)庫(kù)備份文件恢復(fù)數(shù)據(jù)庫(kù)臨時(shí)表中的內(nèi)容,或者查看臨時(shí)表的日志信息,都是無(wú)法實(shí)現(xiàn)的。也就是說(shuō),當(dāng)服務(wù)器以外死機(jī)重新啟動(dòng)后,臨時(shí)表中的內(nèi)容就會(huì)被清空。在數(shù)據(jù)庫(kù)的任何地方,如數(shù)據(jù)庫(kù)備份文件或者日志信息中,都查不到在重新啟動(dòng)之前數(shù)據(jù)庫(kù)臨時(shí)表中保存了哪些內(nèi)容,就好象根本沒有對(duì)臨時(shí)表進(jìn)行操作一樣。

  三是臨時(shí)表表空間的管理。臨時(shí)表在Oracle數(shù)據(jù)庫(kù)中,也是表的一種,其也有對(duì)應(yīng)的表空間。在創(chuàng)建臨時(shí)表的時(shí)候,若我們不指定表空間的話,默認(rèn)的表空間是SYSTEM。對(duì)于臨時(shí)表的表空間管理的話,我們需要注意一個(gè)小的細(xì)節(jié)。若我們把臨時(shí)表的表空間歸屬為SYSTEM的話,也就是說(shuō),在創(chuàng)建臨時(shí)表的時(shí)候不具體指定具體的表空間,則這個(gè)默認(rèn)的表空間是不能被刪除的。而若我們?cè)趧?chuàng)建臨時(shí)表表空間的時(shí)候,指定為SYSTEM以外的表空間的話,則在不需要這表空間的時(shí)候,我們可以刪除。所以,為了后續(xù)管理的方便,筆者還是建議大家在創(chuàng)建臨時(shí)表的時(shí)候,要指定表空間。

  四是要注意一個(gè)問(wèn)題,臨時(shí)表只是數(shù)據(jù)是臨時(shí)的,而表仍然是永久的。也就是說(shuō),當(dāng)一個(gè)會(huì)話結(jié)束或者一個(gè)事務(wù)完成時(shí),其臨時(shí)表中的數(shù)據(jù)雖然刪除了,但是,臨時(shí)表本身仍然是存在的。也就是說(shuō)。Oracle數(shù)據(jù)庫(kù)中的臨時(shí)表表是全局的,只是數(shù)據(jù)是臨時(shí)的。這跟SQL Server數(shù)據(jù)庫(kù)系統(tǒng)具有比較大的區(qū)別。其實(shí),這兩個(gè)數(shù)據(jù)庫(kù)在臨時(shí)表的處理上有很大的不同,各有各的特色。在以后的文章中,我會(huì)專門敘述這兩種數(shù)據(jù)庫(kù)在臨時(shí)表管理機(jī)制上的不同,歡迎大家關(guān)注。

  五是要注意Oracle數(shù)據(jù)庫(kù)在給臨時(shí)表填入數(shù)據(jù)的時(shí)候,不會(huì)對(duì)相應(yīng)的記錄加鎖。也就是說(shuō),當(dāng)在臨時(shí)表上執(zhí)行DML語(yǔ)句的操作時(shí),不會(huì)給記錄加鎖,也不會(huì)將數(shù)據(jù)的變化內(nèi)容寫到重做(REDO)日志中。所以不能用臨時(shí)表保存永久的數(shù)據(jù),也不能對(duì)臨時(shí)表進(jìn)行共同的操作。這是新手在管理數(shù)據(jù)庫(kù)臨時(shí)表經(jīng)常會(huì)碰到的問(wèn)題。

  六是臨時(shí)表與普通表之間不能相互轉(zhuǎn)換。在一般情況下,臨時(shí)表建立后,該表就不能被轉(zhuǎn)換成永久表。所以,這也說(shuō)明一個(gè)道理,利用臨時(shí)表作為數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)候的測(cè)試表不合適。這個(gè)臨時(shí)表可能跟我們按字面意思理解的臨時(shí)表有誤,不是我們所認(rèn)為的為了測(cè)試表結(jié)構(gòu)而建立的臨時(shí)表。這一點(diǎn)是我們?cè)趧傞_始接觸ORACLE數(shù)據(jù)庫(kù)時(shí),經(jīng)常會(huì)犯的錯(cuò)誤。

【Oracle數(shù)據(jù)庫(kù)臨時(shí)表管理技巧】相關(guān)文章:

Oracle 數(shù)據(jù)庫(kù)查詢小技巧03-21

Oracle重做日志文件管理技巧03-10

Oracle數(shù)據(jù)庫(kù)SELECT語(yǔ)句03-27

oracle數(shù)據(jù)庫(kù)基本語(yǔ)句02-08

Oracle數(shù)據(jù)庫(kù)語(yǔ)句大全12-21

Oracle數(shù)據(jù)庫(kù)認(rèn)證層次03-09

Oracle認(rèn)證考試技巧03-19

Oracle學(xué)習(xí)的技巧心得03-21

Oracle認(rèn)證:Oracle避免全表掃描方式03-08