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

tbwshc

tbw

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  95 Posts :: 8 Stories :: 3 Comments :: 0 Trackbacks

常用鏈接

留言簿(4)

我參與的團(tuán)隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

#

以下的文章主要是介紹Oracle使用相關(guān)觸發(fā)器來實現(xiàn)自增ID,在userinfo表中id所需要的實現(xiàn)自增效果的實際操作步驟如下,如果你對其實際的操作步驟感興趣的話,以下的文章就可以更深的一部增加你在tb其方面的興趣。

1.創(chuàng)建序列

代碼

 

  1. -- Create sequence  
  2. create sequence seq_userinfo  
  3. minvalue 1  
  4. start with 1  
  5. increment by 1;  
  6.  

 

2.創(chuàng)建觸發(fā)器

代碼

 

  1. create or replace trigger tigger_userinfo  
  2. before insert on userinfo  
  3. for each row  
  4. declare  
  5. begin  
  6. select SEQ_userinfo.nextval into:New.id from dual;  
  7. end tigger_userinfo;   
posted @ 2012-07-15 17:15 tbwshc 閱讀(756) | 評論 (0)編輯 收藏

以下的文章抓喲是對Oracle SQL執(zhí)行緩慢的原因的分析,如果Oracle數(shù)據(jù)庫中的某張表的相關(guān)數(shù)據(jù)已是2億多時,同時此表也創(chuàng)建了相關(guān)的4個獨(dú)立的相關(guān)索引。由于業(yè)務(wù)方面的需要,每天需分兩次向此表中插入300萬條記錄。

由于數(shù)據(jù)量大,每次插入耗時3個小時以上,嚴(yán)重影響效率。

因此,修改了系統(tǒng)的算法,將此表中只存儲當(dāng)天新增記錄。將此表tbruncate后,第二天執(zhí)行對此表的update操作時,非常耗時。表中有2億多條數(shù)據(jù)的時候,此Oracle sql語句耗時59秒;表中有300萬條數(shù)據(jù)的時候,此Oracle sql語句耗時幾個小時。

咨詢DBA后,得出結(jié)論,需重建索引。重建后,6秒完成此操作。但第三天問題依然出現(xiàn)。DBA正在查找原因。難道每次truncate表,都需要重建索引?

對于這個問題,DBA也沒有給出合理的解釋,推測主要原因是Oracle復(fù)雜的查詢優(yōu)化算法。

最終,DBA給出的解決方案:


truncate table ....  drop index.....  insert data .....  create index ...  analyze table table_name compute statistics; 
重新生成統(tǒng)計數(shù)據(jù)

調(diào)整后,整個操作耗時非常少。

以上的相關(guān)內(nèi)容就是對Oracle SQL執(zhí)行緩慢的分析的介紹,望你能有所收獲。

 

posted @ 2012-07-15 17:13 tbwshc 閱讀(865) | 評論 (0)編輯 收藏

1、抽象類里面可以有非抽象方法,但接口里只能有抽象方法,聲明方法的存在而不去實現(xiàn)它的類被叫做抽像類(abstract class),它用于要創(chuàng)建一個體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實例。然而可以創(chuàng)建一個變量,其類型是一個抽像類,并讓它指向具體子類的一個實例。不能有抽像構(gòu)造函數(shù)或抽像靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽像方法提供實現(xiàn),否則它們也是抽像類為。取而代之,在子類中實現(xiàn)該方法。知道其行為的其它類可以在類中實現(xiàn)這些方法。

2、接口(interface)是抽像類的變體。在接口中,所有方法都是抽像的。多繼承性可通過實現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽像的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現(xiàn)與子類相似,除了該實現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實現(xiàn)特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實現(xiàn)了該接口的類的任何對像上調(diào)用接口的方法。由于有抽像類,它允許使用接口名作為引用變量的類型。通常的動態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof運(yùn)算符可以用來決定某對象的類是否實現(xiàn)了接口。

對比:
一個類可以有多個接口 只能有繼承一個父類。
抽象類可以有構(gòu)造方法,接口中不能有構(gòu)造方法。
抽象類中可以有普通成員變量,接口中沒有普通成員變量。
接口里邊全部方法都必須是abstract的 抽象類的可以有實現(xiàn)了的方法。
抽象類中的抽象方法的訪問類型可以是public,protected   但接口中的抽象方法只能是public類型的,tb并且默認(rèn)即為public abstract類型。
抽象類中可以包含靜態(tài)方法,接口中不能包含靜態(tài)方法。
抽象類和接口中都可以包含靜態(tài)成員變量,抽象類中的靜態(tài)成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final類型,并且默認(rèn)即為public static final類型。
posted @ 2012-07-12 13:18 tbwshc 閱讀(1700) | 評論 (0)編輯 收藏

 

 在Java Web編程中,不得不了解一些基礎(chǔ)技術(shù)(概念),如:Internetwww、瀏覽器、TCP/IP協(xié)議、Web服務(wù)器等。在此,我只涉及以下幾處tb

1、TCP/IP協(xié)議

        協(xié)議,在計算機(jī)網(wǎng)絡(luò)中的計算機(jī)需要相互通信、傳輸數(shù)據(jù),所遵循的統(tǒng)一的溝通規(guī)則。有人也曾形象的把協(xié)議稱之為“世界語”,是一種公認(rèn)交流的規(guī)則而已。

通常TCP/IP協(xié)議不是靠單指一個協(xié)議,而是由相關(guān)的許多協(xié)議組成的協(xié)議族,即通常稱之為“TCP/IP協(xié)議族(協(xié)議棧)”。正是有了這一系列的協(xié)議,具體規(guī)定了internet上計算機(jī)之間如何進(jìn)行數(shù)據(jù)通信,其最核心的協(xié)議就是IP協(xié)議和TCP協(xié)議.IP(Internet Protocol),規(guī)定了internet數(shù)據(jù)傳輸?shù)幕締卧透袷降膮f(xié)議。而TCP協(xié)議提供了可靠的數(shù)據(jù)傳輸服務(wù)的規(guī)則。

       TCP/IP的四層結(jié)構(gòu):

 

2、常用的Web服務(wù)器

        1>Apache

             是使用廣泛的Web服務(wù)器,支持很多的操作系統(tǒng),并且是開放源代碼的Web服務(wù)器,支持通過API擴(kuò)展其功能。可以通過官方網(wǎng)站http://www.apache.org獲得更多信息。

         2>IIS

              是微軟推出的基于window平臺的web服務(wù)器,不支持Javaservlet技術(shù),只支持自己的ASPASP.NET技術(shù)。

         3 >Tomcat

              既可以獨(dú)立運(yùn)行,又可以作為Apache服務(wù)器的插件,與Apache服務(wù)器共同工作。Tomcat在作為Apache插件的情況下,TomcatApache提供對ServlerJSP等動態(tài)內(nèi)容運(yùn)行的支持,Apache提供對訪問靜態(tài)資源的支持。

             在開發(fā)Java Web應(yīng)用的階段,我們可以把Tomcat作為對立的Web服務(wù)器來使用,而在產(chǎn)品上線的階段再使用其他的應(yīng)用服務(wù)器或者是安裝了Tomcat插件的Apache服務(wù)器。

