理解oracle中串連和會話理解oracle中串連和會話

來源:互聯網
上載者:User
理解oracle中串連和會話

1.  概念不同:概念不同:

串連是指物理的網路連接。

在已建立的串連上,建立用戶端與oracle的會話,以後用戶端與oracle的互動都在一個會話環境中進行。

2.   關係是多對多:

一個串連上可以建立0個,1個,2個,多個會話。

Oracle允許存在這樣的會話,就是失去了物理串連的會話。

3.      概念應用:概念應用:

l        oracle的sessions參數決定的是會話數而不是物理串連數。

l        oracle的暫存資料表中的資料是各會話間隔離的,而與串連概念無關。

l        jdbc的connection,對oracle是一個會話的概念。

4.    實際應用:

串連池,為了提高資料庫互動效率,一般驅動程式都有串連池概念的實現。

  Oracle不同的驅動提供兩種串連池概念。

一種譯為隱式串連緩衝

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()時將根據配置初始化串連,並在每一個串連上建立一個會話。然後從這些會話中返回一個給本次調用。以後如果在本次connection.close()前調用getconnection(),將肯定得到另外一個會話。如果初始時建立的會話不夠了,那麼將建立物理串連,並在串連上建立一個會話。當然不能超過兩個限制: 1.MaxLimit【見程式,限制物理串連數】。 2.sessions【oracle參數】。每次close()並不關閉實際的會話,而是返回串連緩衝中,供另一個getconnection()使用。所以可以得知,如果一個getconnection()中給某一個會話級暫存資料表插入資料,然後close(),那麼之後如果這個會話被重新得到,是可以看到插入的資料的。

一種譯為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()時將根據配置初始化串連,並在每一個串連上建立一個會話。注意,串連上一旦建立了一個會話,這個串連將還可以再建會話。那麼在此時,會任取一個建完會話的物理串連再建一個會話返回。當然這時也要受限於sessions設定。對於OCI串連池,每一個connection.close()都將實際關閉會話,但物理串連保留。所以可以得知,如果一個getconnection()中給某一個會話級暫存資料表插入資料,然後close(),那麼此資料將被刪除。

5.關於專用伺服器模式下processes參數

            對於隱式串連緩衝,每一個串連上建立一個會話,對於每一個會話都將對應一個dedicated process。

            對於OCI串連池,只有物理串連上建立的那個會話才對應一個dedicated process(這裡記為DP_A,DP_B)。而其他會話對應一個PSUEDO process.這是一個輕量級process,它是不算processes數的。

        所以關於這個問題“專用伺服器模式是一個物理串連對應一個process,還是一個會話對應一個process?”,從這裡可以理解oracle的設計思路確實一個是會話對應一個process,與物理串連不相關。但是實際的實現呢?當oci獲得的connection上執行sql時,ORCLED的響應還是會藉助到DP_A,DP_B上,如果DP_A,DP_B正忙,那就得一樣地等。

轉摘自http://www.cnblogs.com/rootq/articles/1297395.html

1.  概念不同:概念不同:

串連是指物理的網路連接。

在已建立的串連上,建立用戶端與oracle的會話,以後用戶端與oracle的互動都在一個會話環境中進行。

2.   關係是多對多:

一個串連上可以建立0個,1個,2個,多個會話。

Oracle允許存在這樣的會話,就是失去了物理串連的會話。

3.      概念應用:概念應用:

l        oracle的sessions參數決定的是會話數而不是物理串連數。

l        oracle的暫存資料表中的資料是各會話間隔離的,而與串連概念無關。

l        jdbc的connection,對oracle是一個會話的概念。

4.    實際應用:

串連池,為了提高資料庫互動效率,一般驅動程式都有串連池概念的實現。

  Oracle不同的驅動提供兩種串連池概念。

一種譯為隱式串連緩衝

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()時將根據配置初始化串連,並在每一個串連上建立一個會話。然後從這些會話中返回一個給本次調用。以後如果在本次connection.close()前調用getconnection(),將肯定得到另外一個會話。如果初始時建立的會話不夠了,那麼將建立物理串連,並在串連上建立一個會話。當然不能超過兩個限制: 1.MaxLimit【見程式,限制物理串連數】。 2.sessions【oracle參數】。每次close()並不關閉實際的會話,而是返回串連緩衝中,供另一個getconnection()使用。所以可以得知,如果一個getconnection()中給某一個會話級暫存資料表插入資料,然後close(),那麼之後如果這個會話被重新得到,是可以看到插入的資料的。

一種譯為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()時將根據配置初始化串連,並在每一個串連上建立一個會話。注意,串連上一旦建立了一個會話,這個串連將還可以再建會話。那麼在此時,會任取一個建完會話的物理串連再建一個會話返回。當然這時也要受限於sessions設定。對於OCI串連池,每一個connection.close()都將實際關閉會話,但物理串連保留。所以可以得知,如果一個getconnection()中給某一個會話級暫存資料表插入資料,然後close(),那麼此資料將被刪除。

5.關於專用伺服器模式下processes參數

            對於隱式串連緩衝,每一個串連上建立一個會話,對於每一個會話都將對應一個dedicated process。

            對於OCI串連池,只有物理串連上建立的那個會話才對應一個dedicated process(這裡記為DP_A,DP_B)。而其他會話對應一個PSUEDO process.這是一個輕量級process,它是不算processes數的。

        所以關於這個問題“專用伺服器模式是一個物理串連對應一個process,還是一個會話對應一個process?”,從這裡可以理解oracle的設計思路確實一個是會話對應一個process,與物理串連不相關。但是實際的實現呢?當oci獲得的connection上執行sql時,ORCLED的響應還是會藉助到DP_A,DP_B上,如果DP_A,DP_B正忙,那就得一樣地等。

轉摘自http://www.cnblogs.com/rootq/articles/1297395.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.