<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    理解oracle中連接和會(huì)話

    Posted on 2007-12-26 08:50 英雄 閱讀(3875) 評(píng)論(3)  編輯  收藏

    轉(zhuǎn)載請(qǐng)注明出處

    理解oracle中連接和會(huì)話

     

    1.      概念不同:

    連接是指物理的客戶端到oracle服務(wù)端的連接。一般是通過一個(gè)網(wǎng)絡(luò)的連接。

    在已建立的連接上,建立客戶端與oracle的會(huì)話,以后客戶端與oracle的交互都在一個(gè)會(huì)話環(huán)境中進(jìn)行。

    2.   關(guān)系是多對(duì)多:[同意網(wǎng)友的意見,應(yīng)該是1對(duì)多。一個(gè)會(huì)話要么沒有連接,要么在一個(gè)連接上。]

    一個(gè)連接上可以建立0個(gè),1個(gè),2個(gè),多個(gè)會(huì)話。

    Oracle允許存在這樣的會(huì)話,就是失去了物理連接的會(huì)話。

    3.      概念應(yīng)用:

    l        oraclesessions參數(shù)決定的是會(huì)話數(shù)而不是物理連接數(shù)。

    l        oracle的臨時(shí)表中的數(shù)據(jù)是各會(huì)話間隔離的,而與連接概念無(wú)關(guān)。

    l        jdbcconnection,對(duì)oracle是一個(gè)會(huì)話的概念。

    4.    實(shí)際應(yīng)用:

    連接池,為了提高數(shù)據(jù)庫(kù)交互效率,一般驅(qū)動(dòng)程序都有連接池概念的實(shí)現(xiàn)。

          Oracle不同的驅(qū)動(dòng)提供兩種連接池概念。

    一種譯為隱式連接緩沖

    OracleDataSource ods = new OracleDataSource();

                ods.setURL("jdbc:oracle:thin:@10.1.3.60:1521:orcl");

                ods.setUser("NC50_DEV");

                ods.setPassword("NC50_DEV");

                ods.setConnectionCachingEnabled(true);

              java.util.Properties jup = new java.util.Properties();

                jup.setProperty("InitialLimit", "1");

                jup.setProperty("MinLimit", "1");

                jup.setProperty("MaxLimit", "2");

                ods.setConnectionCacheProperties(jup);

               Connection cx0 = ods.getConnection();

          隱式連接緩沖在第一次getconnection()時(shí)將根據(jù)配置初始化連接,并在每一個(gè)連接上建立一個(gè)會(huì)話。然后從這些會(huì)話中返回一個(gè)給本次調(diào)用。以后如果在本次connection.close()前調(diào)用getconnection(),將肯定得到另外一個(gè)會(huì)話。如果初始時(shí)建立的會(huì)話不夠了,那么將新建物理連接,并在連接上建立一個(gè)會(huì)話。當(dāng)然不能超過兩個(gè)限制:1.MaxLimit【見程序,限制物理連接數(shù)】。2.sessionsoracle參數(shù)】。每次close()并不關(guān)閉實(shí)際的會(huì)話,而是返回連接緩沖中,供另一個(gè)getconnection()使用。所以可以得知,如果一個(gè)getconnection()中給某一個(gè)會(huì)話級(jí)臨時(shí)表插入數(shù)據(jù),然后close(),那么之后如果這個(gè)會(huì)話被重新得到,是可以看到插入的數(shù)據(jù)的。

    一種譯為OCI連接池。

    OracleOCIConnectionPool ods = new OracleOCIConnectionPool();

                String tns = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS="

                        + "(PROTOCOL=TCP)(HOST=10.1.3.60)(PORT=1521)))"

                        + "(CONNECT_DATA=(SERVICE_NAME=ORCL)))";

                ods.setURL("jdbc:oracle:oci:@" + tns);

                ods.setUser("NC50_DEV");

                ods.setPassword("NC50_DEV");

                java.util.Properties jup = new java.util.Properties();

        jup.setProperty(OracleOCIConnectionPool.CONNPOOL_MIN_LIMIT, "2");       jup.setProperty(OracleOCIConnectionPool.CONNPOOL_MAX_LIMIT, "2");

        jup.setProperty(OracleOCIConnectionPool.CONNPOOL_INCREMENT, "0");

                ods.setPoolConfig(jup);

            Connection cx0 = ods.getConnection();

                OCI連接池在第一次getconnection()時(shí)將根據(jù)配置初始化連接,并在每一個(gè)連接上建立一個(gè)會(huì)話。注意,連接上一旦建立了一個(gè)會(huì)話,這個(gè)連接將還可以再建會(huì)話。那么在此時(shí),會(huì)任取一個(gè)建完會(huì)話的物理連接再建一個(gè)會(huì)話返回。這樣看來似乎OCI連接池只需建立一個(gè)物理連接就可以建立任意多的會(huì)話,當(dāng)然這時(shí)也要受限于oracle允許的sessions設(shè)置。實(shí)際上OCI到底1個(gè)物理連接對(duì)應(yīng)多少個(gè)會(huì)話,OCI自身有一個(gè)對(duì)應(yīng)用透明的管理。但是CONNPOOL_MAX_LIMIT一定是限制住此客戶端可用的物理連接數(shù)的。對(duì)于OCI連接池,每一個(gè)connection.close()都將實(shí)際關(guān)閉會(huì)話,但物理連接保留。所以可以得知,如果一個(gè)getconnection()中給某一個(gè)會(huì)話級(jí)臨時(shí)表插入數(shù)據(jù),然后close(),那么此數(shù)據(jù)將被刪除。

    5.關(guān)于專用服務(wù)器模式下processes參數(shù)

                對(duì)于隱式連接緩沖,每一個(gè)連接上建立一個(gè)會(huì)話,對(duì)于每一個(gè)會(huì)話都將對(duì)應(yīng)一個(gè)dedicated process

                對(duì)于OCI連接池,只有物理連接上建立的那個(gè)會(huì)話才對(duì)應(yīng)一個(gè)dedicated process(這里記為DP_A,DP_B)。而其他會(huì)話對(duì)應(yīng)一個(gè)PSUEDO process.這是一個(gè)輕量級(jí)process,它是不算processes數(shù)的。

            所以關(guān)于這個(gè)問題“專用服務(wù)器模式是一個(gè)物理連接對(duì)應(yīng)一個(gè)process,還是一個(gè)會(huì)話對(duì)應(yīng)一個(gè)process?”,從這里可以理解oracle的設(shè)計(jì)思路確實(shí)一個(gè)是會(huì)話對(duì)應(yīng)一個(gè)process,與物理連接不相關(guān)。但是實(shí)際的實(shí)現(xiàn)呢?當(dāng)oci獲得的connection上執(zhí)行sql時(shí),ORCLED的響應(yīng)還是會(huì)借助到DP_A,DP_B上,如果DP_A,DP_B正忙,那就得一樣地等。

    補(bǔ)充:
    1.物理連接一般跟網(wǎng)絡(luò)資源有關(guān)的。通過網(wǎng)絡(luò)的一個(gè)物理連接會(huì)占用客戶端一個(gè)新的臨時(shí)端口。
    2.JTA事務(wù)管理,是針對(duì)多個(gè)會(huì)話的DB訪問,維系在一個(gè)事務(wù)中。這個(gè)概念是多會(huì)話,而不是刻意強(qiáng)調(diào)多個(gè)數(shù)據(jù)源(兩個(gè)ORACLE),甚至異種數(shù)據(jù)庫(kù)。JDBC事務(wù)管理,是建立在一個(gè)會(huì)話上的事務(wù)。
    3.processes參數(shù)控制的是oracle所有進(jìn)程/線程,不僅僅是專用server,包括后臺(tái)普通進(jìn)程,典型的如果在MTS模式下,還包括dispatcher。而OCI下連接PSUEDO process的作用有點(diǎn)類似MTS模式下的dispatcher,但它不受processes限制。同時(shí)注意即使有這個(gè)PSUEDO process存在,專用模式和MTS還是截然不同,因?yàn)閷S媚J较卤仨毜鹊?font face="Times New Roman">DP_A,DP_B的客戶會(huì)話關(guān)閉后才可用DP_A,DP_B來服務(wù)PSUEDO process對(duì)應(yīng)的客戶會(huì)話,而MTS是不等會(huì)話結(jié)束就拉過來服務(wù)了。

    官方解釋

    1.1 connection:
       A connection is a physical path from a client to an Oracle instance. A connection is established either over a network or over an IPC mechanism. A connection is typically between a client process and either a dedicated server or a dispatcher. However,using Oracle’s Connection Manager (CMAN), a connection may be between a client and CMAN, and CMAN and the database.
     
    1.2 session
       A session is a logical entity that exists in the instance. It is your session state, or a collection of data structures in memory that represents your unique session. It is what would come first to most people’s minds when thinking of a “database connection.” It is your session in the server, where you execute SQL, commit transactions, and run stored procedures.
     
    1.3 connection vs. session
       A connection may have zero, one, or more sessions established on it. Each session is separate and independent,even though they all share the same physical connection to the database. A commit in one session does not affect any other session on that connection. In fact, each session using that connection could use different user identities!
       In Oracle, a connection is simply a physical circuit between your client process and the database instance—a network connection, most commonly. The connection may be to a dedicated server process or to a dispatcher. As previously stated, a connection may have zero or more sessions, meaning that a connection may exist with no corresponding sessions. Additionally, a session may or may not have a connection. Using advanced Oracle Net features such as connection pooling, a physical connection may be dropped by a client, leaving the session intact (but idle). When the client wants to perform some operation in that session, it would reestablish the physical connection.
     

    Feedback

    # re: 理解oracle中連接和會(huì)話  回復(fù)  更多評(píng)論   

    2008-01-16 10:06 by jeasonzhao
    關(guān)系是多對(duì)多:
    這個(gè)好像不對(duì)哦,一個(gè)連接可能有多個(gè)會(huì)話,一個(gè)會(huì)話只能有一個(gè)鏈接

    # re: 理解oracle中連接和會(huì)話  回復(fù)  更多評(píng)論   

    2008-01-22 11:27 by 英雄
    同意你的認(rèn)識(shí)@jeasonzhao

    # re: 理解oracle中連接和會(huì)話  回復(fù)  更多評(píng)論   

    2008-08-18 21:31 by Oracle new player
    摟主不是一般的厲害啊!

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 日韩免费高清播放器| 在线播放免费人成视频在线观看| 亚洲宅男天堂a在线| 免费v片在线观看无遮挡| 好紧我太爽了视频免费国产| 国产99在线|亚洲| 亚洲精品夜夜夜妓女网| 一个人看www在线高清免费看| 人妻无码中文字幕免费视频蜜桃| 亚洲第一区香蕉_国产a| 免费观看日本污污ww网站一区| 午夜免费啪视频在线观看 | 日韩成人免费视频播放| 成全在线观看免费观看大全| 亚洲人成网站18禁止| 亚洲AV无码AV男人的天堂| 女人18毛片水真多免费看| 毛片无码免费无码播放| jizz免费观看视频| 亚洲日本VA午夜在线影院| 久久精品国产亚洲av水果派 | 免费成人在线观看| 亚洲毛片免费视频| a级日本高清免费看| 美女被艹免费视频| 亚洲色少妇熟女11p| 久久久久亚洲精品日久生情 | 亚洲免费一级视频| 国产成人亚洲综合色影视| 亚洲A丁香五香天堂网| 在线免费观看毛片网站| 日韩人妻无码精品久久免费一| 亚洲av日韩精品久久久久久a| 亚洲综合久久1区2区3区| 日韩亚洲变态另类中文| 国产一级特黄高清免费大片| 免费大片黄在线观看yw| 色欲A∨无码蜜臀AV免费播| 男女作爱免费网站| 国产亚洲成在线播放va| 亚洲AV成人无码久久WWW|