3、Web動態(tài)編程

       Web運(yùn)行環(huán)境經(jīng)歷了靜態(tài)WEB和動態(tài)WEB兩個時期,靜態(tài)WEB與動態(tài)WEB最本質(zhì)的區(qū)別極速hi在于資源(數(shù)據(jù)庫)的訪問上。通常靜態(tài)WEB頁面就是單純的使用了HTML語音編寫,缺乏交互性,然而動態(tài)WEB技術(shù)出現(xiàn),使得用戶的交互性更加體現(xiàn)出來,如搜索引擎,不同用戶針對同一頁面將會回饋得到不同的內(nèi)容。

        動態(tài)WEB的常見實現(xiàn)手段有:

            1> CGI(Common Gateway Intterface) 公共網(wǎng)關(guān)接口

            2> PHP(Pypertext Preprocessor) 超文本預(yù)處理

            3> ASP(Active Server Pages) 動態(tài)服務(wù)頁

            4>ASP.NET

            5> JSP(Java Server Pages,Java服務(wù)頁)/Servlet(服務(wù)器端小程序)

posted @ 2012-07-12 13:16 tbwshc 閱讀(929) | 評論 (1)編輯 收藏

  第一次去面試的時候人家人如何在SSH框架下,如何進(jìn)行Hibernate的優(yōu)化,當(dāng)時自己只是看到這些根本就沒有系統(tǒng)的總結(jié)這些東西,今天終于找到一個時間來解決一下自己面試的這個問題了。

Hibernate自述

           我天生效率比較低,在普遍情況下,需要將執(zhí)行轉(zhuǎn)換為SQL語句的Hibernate低于直接JDBC存取。但是在經(jīng)過tb比較好的性能優(yōu)化之后,我的性能還是讓人相當(dāng)滿意的,特別是應(yīng)用二級緩存之后,甚至可以獲得比較不使用緩存的JDBC更好的性能。

優(yōu)化總結(jié)

           要想優(yōu)化Hibernate,我們必須知道應(yīng)該從什么地方進(jìn)行優(yōu)化,從什么地方入手。Hibernate的優(yōu)化方向:數(shù)據(jù)庫設(shè)計、HQL優(yōu)化、緩存、主配置、延遲加載、方法選用、集合選用、事物控制、批量操作

 

具體分析

第一點(diǎn):數(shù)據(jù)庫設(shè)計

       前邊博客介紹過 數(shù)據(jù)庫設(shè)計,今天我們還從這開始,表的設(shè)計就是建樓的基礎(chǔ),如何讓基礎(chǔ)簡潔而結(jié)實這是最重要的。

優(yōu)化策略:

1.   建索引

2.   減少表之間的關(guān)聯(lián)

3.   簡化查詢字段,沒用的字段不要,已經(jīng)對返回結(jié)果的控制,盡量返回少量數(shù)據(jù)

4.   適當(dāng)?shù)娜哂鄶?shù)據(jù),不過分最求高范式

第二點(diǎn):HQL優(yōu)化


                                            (HQL知識圖)

     假如想好好了解一下的建議看一下這篇博客HQL詳細(xì)使用,我個人認(rèn)為寫的還可以,知識總結(jié)的很細(xì)致。

總結(jié):

1.   實體查詢:可以使用sql語句查詢

2.   實體的更新和刪除:hibernate3中直接提供更加靈活更加效率的解決方法

3.   屬性查詢:動態(tài)構(gòu)造實例對象,對結(jié)果集進(jìn)行封裝

4.   分組與排序:

A.   Order by子句

B.   Group by子句與統(tǒng)計查詢

C.   優(yōu)化統(tǒng)計查詢:內(nèi)連接,外連接

5.   參數(shù)綁定:和jdbc一樣,對hibernate的參數(shù)綁定提供了豐富的支持。

第三點(diǎn):緩存

運(yùn)行機(jī)制:

介于應(yīng)用程序和物理數(shù)據(jù)源之間,其作用是為了降低應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源訪問的頻數(shù),從而提高運(yùn)行性能。

緩存被廣泛應(yīng)用的用于優(yōu)化數(shù)據(jù)庫。當(dāng)一些數(shù)據(jù)被從數(shù)據(jù)庫中讀取出來的時候,我們可以把它們放到緩存里。這樣我們可以再次使用的時候直接從緩存中取出來,這樣我們的效率就提高了很多。

控制范圍:

一級緩存是session對象的生命周期通常對應(yīng)的一個數(shù)據(jù)庫事務(wù)或者一個應(yīng)用事務(wù),它是事務(wù)范圍內(nèi)的緩存

二級緩存是一個可插拔的緩存插件,它是由SessionFactory負(fù)責(zé)管理。由于SessionFactory對象的生命周期和應(yīng)用程序的整個過程對應(yīng),所以二級緩存是進(jìn)城范圍或者集群范圍內(nèi)的緩存。用于初始化很少更改的數(shù)據(jù)、不重要的數(shù)據(jù),不會并發(fā)訪問的數(shù)據(jù)。

 

Hibernate緩存的一些問題和建議:hibernate的緩存

第四點(diǎn):捉取策略

1.  捉取優(yōu)化:Hibernate在關(guān)聯(lián)關(guān)系之間進(jìn)行導(dǎo)航,充分利用Hibernate提供的技術(shù)

2.  如何捉取

立即捉取:當(dāng)捉取宿主對象時,同時捉取其相關(guān)對象和關(guān)聯(lián)集以及屬性

延遲加載:當(dāng)捉宿主對象時,并不捉取其關(guān)聯(lián)對象,而是當(dāng)對其對象進(jìn)行調(diào)用時才加載。

3.  捉取粒度:設(shè)置捉取個數(shù)

第五點(diǎn):批量數(shù)據(jù)處理(修改和刪除)

在Hibernate2中,如果需要對任何數(shù)據(jù)進(jìn)行修改和刪除操作都需要先執(zhí)行查詢操作,在得到數(shù)據(jù)后才進(jìn)行修改和刪除。

1.  不適用Hibernate API而是直接使用JDBC  API來做原生態(tài)SQL語句進(jìn)行查詢,這種方法比較好,相對來說較快。

2.  運(yùn)用存儲過程

3.  一定量范圍內(nèi)可以使用hibernate API,但是特大數(shù)據(jù)量不行。

