青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

系統臨時表使用問題

Posted on 2010-05-13 23:14 Prayer 閱讀(542) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫,SQLDB2
系統臨時表的使用:
在一些程序中,我們需要一些僅僅在程序中使用的臨時表,但是程序結束后就不再使用,數據庫系統對這些應用提供系統臨時表,關于系統臨時表的生命存在周期和臨時表的數據存在周期說明一下:

1、生命存在周期:
A、理論上系統臨時表是不需要顯示的drop的,它是基于會話的,當系統臨時表基于的連接關閉的時候,系統臨時表將結束它的生命,這是最普通也是最常用的。

B、當一個被調用對象的返回值是一個在臨時表上執行的結果集,這個被調用對象執行完畢的時候,是關閉連接的,但是,這時候臨時表是不消失的,這時候系統臨時表在調用者結束的時候才消失。因為返回的結果集只是一個相當于指針的東西,指向臨時表內存中的地址,指向臨時表的指針還在使用的時候,臨時表是不能drop掉的。這帶來了很復雜的問題,首先:存儲過程中是不能drop臨時表的,而程序中沒有創建臨時表,也應該是不drop的,臨時表什么時間drop呢?其次:我們在一個連接中,無法2次調用一個存儲過程,他將告訴你臨時表已經存在。可以做一個簡單的例子:寫一個帶有臨時表返回結果的存儲過程,在調用存儲存儲過程的程序中,我們完全可以訪問這個臨時表。
簡單例子:
存儲過程
/**
* JDBC 存儲過程 ADMINISTRATOR.P1
*/
import java.sql.*;                   // JDBC 類

public class P1
{
    public static void p1 ( ResultSet[] rs ) throws SQLException, Exception
    {
        // 獲取與數據庫的連接
        Connection con = DriverManager.getConnection("jdbc:default:connection");
        PreparedStatement stmt = null;
        String sql;

        sql = "declare global temporary table session.temp(cc char(5)) not logged";
        stmt = con.prepareStatement( sql );
        stmt.executeUpdate();

        sql = "insert into  session.temp values ('1'),('2')";
        stmt = con.prepareStatement( sql );
        stmt.executeUpdate();
        
        sql = "SELECT * from session.temp";
        stmt = con.prepareStatement( sql );
        rs[0] = stmt.executeQuery();
        //關閉連接(注意,這個地方在rs[0]為臨時表的結果集返回的時候,stmt是無法關閉的,臨時表是無法drop的,而con是可以關閉的,關閉后臨時表還存在)
        if (con != null) con.close();
    }
}                             

客戶端調用我直接用命令行調用的。
db2 =>; connect to sample

   數據庫連接信息

數據庫服務器         = DB2/NT 7.2.1
SQL 授權標識         = ADMINIST...
本地數據庫別名       = SAMPLE
//將自動提交設為false。
db2 =>; update command options using c off
DB20000I  UPDATE COMMAND OPTIONS 命令成功完成。

//調用過程
db2 =>; call p1()

CC
1
2

"P1" RETURN_STATUS:"0"
//看看存儲過程中使用的臨時表,數據是可以看到的。
db2 =>; select *  from session.temp

CC
-----
1
2

  2 條記錄已選擇。
//一個連接中再次調用,失敗了
db2 =>; call p1()
SQL0601N  要創建的對象名與類型為"DECLARED TEMPORARY TABLE" 的現存名稱 "SESSION.TEMP" 相同。  SQLSTATE=42710
//drop一下?ok,可以的
db2 =>; drop table session.temp
DB20000I  SQL 命令成功完成。
//看看還有嗎?沒了!
db2 =>; select *  from session.temp
SQL0204N  "SESSION.TEMP" 是未定義的名稱。  SQLSTATE=42704
//再次調用,成功了
db2 =>; call p1()

CC
1
2

"P1" RETURN_STATUS:"0"


C、Websphere上的程序中使用系統臨時表:因為websphere的連接使用連接池的技術,這帶來了好處,但是同時也帶來了一些讓人容易誤解的地方,我們在程序中要關閉連接,很多時候看上去是關閉了數據庫的連接,事實上也是這樣的,但是當websphere的連接數在websphere連接池規定的連接數的范圍之內的時候,程序中關閉連接是不能直接關閉數據庫的連接的,連接池使連接繼續保持,這時候,我們的關閉連接釋放的是該連接和相關因素在websphere和java程序中使用的資源,而該連接使用的數據庫資源是無法得到釋放的。也就是說,當我們在該連接上使用臨時表的時候,我們在程序中關閉了連接,但是臨時表是還存在的,連接池中把這個連接分配給其他程序使用的時候,其他程序還可以使用這個臨時表,這并不是我們想要的。這要求我們在程序的中顯式的drop掉臨時表。(這是在南寧解決系統臨時表使用問題中,碰到的一個問題,大家可以很容易的模擬出來)