第六點(diǎn):結(jié)果集的使用:

     結(jié)果集的使用:list()和iterator()區(qū)別

查詢方式:

list只能利用查詢緩存(但在交易系統(tǒng)中查詢緩存作用不大),無法利用二級緩存中的單個實體,但是list查出的對象會寫入二級緩存,但它一般只生成較少的sql語句,很多情況就是一條。

iterator則利用二級緩存,對于一條查詢語句,它會先從數(shù)據(jù)庫中找到所有符合條件的記錄的ID,在通過ID去緩存找,對于緩存中沒有的記錄,在構(gòu)造語句從數(shù)據(jù)庫查出,第一次的執(zhí)行會產(chǎn)生N+1條SQL語句。

產(chǎn)生結(jié)果:

用list可能會溢出

通過Iterator,配合緩存管理API,在海量數(shù)據(jù)查詢中可以很好的解決內(nèi)存問題。

綜合考慮

一般List會填充二級緩存,卻不能利用二級緩存,而Iterator可以讀二級緩存,然而無法命中的話,效率很低效。一般處理方法,就是第一次查詢使用list,隨后使用iterator查詢。

總結(jié)

 

Hibernate優(yōu)化總結(jié)還有主配置、方法選用、事物控制沒有涉及到,因為它們相對來說這些方面比較簡單,但是還是很重要的。

在實施一個項目的時候我們沒有必要想這些問題,做項目的時候第一步運(yùn)行起來,第二步優(yōu)化一下。在很多小型項目中第二步一般都不會去做,所以說我們做工程的時候還是要牢記運(yùn)行出來,假如自己作為研究或者這個問題比較嚴(yán)重的話我們才考慮優(yōu)化。

Hibernate調(diào)優(yōu)方面沒有最有只有更優(yōu),讓我們不斷積極找到優(yōu)化的方法,來優(yōu)化我們的程序,來優(yōu)化我們自己。

關(guān)于Hibernate優(yōu)化方面,希望大家留下寶貴的意見,多對交流!

posted @ 2012-07-12 13:15 tbwshc| 編輯 收藏

Sql Server臨時表的生存周期可能很多人都不是非常了解,下文就為您介紹Sql Server臨時表的生存周期,供您參考,希望對您能有所幫助。

局部臨時表#temp_table:
只在當(dāng)前會話結(jié)有效。會話終止則生存終止。
根據(jù)session不同開辟不一樣的內(nèi)存存放數(shù)據(jù)。
相同session的用戶可以使用同一張臨時表,只能create table 一次。
不同session建的臨時表,即使表名相同,指向的內(nèi)存也是不一樣的,互相內(nèi)容不可見。

全局臨時表##temp_table:
顧名思義,不同的session可以使用同一塊內(nèi)存。但是其中的內(nèi)容到底什么時候才被回收呢?

自己做了一個測試,結(jié)果用小白文說起來就是:
只要有任何session用到過這個表,且這些session沒有被全部終止,就不被回收。
所謂session終止,我的理解,就sqlserver本身來說就是query窗體被關(guān)掉。如果是因為有應(yīng)用程序連接而產(chǎn)生的session的話(以上所說的session都是sqlserver的session),web系就是session重啟(IIS application pool重啟,這里所說的session是http的session),應(yīng)用系的話就是充啟應(yīng)用程序了(←猜想,沒試過)。

下面是網(wǎng)上找的,tb概括一下機(jī)能就是,創(chuàng)建一個不被自動回收的全局臨時表。沒有經(jīng)過測試,雖然貌似看上去沒啥意義,和常規(guī)表有什么區(qū)別?說不定以后有用,所以還是記下來:
USE master;
GO
IF OBJECT_ID('dbo.sp_Globals') IS NOT NULL
  DROP PROC dbo.sp_Globals
GO
CREATE proc dbo.sp_Globals
AS
CREATE TABLE ##Globals
(
id varchar(36) NOT NULL PRIMARY KEY
value varchar(500)
)
GO
↑sp內(nèi)容

EXEC dbo.sp_procoption 'dbo.sp_Globals','startup','true';

只有顯示刪除##Globals才會被清除

以上Sql Server臨時表的生存周期的介紹。

posted @ 2012-07-08 10:53 tbwshc 閱讀(935) | 評論 (0)編輯 收藏

Oracle臨時表在實際開發(fā)中的應(yīng)用是本文我們主要要介紹的內(nèi)容,我們知道,SQL Server 在編寫查詢式的存儲過程的時候,一直都令我為之贊嘆。Create procedure ps_procedure_name as select * from table; Select查詢語句可以作為SQL Server存儲過程的一部分,直接返回結(jié)果集。但在Oracle實現(xiàn)這種形式的存儲過程是不合語法的。

為了達(dá)到這種目的,我們需要使用Oracle臨時表(這是其中一種解決方案)。

Oracle數(shù)據(jù)庫除了可以保存永久表外,還可以建立臨時表temporary tables。Oracle臨時表分為會話級臨時表(ON COMMIT PRESERVE ROWS)和事務(wù)級臨時表(ON COMMIT DELETE ROWS)。tb會話級臨時表是指臨時表中的數(shù)據(jù)只在會話生命周期之中存在,當(dāng)用戶退出會話結(jié)束的時候,Oracle自動清除臨時表中數(shù)據(jù)。

事務(wù)級臨時表是指臨時表中的數(shù)據(jù)只在事務(wù)生命周期中存在。當(dāng)一個事務(wù)結(jié)束(commit or rollback),Oracle自動清除臨時表中數(shù)據(jù)。臨時表中的數(shù)據(jù)只對當(dāng)前Session有效,每個Session都有自己的臨時數(shù)據(jù),并且不能訪問其它Session的臨時表中的數(shù)據(jù)。

//在數(shù)據(jù)庫建立一個臨時表:

 

  1. CREATE GLOBAL TEMPORARY TABLE ESPS.ESPS_EMP_RANK_TEMP  
  2. (  
  3. COM                VARCHAR2(20 BYTE),  
  4. EMPNO             VARCHAR2(20 BYTE),  
  5. EMPNAME          VARCHAR2(100 BYTE),  
  6. DEPTNAME         VARCHAR2(300 BYTE),  
  7. AMOUNT            NUMBER,  
  8. APPROVED_AMOUNT  NUMBER,  
  9. FOLDING_AMOUNT   NUMBER,  
  10. BENEFIT          NUMBER,  
  11. EXECUTED_RATE    NUMBER,  
  12. FOLDING_RANK     NUMBER,  
  13. BENEFIT_RANK     NUMBER,  
  14. RANK             NUMBER,  
  15. TOTAL_RANK       NUMBER  
  16. )  
  17. //ON COMMIT PRESERVE ROWS         --這里代表的是事務(wù)級臨時表  
  18. ON COMMIT PRESERVE ROWS          --這里代表的是會話級臨時表 

 

在實際的操作中,我就驗證過上面所說的。一開始我使用了事務(wù)級臨時表,將數(shù)據(jù)插入到臨時表時,使用commit操作,結(jié)果臨時表的內(nèi)容清空了。例如是:INSERT INTO ESPS_EMP_RANK_TEMP select * from table;commint;執(zhí)行這兩段SQL后,相當(dāng)于沒有插入數(shù)據(jù)。

如果我們使用會話級臨時表,即使使用了commit,臨時表中的內(nèi)容還是存在的。直到會話斷開時,臨時表中的內(nèi)容才真正的清空。所以,在實際的開發(fā)過程中,我們因該結(jié)合場景,使用不同類型的臨時表。

在建議提案系統(tǒng)開發(fā)的過程中,我使用了會話級的臨時表。將查詢的數(shù)據(jù)插入到臨時表中,并且讀取臨時表的內(nèi)容,會話斷開時,臨時表中的內(nèi)容自動清空。 

在C#里面調(diào)用的三大步驟:

//C#里面定義的一個String類型的變量,存儲一段動態(tài)SQL,存儲過程為:

  1. ESPS_EMP_RANK_STATISTIS({0},'{1}')  
  2. public static string I_EMP_RANK_STATISTIS = "BEGIN ESPS_EMP_RANK_STATISTIS({0},'{1}'); END;"

 

//執(zhí)行存儲過程,把結(jié)果集插入到臨時表ESPS_EMP_RANK_TEMP

 

  1. WAF.COM.Core.OracleHelper. ExecuteNonQuery(conn, CommandType.Text, string.Format(SqlCollector.I_EMP_RANK_STATISTIS, 2,’2011’)); 

 

//讀取臨時表中保存的結(jié)果集

 

  1. Oracle DataReader dr = WAF.COM.Core.OracleHelper. ExecuteReader(“select * from ESPS_EMP_RANK_TEMP”) 

 

關(guān)于Oracle臨時表在實際開發(fā)中的應(yīng)用的相關(guān)知識就介紹到這里了,希望本次介紹能夠?qū)δ兴斋@!

posted @ 2012-07-08 10:49 tbwshc 閱讀(957) | 評論 (0)編輯 收藏

Oracle數(shù)據(jù)庫創(chuàng)建臨時表的過程以及和SQL Server臨時表的不同點(diǎn)的對比的相關(guān)知識是本文我們主要要介紹的內(nèi)容,接下來就讓我們一起來了解一下這部分內(nèi)容吧,希望能夠?qū)δ兴鶐椭?/p>

1.簡介

Oracle數(shù)據(jù)庫除了可以保存永久表外,還可以建立臨時表temporary tables。這些臨時表用來保存一個會話SESSION的數(shù)據(jù),或者保存在一個事務(wù)中需要的數(shù)據(jù)。當(dāng)會話退出或者用戶提交commit和回滾rollback事務(wù)的時候,臨時表的數(shù)據(jù)自動清空,但是臨時表的結(jié)構(gòu)以及元數(shù)據(jù)還存儲在用戶的數(shù)據(jù)字典中。

2.詳細(xì)介紹

Oracle臨時表分為會話級臨時表和事務(wù)級臨時表。

會話級臨時表是指臨時表中的數(shù)據(jù)只在會話生命周期之中存在,當(dāng)用戶退出會話結(jié)束的時候,Oracle自動清除臨時表中數(shù)據(jù)。

事務(wù)級臨時表是指臨時表中的數(shù)據(jù)只在事務(wù)生命周期中存在。當(dāng)一個事務(wù)結(jié)束(commit or rollback),Oracle自動清除臨時表中數(shù)據(jù)。

臨時表中的數(shù)據(jù)只對當(dāng)前Session有效,每個Session都有自己的臨時數(shù)據(jù),并且不能訪問其它Session的臨時表中的數(shù)據(jù)。因此,臨時表不需要DML鎖。

當(dāng)一個會話結(jié)束(用戶正常退出 用戶不正常退出 ORACLE實例崩潰)或者一個事務(wù)結(jié)束的時候,Oracle對這個會話的表執(zhí)行 TRUNCATE 語句清空臨時表數(shù)據(jù).但不會清空其它會話臨時表中的數(shù)據(jù).

你可以索引臨時表和在臨時表基礎(chǔ)上建立視圖.同樣,建立在臨時表上的索引也是臨時的,也是只對當(dāng)前會話或者事務(wù)有效. 臨時表可以擁有觸發(fā)器.

3.建立臨時表

臨時表的定義對所有會話SESSION都是可見的,但是表中的數(shù)據(jù)只對當(dāng)前的會話或者事務(wù)有效.

建立方法:

  1. 1) ON COMMIT DELETE ROWS 定義了建立事務(wù)級臨時表的方法.  
  2. CREATE GLOBAL TEMPORARY TABLE admin_work_area  
  3. (startdate DATE,  
  4. enddate DATE,  
  5. class CHAR(20))  
  6. ON COMMIT DELETE ROWS;  
  7. EXAMPLE:  
  8. SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area  
  9. 2 (startdate DATE,  
  10. 3 enddate DATE,  
  11. 4 class CHAR(20))  
  12. 5 ON COMMIT DELETE ROWS;  
  13. SQL> create table permernate( a number);  
  14. SQL> insert into admin_work_area values(sysdate,sysdate,'temperary table');  
  15. SQL> insert into permernate values(1);  
  16. SQL> commit;  
  17. SQL> select * from admin_work_area;  
  18. SQL> select * from permernate;  
  19. A  
  20. 1  
  21. 2)ON COMMIT PRESERVE ROWS 定義了創(chuàng)建會話級臨時表的方法.  
  22. CREATE GLOBAL TEMPORARY TABLE admin_work_area  
  23. (startdate DATE,  
  24. enddate DATE,  
  25. class CHAR(20))  
  26. ON COMMIT PRESERVE ROWS;  
  27. EXAMPLE: 

 

會話1:

  1. SQL> drop table admin_work_area;  
  2. SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area  
  3. 2 (startdate DATE,  
  4. 3 enddate DATE,  
  5. 4 class CHAR(20))  
  6. 5 ON COMMIT PRESERVE ROWS;  
  7. SQL> insert into permernate values(2);  
  8. SQL> insert into admin_work_area values(sysdate,sysdate,'session temperary');  
  9. SQL> commit;  
  10. SQL> select * from permernate;  
  11. A  
  12. ----------  
  13. 1  
  14. 2  
  15. SQL> select * from admin_work_area;  
  16. STARTDATE ENDDATE CLASS  
  17. ---------- ---------- --------------------  
  18. 17-1?? -03 17-1?? -03 session temperary 

 