同時這也讓我們注意,一些設置,應該采取人為控制的方式,而不要采取默認,比如autoCommit,我們不能覺得程序結束了,就提交了,因為默認是程序結束提交的,如果錯了就都回滾了,但是如果連接上設定的是autoCommit為true的話,程序出錯就只能回滾你的出錯前最后一次未提交事務,也許你還在為你程序中出現的這種錯誤頭疼,他為什么前面的會提交呢?
一段代碼,應盡可能的保持它的獨立性,執行不要過多依賴于環境和其他的代碼,我想這是應該考慮的。就象在oracle數據庫上執行sql和在db2數據庫上執行sql有很明顯的區別一樣,oracle默認是不提交的,而db2默認是提交的,這樣在不主動控制事務的情況下,一個sql執行的結果是完全不同的。

2、數據存在周期
臨時表的數據是在內存中的,當你向一個臨時表插入數據的時候,他同時是直接的寫到硬盤中的,如果你的緩沖池可以滿足臨時表的數據都存在內存中,它在使用的時候是不需要讀硬盤上的數據的,除非你的緩沖池不能滿足,這樣會降低臨時表的性能。我們知道,事務的提交和回滾是對數據庫的更改做永久化,從內存中的更改到硬盤上的更改或者放棄更改(在更改實現的同時,是回收曾經占用的內存資源的)。對一個永久表,插入數據,就是在你提交之前,別的程序訪問不了你插入的數據,在你提交之后,所有的程序都可以訪問你插入的數據;而臨時表不是這樣的,無論執行提交還是回滾,臨時表數據占用的內存資源都將被釋放,同時臨時表寫到硬盤上的數據也全部刪除。
也就是說,無論執行提交還是回滾,臨時表的數據都沒了,但是臨時表還是存在的,這一點需要大家注意,在使用的過程中說插入了數據,但是沒有數據,為什么呢??
看一個簡單的命令行模擬的例子:
db2 =>; connect to sample

   數據庫連接信息

數據庫服務器         = DB2/NT 7.2.1
SQL 授權標識         = ADMINIST...
本地數據庫別名       = SAMPLE
//創建臨時表
db2 =>; declare global temporary table session.test(col1 char(5)) not logged
DB20000I  SQL 命令成功完成。
//插入數據
db2 =>; insert into session.test values('5')
DB20000I  SQL 命令成功完成。
//選擇數據,沒有數據?是的!
db2 =>; select * from session.test

COL1
-----

  0 條記錄已選擇。
//我們把提交方式改為默認不提交
db2 =>; update command options using c off
DB20000I  UPDATE COMMAND OPTIONS 命令成功完成。
//再次插入數據
db2 =>; insert into session.test values('5')
DB20000I  SQL 命令成功完成。
//選擇數據,ok,我們看到數據了!
db2 =>; select * from session.test

COL1
-----
5

  1 條記錄已選擇。
//提交一下,或者執行rollback也可以  
db2 =>; commit
DB20000I  SQL 命令成功完成。
//數據沒了
db2 =>; select * from session.test

COL1
-----

  0 條記錄已選擇。
  
  
以上是系統臨時表使用的過程中我們程序開發者需要注意的可能出現的問題,知道問題是怎么出現的,我們應該如何解決出現的問題和如何更好的使用臨時表,這是我們的目標。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产精品尤物yw在线观看| 老巨人导航500精品| 欧美一区二区三区在线免费观看| 老牛嫩草一区二区三区日本| 亚洲视频一区| 久久综合国产精品台湾中文娱乐网| 欧美国产日本| 久久亚洲综合| 亚洲欧洲日产国产网站| 麻豆av一区二区三区| 国精品一区二区三区| 国产日产亚洲精品| 亚洲欧美清纯在线制服| 久久精品成人一区二区三区| 欧美一区二区视频在线| 亚洲欧美日本精品| 狠狠爱综合网| 国产精品国产三级国产aⅴ9色| 亚洲综合三区| 国产婷婷97碰碰久久人人蜜臀| 免费h精品视频在线播放| 久久国产婷婷国产香蕉| 欧美成人黑人xx视频免费观看| 亚洲欧美视频在线观看| 久久精品国产99精品国产亚洲性色| 亚洲欧美三级在线| 欧美xxxx在线观看| 亚洲国产成人精品久久| 在线一区二区三区做爰视频网站| 夜夜嗨av一区二区三区| 亚洲作爱视频| 亚洲国产高清aⅴ视频| 国产精品www色诱视频| 另类激情亚洲| 亚洲欧美日韩区| 亚洲日韩视频| 国内免费精品永久在线视频| 久久久久久高潮国产精品视| 久久久久久久高潮| 亚洲一区二区免费视频| 亚洲精品视频在线观看免费| 久久岛国电影| 亚洲一区二区在线免费观看视频| 亚洲综合精品自拍| 亚洲高清在线视频| 亚洲日本中文字幕| 夜色激情一区二区| 欧美日韩在线直播| 久久婷婷色综合| 宅男噜噜噜66国产日韩在线观看| 欧美成人蜜桃| 久久精品亚洲一区二区三区浴池| 欧美日韩精品欧美日韩精品一| 日韩一区二区电影网| 亚洲午夜小视频| 国产一区二区三区四区老人| 99re6这里只有精品视频在线观看| 99在线精品视频| 亚洲区欧美区| 久久嫩草精品久久久精品一| 欧美日韩久久| 99精品欧美一区二区三区 | 久久久久久久综合| 欧美另类变人与禽xxxxx| 久久久精品动漫| 欧美日韩综合另类| 一区二区免费在线播放| 亚洲另类视频| 亚洲国产高潮在线观看| 国产精品福利片| 欧美亚洲系列| 久久午夜激情| 91久久黄色| 国产一区高清视频| 午夜精品剧场| 91久久国产综合久久| 国产精品毛片一区二区三区| 免费不卡在线视频| 先锋影音久久久| 亚洲精品免费看| 一区二区三区高清视频在线观看| 欧美在线关看| 亚洲国产精品欧美一二99| 欧美jizzhd精品欧美巨大免费| 欧美在线视频观看| 亚洲国产精品va| 欧美高清视频在线播放| 欧美日韩国产成人| 国产一区二区观看| 欧美亚洲一区三区| 久久精品国产清高在天天线| 先锋影音一区二区三区| 久热精品视频| 亚洲人体1000| 欧美影院成年免费版| 亚洲无吗在线| 亚洲欧美日韩一区二区三区在线观看 | 欧美日韩高清一区| 久久精品最新地址| 性欧美大战久久久久久久久| 久久综合网hezyo| 亚洲国产日韩欧美| 国产精品午夜春色av| 久久精品噜噜噜成人av农村| 久久不射2019中文字幕| 国产伦精品一区二区三区高清版| 国产精品一区二区久久久久| 夜夜嗨av一区二区三区中文字幕 | 在线午夜精品自拍| 91久久国产精品91久久性色| 久久久噜噜噜久久中文字免| 国产亚洲制服色| 久久免费视频观看| 国产精品专区第二| 免费成人av在线| 牛牛国产精品| 午夜免费在线观看精品视频| 久久精品99国产精品酒店日本| 小黄鸭视频精品导航| 国产三级欧美三级日产三级99| 国产一区二区三区黄视频| 欧美理论片在线观看| 中文日韩电影网站| 亚洲一区在线播放| 亚洲精品乱码久久久久久按摩观| 亚洲国产精品嫩草影院| 国产亚洲福利社区一区| 久久综合九色综合欧美就去吻| 亚洲欧美日韩精品久久奇米色影视| 久久精品盗摄| 性欧美xxxx视频在线观看| 欧美性做爰毛片| 亚洲一区二区三区高清| 亚洲图片欧洲图片av| 欧美午夜视频| 欧美成人精品高清在线播放| 国产日韩在线视频| 欧美插天视频在线播放| 久久久欧美精品sm网站| 一区二区三区自拍| 91久久精品国产91久久性色tv| 亚洲二区在线观看| 亚洲国产欧美久久| 亚洲欧美国产精品桃花| 亚洲高清色综合| 久久精品毛片| 国产精品福利片| 国内精品伊人久久久久av一坑| 国产美女精品视频免费观看| 亚洲免费小视频| 中文在线一区| 午夜精品免费在线| 欧美视频日韩| 国产伦精品一区二区三区四区免费| 亚洲自拍偷拍网址| 亚洲欧洲日产国产综合网| 欧美不卡福利| 国产精品99久久不卡二区| 亚洲永久免费精品| 国产日韩精品一区观看 | 日韩香蕉视频| 欧美日韩免费看| 日韩视频不卡| 亚洲一区亚洲| 国产亚洲精久久久久久| 欧美尤物巨大精品爽| 国产精品嫩草影院av蜜臀| 欧美另类99xxxxx| 日韩小视频在线观看专区| 欧美激情一区二区在线| 麻豆精品在线视频| 欧美大尺度在线观看| 欧美一区免费| 欧美成人免费观看| 日韩图片一区| 久久天天躁狠狠躁夜夜爽蜜月| 麻豆精品视频在线| 日韩一区二区免费高清| 欧美精品一区二区三区一线天视频| 亚洲国产欧美在线人成| 亚洲裸体在线观看| 久久久久国产精品厨房| 欧美日韩中文字幕精品| 国产日韩亚洲欧美综合| 美女免费视频一区| 欧美日韩一区在线播放| 亚洲国产天堂久久综合| 亚洲第一久久影院| 久久精品夜色噜噜亚洲a∨| 欧美三级在线播放| 欧美午夜精品久久久久久久| 99综合精品| 久久综合伊人77777蜜臀| 国产精品久久一卡二卡| 亚洲桃花岛网站| 亚洲一区二区三区四区中文 | 国产精品综合av一区二区国产馆| 亚洲图片欧美日产| 欧美国产视频一区二区| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 |