會話2:

  1. SQL> select * from permernate;  
  2. A  
  3. ----------  
  4. 1  
  5. 2  
  6. SQL> select * from admin_work_area;  
  7. 未選擇行. 

 

會話2看不見會話1中臨時表的數(shù)據(jù)。

4.Oracle臨時表和SQL Server臨時表異同

SQL Server也可以創(chuàng)建臨時表。臨時表與永久表相似,但臨時表存儲在tempdb中,當(dāng)不再使用時會自動刪除。

有本地和全局兩種類型的臨時表,二者在名稱、可見性和可用性上均不相同。本地臨時表的名稱以單個數(shù)字符號 (#) 打頭;它們僅對當(dāng)前的用戶連接是可見的;當(dāng)用戶從 Microsoft SQL Server實例斷開連接時被刪除。全局臨時表的名稱以數(shù)學(xué)符號 (##) 打頭,創(chuàng)建后對任何用戶都是可見的,當(dāng)所有引用該表的用戶從 SQL Server 斷開連接時被刪除。

SQL 語句使用 CREATE TABLE 語句中為 table_name 指定的名稱引用臨時表:

  1. CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)  
  2. INSERT INTO #MyTempTable VALUES (1) 

 

如果本地臨時表由存儲過程創(chuàng)建或由多個用戶同時執(zhí)行的應(yīng)用程序創(chuàng)建,則 SQL Server 必須能夠區(qū)分由不同用戶創(chuàng)建的表。為此,SQL Server 在內(nèi)部為每個本地臨時表的表名追加一個數(shù)字后綴。存儲在 tempdb 數(shù)據(jù)庫的 sysobjects 表中的臨時表,其全名由 CREATE TABLE 語句中指定的表名和系統(tǒng)生成的數(shù)字后綴組成。為了允許追加后綴,為本地臨時表指定的表名 table_name 不能超過116 個字符。

除非使用 DROP TABLE 語句顯式除去臨時表,否則臨時表將在退出其作用域時由系統(tǒng)自動除去:

當(dāng)存儲過程完成時,將自動除去在存儲過程中創(chuàng)建的本地臨時表。由創(chuàng)建表的存儲過程執(zhí)行的所有嵌套存儲過程都可以引用此表。但調(diào)用創(chuàng)建此表的存儲過程的進(jìn)程無法引用此表。

所有其它本地臨時表在當(dāng)前會話結(jié)束時自動除去。

全局臨時表在創(chuàng)建此表的會話結(jié)束且其它任務(wù)停止對其引用時自動除去。任務(wù)與表之間的關(guān)聯(lián)只在單個 Transact-SQL 語句的生存周期內(nèi)保持。換言之,當(dāng)創(chuàng)建全局臨時表的會話結(jié)束時,最后一條引用此表的Transact-SQL語句完成后,將自動除去此表。

例如,如果創(chuàng)建名為 employees 的表,則任何人只要在數(shù)據(jù)庫中有使用該表的安全權(quán)限就可以使用該表,除非它已刪除。如果創(chuàng)建名為 #employees 的本地臨時表,只有您能對該表執(zhí)行操作且在斷開連接時該表刪除。如果創(chuàng)建名為 ##employees 的全局臨時表,數(shù)據(jù)庫中的任何用戶均可對該表執(zhí)行操作。如果該表在您創(chuàng)建后沒有其他用戶使用,則當(dāng)您斷開連接時該表刪除。如果該表在您創(chuàng)建后有其他用戶使用,則 SQL Server在所有用戶斷開連接后刪除該表。

在存儲過程或觸發(fā)器中創(chuàng)建的本地臨時表與在調(diào)用存儲過程或觸發(fā)器之前創(chuàng)建的同名臨時表不同。如果查詢引用臨時表,而同時有兩個同名的臨時表,則不定義針對哪個表解析該查詢。tb嵌套存儲過程同樣可以創(chuàng)建與調(diào)用它的存儲過程所創(chuàng)建的臨時表同名的臨時表。嵌套存儲過程中對表名的所有引用都被解釋為是針對該嵌套過程所創(chuàng)建的表,例如:

 

  1. CREATE PROCEDURE Test2  
  2. AS  
  3. CREATE TABLE #t(x INT PRIMARY KEY)  
  4. INSERT INTO #t VALUES (2)  
  5. SELECT Test2Col = x FROM #t  
  6. GO  
  7. CREATE PROCEDURE Test1  
  8. AS  
  9. CREATE TABLE #t(x INT PRIMARY KEY)  
  10. INSERT INTO #t VALUES (1)  
  11. SELECT Test1Col = x FROM #t  
  12. EXEC Test2  
  13. GO  
  14. CREATE TABLE #t(x INT PRIMARY KEY)  
  15. INSERT INTO #t VALUES (99)  
  16. GO  
  17. EXEC Test1  
  18. GO  

 

下面是結(jié)果集:

  1. (1 row(s) affected)  
  2. Test1Col   
  3. -----------   
  4. 1   
  5. (1 row(s) affected)  
  6. Test2Col   
  7. -----------   

 

當(dāng)創(chuàng)建本地或全局臨時表時,CREATE TABLE 語法支持除 FOREIGN KEY 約束以外的其它所有約束定義。如果在臨時表中指定 FOREIGN KEY 約束,該語句將返回警告信息,指出此約束已被忽略,表仍會創(chuàng)建,但不具有 FOREIGN KEY 約束。在 FOREIGN KEY 約束中不能引用臨時表。

考慮使用表變量而不使用臨時表。當(dāng)需要在臨時表上顯式地創(chuàng)建索引時,或多個存儲過程或函數(shù)需要使用表值時,臨時表很有用。通常,表變量提供更有效的查詢處理。

和Oracle的不同點(diǎn):

1. SQL Server臨時表是一種”內(nèi)存表”,tb表是存儲在內(nèi)存中的.ORACLE臨時表除非執(zhí)行DROP TABLE,否則表定義會保留在數(shù)據(jù)字典中。

2. SQL Server臨時表不存在類似ORACLE臨時表事務(wù)級別上的功能。

3.SQL Server本地臨時表(#) 與 ORACLE的會話級別臨時表類似,但是在會話退出的時候,ORACLE不會刪除表。

4.SQL Server的全局臨時表(##) 是指多個連接共享同一片內(nèi)存.當(dāng)沒有指針引用該內(nèi)存區(qū)域時,SQL Server自動釋放全局臨時表。

5.由于Oracle不是一種內(nèi)存中的數(shù)據(jù)庫. 所以如果Oracle類似SQL Server 頻繁的對臨時表進(jìn)行建立和刪除,必定會影響性能.所以O(shè)racle會保留臨時表的定義直到用戶DROP TABLE。

6.在Oracle中,如果需要多個用戶共享一個表(類似SQL Server的全局臨時表##).則可以利用永久表,并且在表中添加一些可以唯一標(biāo)識用戶的列.利用觸發(fā)器和視圖.當(dāng)用戶退出的時候,根據(jù)該登陸用戶的唯一信息刪除相應(yīng)的表中的數(shù)據(jù). 這種方法給Oracle帶來了一定量的負(fù)載。

 

關(guān)于Oracle臨時表和SQL Server臨時表的不同點(diǎn)對比的相關(guān)知識就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

posted @ 2012-07-08 10:47 tbwshc 閱讀(889) | 評論 (0)編輯 收藏

Oracle臨時表可以說是提高數(shù)據(jù)庫處理性能的好方法,在沒有必要存儲時,只存儲在Oracle臨時表空間中。希望本文能對大家有所幫助。

1 、前言

 

Oracle Logo

目前所有使用 Oracle 作為數(shù)據(jù)庫支撐平臺的應(yīng)用,大部分?jǐn)?shù)據(jù)量比較龐大的系統(tǒng),即表的數(shù)據(jù)量一般情況下都是在百萬級以上的數(shù)據(jù)量。

當(dāng)然在 Oracle 中創(chuàng)建分區(qū)是一種不錯的選擇,但是當(dāng)你發(fā)現(xiàn)你的應(yīng)用有多張表關(guān)聯(lián)的時候,并且這些表大部分都是比較龐大,而你關(guān)聯(lián)的時候發(fā)現(xiàn)其中的某一張或者某幾張表關(guān)聯(lián)之后得到的結(jié)果集非常小并且查詢得到這個結(jié)果集的速度非常快,那么這個時候我考慮在 Oracle 中創(chuàng)建“臨時表”。

我對臨時表的理解:在 Oracle 中創(chuàng)建一張表,這個表不用于其他的什么功能,主要用于自己的軟件系統(tǒng)一些特有功能才用的,而當(dāng)你用完之后表中的數(shù)據(jù)就沒用了。 Oracle 的臨時表創(chuàng)建之后基本不占用表空間,如果你沒有指定臨時表(包括臨時表的索引)存放的表空的時候,你插入到臨時表的數(shù)據(jù)是存放在 ORACLE 系統(tǒng)的臨時表空間中( TEMP )。

2 、臨時表的創(chuàng)建

創(chuàng)建Oracle 臨時表,可以有兩種類型的臨時表:

會話級的臨時表

事務(wù)級的臨時表 。

1) 會話級的臨時表因為這這個臨時表中的數(shù)據(jù)和你的當(dāng)前會話有關(guān)系,當(dāng)你當(dāng)前SESSION 不退出的情況下,臨時表中的數(shù)據(jù)就還存在,而當(dāng)你退出當(dāng)前SESSION 的時候,臨時表中的數(shù)據(jù)就全部沒有了,當(dāng)然這個時候你如果以另外一個SESSION 登陸的時候是看不到另外一個SESSION 中插入到臨時表中的數(shù)據(jù)的。即兩個不同的SESSION 所插入的數(shù)據(jù)是互不相干的。當(dāng)某一個SESSION 退出之后臨時表中的數(shù)據(jù)就被截斷(truncate table ,即數(shù)據(jù)清空)了。會話級的臨時表創(chuàng)建方法:


Create Global Temporary 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 ;
2) 事務(wù)級臨時表是指該臨時表與事務(wù)相關(guān),當(dāng)進(jìn)行事務(wù)提交或者事務(wù)回滾的時候,臨時表中的數(shù)據(jù)將自行被截斷,其他的內(nèi)容和會話級的臨時表的一致(包括退出SESSION 的時候,事務(wù)級的臨時表也會被自動截斷)。事務(wù)級臨時表的創(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 ; 3) 兩中類型臨時表的區(qū)別

會話級臨時表采用 on commit preserve rows ;而事務(wù)級則采用 on commit delete rows ;用法上,會話級別只有當(dāng)會話結(jié)束臨時表中的數(shù)據(jù)才會被截斷,而且事務(wù)級臨時表則不管是 commit 、 rollback 或者是會話結(jié)束,tb臨時表中的數(shù)據(jù)都將被截斷

4 )什么時候使用臨時表

1 )、當(dāng)某一個 SQL 語句關(guān)聯(lián)的表在 2 張及以上,并且和一些小表關(guān)聯(lián)。可以采用將大表進(jìn)行分拆并且得到比較小的結(jié)果集合存放在臨時表中

2 )、程序執(zhí)行過程中可能需要存放一些臨時的數(shù)據(jù),這些數(shù)據(jù)在整個程序的會話過程中都需要用的等等。

3 . 例子:略

4 .臨時表的不足之處

1 )不支持 lob 對象,這也許是設(shè)計者基于運(yùn)行效率的考慮,但實際應(yīng)用中確實需要此功能時就無法使用臨時表了。

2 )不支持主外鍵關(guān)系

所以,由于以上原因,我們可以自己創(chuàng)建臨時表,以彌補(bǔ) oracle 臨時表的不足之處

上面的都是本人經(jīng)過測試的,但下面是在網(wǎng)上搜索到的方法,本人具體沒有測試過,不過覺得可行性很強(qiáng),有時間測試下

創(chuàng)建方法:

1 、以常規(guī)表的形式創(chuàng)建臨時數(shù)據(jù)表的表結(jié)構(gòu),但要在每一個表的主鍵中加入一個 SessionID 列以區(qū)分不同的會話。(可以有 lob 列和主外鍵)

2 、寫一個用戶注銷觸發(fā)器,在用戶結(jié)束會話的時候刪除本次會話所插入的所有記錄 (SessionID 等于本次會話 ID 的記錄 ) 。

3 、程序?qū)懭霐?shù)據(jù)時,要順便將當(dāng)前的會話 ID(SessionID) 寫入表中。

4 、程序讀取數(shù)據(jù)時,只讀取與當(dāng)前會話 ID 相同的記錄即可。

功能增強(qiáng)的擴(kuò)展設(shè)計:

1 、可以在數(shù)據(jù)表上建立一個視圖,視圖對記錄的篩選條件就是當(dāng)前會話的SessionID 。

2 、數(shù)據(jù)表中的SessionID 列可以通過Trigger 實現(xiàn),以實現(xiàn)對應(yīng)用層的透明性。

3 、高級用戶可以訪問全局?jǐn)?shù)據(jù),以實現(xiàn)更加復(fù)雜的功能。

擴(kuò)展臨時表的優(yōu)點(diǎn):

1 、實現(xiàn)了與Oracle 的基于會話的臨時表相同的功能。

2 、支持SDO_GEOMETRY 等lob 數(shù)據(jù)類型。

3 、支持表間的主外鍵連接,且主外鍵連接也是基于會話的。

4 、高級用戶可以訪問全局?jǐn)?shù)據(jù),以實現(xiàn)更加復(fù)雜的功能

 

posted @ 2012-07-07 13:26 tbwshc 閱讀(887) | 評論 (0)編輯 收藏

經(jīng)驗總結(jié):

聯(lián)機(jī)日志分為當(dāng)前聯(lián)機(jī)日志和非當(dāng)前聯(lián)機(jī)日志,非當(dāng)前聯(lián)機(jī)日志的損壞是比較簡單的,一般通過clear命令就可以解決問題。

損壞非當(dāng)前聯(lián)機(jī)日志:
1、啟動數(shù)據(jù)庫,遇到ORA-00312 or ORA-00313錯誤,如:
ORA-00313: open failed for members of log group 4 of tbhread 1
ORA-00312: online log 3 thread 1: '/opt/oracle/db04/oradata/ORCL/redo03.log'
從這里我們知道日志組1的數(shù)據(jù)文件損壞或丟失了
從報警文件可以看到更詳細(xì)的信息
2、查看V$log視圖:
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARC STATUS

---------- ---------- --- ----------------

1 54 YES INACTIVE

2 55 NO CURRENT

3 53 YES INACTIVE

可以知道,該組是非當(dāng)前狀態(tài),而且已經(jīng)歸檔。
3、用CLEAR命令重建該日志文件
SQL>alter database clear logfile group 3;
如果是該日志組還沒有歸檔,則需要用
SQL>alter database clear unarchived logfile group 3;
4、打開數(shù)據(jù)庫,重新備份數(shù)據(jù)庫
SQL>alter database open;
說明:
1)、如果損壞的是非當(dāng)前的聯(lián)機(jī)日志文件,一般只需要clear就可以重建該日志文件,但是如果該數(shù)據(jù)庫處于歸檔狀態(tài)但該日志還沒有歸檔,就需要強(qiáng)行clear。
2)、建議clear,特別是強(qiáng)行clear后作一次數(shù)據(jù)庫的全備份。
3)、此方法適用于歸檔與非歸檔數(shù)據(jù)庫。

損壞當(dāng)前聯(lián)機(jī)日志:

歸檔模式下當(dāng)前日志的損壞有兩種情況,
一、是數(shù)據(jù)庫是正常關(guān)閉,日志文件中沒有未決的事務(wù)需要實例恢復(fù),當(dāng)前日志組的損壞就可以直接用alter database clear unarchived logfile group n來重建。
二、是日志組中有活動的事務(wù),數(shù)據(jù)庫需要媒體恢復(fù),日志組需要用來同步,有兩種補(bǔ)救辦法
A. 最好的辦法就是通過不完全恢復(fù),可以保證數(shù)據(jù)庫的一致性,但是這種辦法要求在歸檔方式下,并且有可用的備份
B. 通過強(qiáng)制性恢復(fù),但是可能導(dǎo)致數(shù)據(jù)庫不一致。
下面分別用來說明這兩種恢復(fù)方法
5.1.2.1 通過備份來恢復(fù)
1、打開數(shù)據(jù)庫,會遇到一個類似的錯誤
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:ORACLEORADATATESTREDO01.LOG'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件

2、查看V$log,發(fā)現(xiàn)是當(dāng)前日志
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS
---------- ---------- -------- ----------------
1 1 NO CURRENT
2 2 YES INACTIVE
3 3 YES INACTIVE

3、發(fā)現(xiàn)clear不成功
SQL> alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 1
*
ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
ORA-00312: online log 1 thread 1: 'D:ORACLEORADATATESTREDO01.LOG'

4、拷貝有效的數(shù)據(jù)庫的全備份,并不完全恢復(fù)數(shù)據(jù)庫
可以采用獲取最近的SCN的辦法用until scn恢復(fù)或用until cnacel恢復(fù)
recover database until cancel
先選擇auto,盡量恢復(fù)可以利用的歸檔日志,然后重新
recover database until cancel
這次輸入cancel,完成不完全恢復(fù),也就是說恢復(fù)兩次。
如:
SQL> recover database until cancel;
Auto
……
SQL> recover database until cancel;
Cancel;
5、利用alter database open resetlogs打開數(shù)據(jù)庫
說明:
1、這種辦法恢復(fù)的數(shù)據(jù)庫是一致的不完全恢復(fù),會丟失當(dāng)前聯(lián)機(jī)日志中的事務(wù)數(shù)據(jù)
2、這種方法適合于歸檔數(shù)據(jù)庫并且有可用的數(shù)據(jù)庫全備份。
3、恢復(fù)成功之后,記得再做一次數(shù)據(jù)庫的全備份。
4、建議聯(lián)機(jī)日志文件一定要實現(xiàn)鏡相在不同的磁盤上,避免這種情況的發(fā)生,因為任何數(shù)據(jù)的丟失對于生產(chǎn)來說都是不容許的。

如果沒有備份,進(jìn)行強(qiáng)制性恢復(fù)
1、打開數(shù)據(jù)庫,會遇到一個類似的錯誤
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:ORACLEORADATATESTREDO01.LOG'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件

2、查看V$log,發(fā)現(xiàn)是當(dāng)前日志
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS
---------- ---------- -------- ----------------
1 1 NO CURRENT
2 2 YES INACTIVE
3 3 YES INACTIVE

3、發(fā)現(xiàn)clear不成功
SQL> alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 1
*
ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
ORA-00312: online log 1 thread 1: 'D:ORACLEORADATATESTREDO01.LOG'

4、把數(shù)據(jù)庫down掉
SQL>shutdown immediate

5、在init<sid>.ora中加入如下參數(shù)
_allow_resetlogs_corruption=TRUE

6、重新啟動數(shù)據(jù)庫,利用until cancel恢復(fù)
SQL>recover database until cancel;
Cancel
如果出錯,不再理會,發(fā)出
SQL>alter database open resetlogs;

7、數(shù)據(jù)庫被打開后,馬上執(zhí)行一個full export

8、shutdown數(shù)據(jù)庫,去掉_all_resetlogs_corrupt參數(shù)

9、重建庫

10、import并完成恢復(fù)

11、建議執(zhí)行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;
說明:
1、該恢復(fù)方法是沒有辦法之后的恢復(fù)方法,一般情況下建議不要采用,因為該方法可能導(dǎo)致數(shù)據(jù)庫的不一致
2、該方法也丟失數(shù)據(jù),但是丟失的數(shù)據(jù)沒有上一種方法的數(shù)據(jù)多,主要是未寫入數(shù)據(jù)文件的已提交或未提交數(shù)據(jù)。
3、建議成功后嚴(yán)格執(zhí)行以上的7到11步,完成數(shù)據(jù)庫的檢查與分析
4、全部完成后做一次數(shù)據(jù)庫的全備份
5、建議聯(lián)機(jī)日志文件一定要實現(xiàn)鏡相在不同的磁盤上,避免這種情況的發(fā)生,因為任何數(shù)據(jù)的丟失對于生產(chǎn)來說都是不容許的。

posted @ 2012-07-07 13:24 tbwshc 閱讀(186) | 評論 (0)編輯 收藏

僅列出標(biāo)題
共10頁: First 2 3 4 5 6 7 8 9 10 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲国产激情| 新67194成人永久网站| 亚洲美女在线看| 久久aⅴ国产紧身牛仔裤| 精品1区2区3区4区| 久久久九九九九| 亚洲精品美女免费| 欧美与黑人午夜性猛交久久久| 一色屋精品视频免费看| 国产精品一区二区三区成人| 夜久久久久久| 免费成人av在线| 欧美在线日韩精品| 亚洲一区二区3| 9久草视频在线视频精品| 欧美视频一区| 久久精品一本久久99精品| 欧美综合二区| 亚洲天堂成人| 在线综合亚洲欧美在线视频| 在线观看福利一区| 国内免费精品永久在线视频| 国产精品最新自拍| 欧美久久久久久久| 欧美揉bbbbb揉bbbbb| 美女脱光内衣内裤视频久久网站| 久久九九国产精品| 久久久久综合| 麻豆精品视频在线观看| 欧美在线一二三区| 久久狠狠婷婷| 美国成人直播| 欧美另类专区| 欧美日韩一区二区在线观看| 欧美日韩国产成人在线91| 欧美日韩中文在线观看| 国产精品福利av| 国产日韩视频| 在线观看精品视频| 99re6这里只有精品视频在线观看| 一本久道久久久| 日韩亚洲欧美在线观看| 亚洲自拍都市欧美小说| 欧美一区日本一区韩国一区| 久久精品亚洲精品国产欧美kt∨| 久久偷窥视频| 国产一区高清视频| 亚洲第一综合天堂另类专| 国产一区二区在线免费观看| 激情久久综艺| 亚洲欧美自拍偷拍| 亚洲字幕一区二区| 久久久噜噜噜久久狠狠50岁| 欧美电影免费观看大全| 国产精品久99| 18成人免费观看视频| 亚洲一区二区三区视频播放| 亚洲高清三级视频| 日韩亚洲欧美中文三级| 亚洲欧美中文在线视频| 欧美3dxxxxhd| 亚洲美女色禁图| 欧美一区二区私人影院日本| 欧美精品在线一区二区三区| 国产欧美日韩精品一区| 亚洲精品国产精品乱码不99| 1024国产精品| 国产欧美日韩中文字幕在线| 亚洲国产另类 国产精品国产免费| 日韩视频一区二区三区在线播放| 一区二区精品国产| 亚洲一区二区三区视频播放| 久久精品国产99| 亚洲精品视频免费观看| 亚洲欧美日韩国产精品| 欧美国产大片| 久久久人成影片一区二区三区观看 | 欧美精品一区二区三区在线看午夜| 欧美午夜国产| 亚洲激情偷拍| 久久午夜影视| 午夜在线精品| 一区二区三区产品免费精品久久75 | 亚洲每日更新| 国产一区二区成人| 亚洲欧美福利一区二区| 欧美成人午夜激情在线| 亚洲欧美综合一区| 欧美日韩另类一区| 最新亚洲激情| 猫咪成人在线观看| 久久精品在线免费观看| 亚洲精品中文字幕女同| 亚洲一区三区视频在线观看| 欧美日韩亚洲一区二区| 在线视频欧美日韩| 99在线精品视频在线观看| 久久久激情视频| 国产一区二区在线观看免费| 久久久免费观看视频| 久久9热精品视频| 国产一区二区三区四区在线观看 | 欧美精品在线网站| 久久躁日日躁aaaaxxxx| 国产精品入口| 亚洲欧美不卡| 在线亚洲欧美专区二区| 欧美日韩不卡视频| 亚洲一区二区在| 欧美1区2区| 性欧美长视频| 91久久国产精品91久久性色| 久久电影一区| 亚洲在线1234| 欧美日韩激情网| 一本色道久久综合亚洲精品婷婷 | 一本一本久久a久久精品牛牛影视| 国产精品一区二区三区四区| 亚洲第一综合天堂另类专| 麻豆国产精品一区二区三区| 亚洲欧美日产图| 欧美日韩国产三级| 亚洲国产精品综合| 永久免费毛片在线播放不卡| 亚洲欧美色一区| 欧美亚洲系列| 欧美日韩精品福利| 亚洲人成久久| 99这里只有久久精品视频| 久久综合图片| 欧美大片18| 亚洲精品视频啊美女在线直播| 久久美女性网| 免费一级欧美片在线观看| 国产欧美精品在线播放| 亚洲一区二区三区四区在线观看 | 亚洲大胆女人| 亚洲欧洲日韩综合二区| 免费精品99久久国产综合精品| 免费日韩视频| 亚洲欧洲日本国产| 模特精品裸拍一区| 老牛嫩草一区二区三区日本| 1024国产精品| 久久天天躁狠狠躁夜夜爽蜜月 | 亚洲精品一区二区三区樱花| 蜜臀99久久精品久久久久久软件| 美女亚洲精品| 国产欧美一区二区精品忘忧草| 亚洲男人的天堂在线aⅴ视频| 在线视频你懂得一区二区三区| 美国十次成人| 亚洲欧洲精品一区| 亚洲视频碰碰| 国产精品入口麻豆原神| 欧美在线观看一区二区| 久久亚洲私人国产精品va媚药| 亚洲第一在线视频| 国产精品国产a级| 久久麻豆一区二区| 日韩视频欧美视频| 久久精品女人天堂| 在线观看欧美日本| 欧美日韩免费观看一区三区| 一区二区免费看| 久久免费视频在线观看| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美高清视频免费观看| 欧美国产1区2区| 一区二区三区福利| 久久手机免费观看| 亚洲国产精品女人久久久| 欧美日韩1234| 午夜国产精品影院在线观看| 久久婷婷成人综合色| 亚洲理论在线| 国产精品资源在线观看| 久久深夜福利| 亚洲精品午夜| 久久亚洲私人国产精品va媚药| 亚洲一区二区三区色| 亚洲黄色免费电影| 国产精品女同互慰在线看| 免费的成人av| 亚洲视频中文字幕| 欧美激情导航| 久久精品国产2020观看福利| 亚洲激情中文1区| 欧美日韩在线播放一区二区| 久久久久久久综合色一本| 亚洲素人在线| 亚洲第一区在线| 久久久久久网址| 亚洲欧美一区二区三区在线| 亚洲理伦在线| 亚洲激情成人在线| 精品成人在线| 欧美午夜精品久久久久免费视| 欧美aa国产视频| 巨胸喷奶水www久久久免费动漫|