• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    一種PL/SQL程序包失效的解決方案

    2014-03-26 13:06:48彭秋生
    電子設(shè)計工程 2014年23期
    關(guān)鍵詞:常量會話全局

    彭秋生

    (廣東省郵政信息技術(shù)局 中國 廣州 510898)

    在應(yīng)用程序與數(shù)據(jù)庫交互的過程中,當(dāng)數(shù)據(jù)量較大時,通常都提倡盡可能地使用存儲過程(stored procedure),以減少交互過程產(chǎn)生的通信消耗。在oracle中,存儲過程主要是指使用PL/SQL語言編寫的子程序(subprogram),它包含了過程(procedures)、函數(shù)(function)和程序包(package,下文簡稱包)。在實(shí)際的程序設(shè)計過程中,程序員使用最多的就是程序包。這不僅因?yàn)榘哂心K化、信息隱藏、效率高等優(yōu)勢,更重要的是它具有面向?qū)ο蟪绦蛟O(shè)計語言的特點(diǎn)[1]。包將邏輯相關(guān)的變量、常量、自定義數(shù)據(jù)類型、過程、函數(shù)、游標(biāo)等PL/SQL塊和域元素組織封裝在一起,使用起來相當(dāng)簡潔和方便,與面向?qū)ο笾械念惥哂挟惽ぶ睢?/p>

    在使用包的過程中,很多人都會遇到的一個令人討厭的錯 誤 :“ORA-04068:existing state of packages has been discarded”。這個錯誤是Oracle認(rèn)為程序包狀態(tài)無效時拋出的。盡管oracle并不把它看作一種錯誤,而是更多地把它當(dāng)作一種警告[2],但它的危害不小,需要仔細(xì)研究并加以解決。

    1 錯誤的產(chǎn)生

    我們先模擬錯誤的產(chǎn)生,整個模擬過程不妨稱為“實(shí)驗(yàn)1”。

    在oracle數(shù)據(jù)庫中創(chuàng)建兩個包:pkg_con和 pkg_app,前者只有包說明(specification,即包頭),沒有包的實(shí)現(xiàn)(body,即包體);后者既有包說明,又有包體[3]。pkg_app引用了pkg_con中的常量值。兩個程序包的創(chuàng)建過程分別如下:

    SQL>create or replace package pkg_con as

    2 char_yes constant char:='2';

    3 end pkg_con;

    程序包已創(chuàng)建。

    SQL>create or replace package pkg_app as

    2 procedure prt;

    3 end pkg_app;

    程序包已創(chuàng)建。

    SQL>create or replace package body pkg_app as

    2 procedure prt is

    3 begin

    4 --輸出pkg_con中的值

    5 dbms_output.put_line(pkg_con.char_yes);

    6 end prt;

    7 end pkg_app;

    程序包主體已創(chuàng)建。

    顯然,剛剛新創(chuàng)建的兩個程序包狀態(tài)都是正常的,沒有任何問題。接下來在SQL*Plus中登錄兩個會話(session):會話A和會話B。會話B先連續(xù)一次或多次執(zhí)行包pkg_app的過程prt,都不會發(fā)生錯誤。若會話A重建pkg_con包,會話B再執(zhí)行過程pkg_app.prt,則會發(fā)生錯誤,如下實(shí)驗(yàn)1所示。

    會話A

    SQL>create or replace package pkg_con as

    2 char_yes constant char:= ‘2’;

    3 end pkg_con;

    程序包已創(chuàng)建。

    會話 B:

    SQL>exec pkg_app.prt;

    BEGIN pkg_app.prt; END;

    *

    ERROR位于第1行:

    ORA-04068:已丟棄程序包的當(dāng)前狀態(tài)

    ORA-04061:package“SCOTT.PKG_CON”的當(dāng)前狀態(tài)失效

    ORA-04065:未執(zhí)行,已更改或刪除 package"SCOTT.PKG_CON"

    ORA-06508:PL/SQL:無法在調(diào)用之前找到程序單元

    ORA-06512:在"SCOTT.PKG_APP",line 4

    ORA-06512:在line 1

    從oracle給出錯誤描述看,發(fā)生錯誤的原因是當(dāng)前執(zhí)行包的狀態(tài)失效了。包的狀態(tài)可以在user_objects數(shù)據(jù)字典視圖中查詢到[4]。如果在重建包pkg_con之后,立即查一下包pkg_app的狀態(tài),就會發(fā)現(xiàn)包體狀態(tài)已變成了無效(INVALID)。

    2 對象依賴與自動重新編譯機(jī)制

    正常情況下,除了本身的語法、語義問題,包失效最常見原因是它所引用的對象發(fā)生了變化,這是由oracle的對象依賴機(jī)制決定[5]。oracle數(shù)據(jù)字典會實(shí)時跟蹤各種對象以及對象之間相關(guān)性。包重建后,與之相關(guān)的其它對象的狀態(tài)會立即變?yōu)槭?;同時這種失效還會立即反映到其它會話中,導(dǎo)致其它會話中本地存儲的對象副本狀態(tài)也立即變?yōu)槭?。在?shí)驗(yàn)1中,包pkg_app引用了包pkg_con中的常量值,兩者之間存在依賴關(guān)系。會話A對包pkg_con進(jìn)行重建,數(shù)據(jù)字典實(shí)時跟蹤到這一情況,馬上將相關(guān)包pkg_app的狀態(tài)置為失效,同時立即找到pkg_app所在的會話B,將會話B中存儲在本地的副本也置為失效,最終導(dǎo)致了此次“ORA-04068”錯誤的發(fā)生。

    但是,從另一個方面來說,oracle是具有自動重新編譯機(jī)制的[5]。在執(zhí)行程序包之前,oracle會先檢查包的狀態(tài),若發(fā)現(xiàn)包的狀態(tài)為 “無效”(INVALID),oracle會自動先對包進(jìn)行重新編譯,再運(yùn)行程序包。若重新編譯成功,程序包仍會正確地運(yùn)行。如下實(shí)驗(yàn)2所示。

    會話A:

    SQL>create table test

    (cstm_id varchar2(10));

    表已創(chuàng)建。

    SQL>create package pkg_test as

    2 procedure insdata;

    3 end pkg_test;

    程序包已創(chuàng)建。

    SQL>create package body pkg_test as

    2 procedure insdata is

    3 begin

    4 insert into test values ('0001');

    5 commit;

    6 end insdata;

    7 end pkg_test;

    程序包主體已創(chuàng)建。

    會話B:

    SQL>exec pkg_test.insdata;

    PL/SQL過程已成功完成。

    會話A:

    SQL>alter table test add (cstm_nm varchar2(60));表已更改。

    會話B:

    SQL>select object_name, object_type,timestamp, status

    from user_objects where object_name='PKG_TEST';

    OBJECT_NAME OBJECT_TYPE STATUS

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

    PKG_TEST PACKAGE BODY INVALID

    SQL>exec pkg_test.insdata

    PL/SQL過程已成功完成。

    SQL>select object_name, object_type, status

    2 from user_objects where object_name='PKG_TEST';

    OBJECT_NAME OBJECT_TYPE STATUS

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

    PKG_TEST PACKAGE BODY VALID

    在上述實(shí)驗(yàn)2中,我們順序執(zhí)行了以下幾個步驟:

    1)會話A創(chuàng)建數(shù)據(jù)表 test和包pkg_test,包pkg_test包含一個過程insdata,往表test中插入一條記錄。顯然,包pkg_test是依賴于表test的。

    2)會話B執(zhí)行pkg_test.insdata往表 test中插入一條數(shù)據(jù),運(yùn)行正常。

    3)會話A更改test的表結(jié)構(gòu)。此時,包pkg_test的包體狀態(tài)變成了“無效”。

    4)會話B執(zhí)行pkg_test.insdata往表 test中插入一條數(shù)據(jù),運(yùn)行正常,沒有因?yàn)榘w失效而拋出“ORA-04068”錯誤。此時包體的時間戳已更新,表明包自動進(jìn)行了重新編譯。

    上述實(shí)驗(yàn)第3)4)步證實(shí)了oracle自動重編譯的機(jī)制的存在。但是,有了oracle自動重新編譯機(jī)制的保證,為什么實(shí)驗(yàn)1中還有報錯發(fā)生呢?這還與包的運(yùn)行機(jī)制以及包中的全局變量和全局常量有關(guān)。

    3 帶全局變量/常量的包重新編譯機(jī)制

    與單個SQL語句相對,包之所以運(yùn)行效率高,除了它大量減少了客戶端與服務(wù)器之間的通信等原因外,另外一個重要的原因是包執(zhí)行時不需要進(jìn)行語法檢查、語法檢查、中間代碼生成等解析過程。這一過程已經(jīng)在包創(chuàng)建時完成了,稱為包編譯過程。當(dāng)包第一次被調(diào)用(稱為實(shí)例化)時,oracle將從磁盤讀入該包的中間代碼并將其放入系統(tǒng)全局工作區(qū)(SGA)中的共享緩沖區(qū)(shared pool)[6],但是,包的運(yùn)行狀態(tài)(即變量和游標(biāo)信息)存放在用戶全局區(qū)(UGA)中的會話存儲區(qū)。這就保證了每個會話都有自己程序包運(yùn)行狀態(tài)的副本,即使不同的會話同時運(yùn)行同一個程序包,也能做到互不干擾。

    全局變量是指在包頭中聲明的變量,它作為程序包運(yùn)行狀態(tài)一部分,同樣存放在用戶全局區(qū)(UGA)的會話存儲區(qū)中,與會話具有相同的生命周期。在同一個會話中全局變量會維持它的最新值,但全局變量的值設(shè)置、修改、維護(hù)對其它的會話是不會有影響的。下面的實(shí)驗(yàn)3說明了這一情況。

    會話A:

    SQL>SQL>create or replace package pkg_add as

    2 g_num number:=100;

    3 procedure add_num;

    4 end pkg_add;

    程序包已創(chuàng)建。

    SQL>create or replace package body pkg_add as

    2 procedure add_num is

    3 begin

    4 g_num:=g_num+1;

    5 dbms_output.put_line( 'g_num='||g_num);

    6 end add_num;

    7 end pkg_add;

    程序包主體已創(chuàng)建。

    會話 B:

    SQL>set serverout on

    SQL>exec pkg_add.add_num;g_num=101

    PL/SQL過程已成功完成。

    會話 C:

    SQL>set serverout on

    SQL>exec pkg_add.add_num;

    g_num=101

    PL/SQL過程已成功完成。

    實(shí)驗(yàn)3中會話B修改了全局變量g_num的值對會話C沒有影響,因?yàn)槿肿兞吭诓煌臅捴斜4嬖诓煌臅挻鎯^(qū),有各自獨(dú)立的副本。

    但是,全局變量和全局常量有一個非常重要的特性:如果定義全局變量的包進(jìn)行了重建,那么這些全局變量的值將被重置為初始值。正是這個特性引起了“ORA-04068”錯誤,可以從兩個方面對此進(jìn)行說明。

    一方面,由于對象依賴關(guān)系,一旦全局變量/常量所在包進(jìn)行了重建,那么所有與這個包相關(guān)的包也會失效。當(dāng)再次執(zhí)行相關(guān)的包時,oracle會進(jìn)行自動重新編譯,這就意味其它會話要重新獲取全局變量的值。

    另外一方面,每個會話都是按自己的邏輯來處理各自會話存儲區(qū)中全局變量的值,而自動重編譯又會導(dǎo)致全局變量值的重新初始化,會覆蓋了本地的值。此時,oracle若再“默默”地自動重編譯,會導(dǎo)致本地全局變量的值變得不可控,因?yàn)樗辉偈且郧暗闹盗?,而是被重置成了初始值。因此,oracle必須采取拋出錯誤的辦法來顯式地通知用戶會話,否則,用戶沒辦法知道全局變量的值已發(fā)生了變化。從這個角度來說,認(rèn)為“ORA-04068”錯誤是一種警告而不是一種錯誤的觀點(diǎn)也是有道理的,它的確更多的像一種警告。

    4 解決辦法

    全局變量引起的錯誤影響可大可小,與所處理數(shù)據(jù)的重要性和數(shù)據(jù)量有關(guān)。如果“實(shí)驗(yàn)1”中過程pkg_app.prt是長時間的大量復(fù)雜的數(shù)據(jù)處理,會話B正好調(diào)用pkg_app.prt處理了一半的時候出錯,很可能會造成無法挽回的損失。在更壞情況下,若很多包都與全局變量或全局常量的所在包有依賴關(guān)系,同時都發(fā)生“ORA-04068”錯誤,可能產(chǎn)生災(zāi)難性的后果。

    事實(shí)上,實(shí)驗(yàn)1中是全局常量,不存在值不可控的問題,oracle完全可忽略這種錯誤繼續(xù)處理下去。另外一方面,在程序設(shè)計過程中,全局常量應(yīng)該考慮避開這種出錯的風(fēng)險。 因此在什么情況下使用全局變量,怎么避免或降低錯誤的發(fā)生,成為急需解決的問題。

    1)避免使用全局變量/常量,使用函數(shù)代替全局常量

    對于全局變量,應(yīng)該盡量避免使用。如果確實(shí)需要用到全局變量,可以考慮通過數(shù)據(jù)表記錄的方式來解決。把所有全局變量采取鍵值對的方式記錄在數(shù)據(jù)表中。每個會話每次操作前先去數(shù)據(jù)表查詢一下全局變量的最新值,操作完成后將新的結(jié)果更新到數(shù)據(jù)庫表。全局變量是會話級別的,同一個會話的一般不會產(chǎn)生并發(fā)操作,數(shù)據(jù)庫表記錄的方式能有效的實(shí)現(xiàn)全局常量的功能。但缺點(diǎn)是,多個會話同時進(jìn)行操作時,每個會話都需建立獨(dú)立的鍵值對,否則不同會話間會相互影響。

    對于全局常量,幾乎所有的系統(tǒng)都需要定義。如果系統(tǒng)中不允許定義常量,那么就會導(dǎo)致很差的代碼。但全局常量完全可以使用函數(shù)來替代,利用oracle自動重編機(jī)制來避免出現(xiàn)“ORA-04068”錯誤。我們將實(shí)驗(yàn)1中的pkg_con進(jìn)行改造,如下所示。

    SQL>create or replace package pkg_con as

    2 function char_yes return char;

    3 end pkg_con;

    程序包已創(chuàng)建。

    SQL>create or replace package body pkg_con as

    2 function char_yes return char is

    3 begin

    4 return'2';

    5 end char_yes;

    6 end pkg_con;

    程序包主體已創(chuàng)建。

    只要函數(shù)名與原全局常量名一樣,相關(guān)的引用包完全不需要做任何更改就可以繼續(xù)使用。改造后的pkg_con無論怎樣重建,pkg_app都能被oracle自動重編機(jī)制透明處理,不會出現(xiàn)任何問題。這種方法的缺點(diǎn)是要維護(hù)更多的代碼,不像全局常量那么簡潔。因此,可能需要對代碼改造的工作量需要進(jìn)行評估。若是系統(tǒng)中多處定義了全局常量,可能導(dǎo)致大量的代碼修改,這不是一蹴而就的事情。但這是一個一勞永逸的方案,即使在短時間內(nèi)無法全部改造完畢,也應(yīng)該把它作為一個“長治久安”的首選策略。

    2)集中定義全局變量和常量,盡量減少定義包的變動

    首先,全局變量和常量應(yīng)該全部集中定義,盡量定義在一個或幾個專用包中。這跟C語言中的頭文件有點(diǎn)類似。全局變量或常量的集中定義有利于變量(常量)地統(tǒng)一組織、管理和維護(hù),更重要的是能夠有效的降低“ORA-04068”錯誤發(fā)生的可能性。只有全局變量和常量的定義包發(fā)生變化才可能引發(fā)“ORA-04068”錯誤,其它引用包發(fā)生變化都會被oracle透明地自動重編譯處理。當(dāng)然,包頭中的函數(shù)或過程發(fā)生變化導(dǎo)致自動重編譯失敗時例外。集中定義的另一個好處就是用戶明確知道他正在修改的包是一個全局變量和常量定義包,必須記得而不是忘記對相關(guān)的引用包進(jìn)行處理。

    其次,全局變量或常量定義包應(yīng)該避免頻繁的變動。全局變量/常量定義包的變化必然會導(dǎo)致引用包的失效,需要對所有這些引用包進(jìn)行重新編譯處理。而集中定義的結(jié)果會導(dǎo)致同一個定義包的引用包數(shù)量增多,影響加大,定義包變動導(dǎo)致需要重新編譯的包的數(shù)量也更多,工作量也很大。因此,最好能一次性定義好所有的全局變量和常量,盡量減少定義包的變動。

    3)監(jiān)測ORA-0408錯誤并重新執(zhí)行包的存儲過程

    這個解決方法將處理錯誤的責(zé)任放到了客戶端。它的思想是Oracle生成錯誤ORA-04068給客戶端時提供了關(guān)于包狀態(tài)已經(jīng)失效的信息,由客戶端來監(jiān)測這個錯誤以及做出反應(yīng)??蛻舳丝梢赃x擇重新執(zhí)行這個存儲過程,如果它需要的話。這與oracle的建議是一致的。這里不再舉例說明。當(dāng)然,我們也可以考慮將包的調(diào)用處理封裝成一個獨(dú)立的過程或函數(shù)(c++/java中為類),專門對發(fā)生此類錯誤的包進(jìn)行重新執(zhí)行處理,以供其它過程或函數(shù)進(jìn)行透明調(diào)用。值得注意的是,程序員應(yīng)該對包重新執(zhí)行的可行性有充分的考慮,畢竟并不是所有的包在所有的情況下都是可重復(fù)執(zhí)行的。

    5 結(jié)束語

    本文由淺入深對全局變量引起包失效的錯誤原因進(jìn)行了較為深入的剖析,它不僅與oracle的對象依賴機(jī)制有關(guān),還與自動重編機(jī)制以及程序包的運(yùn)行機(jī)制有關(guān)。 針對這種錯誤,本文提出了幾種可行的解決方法,每一個解決方法都有各自的優(yōu)點(diǎn)和不足,多種方法相結(jié)合才能達(dá)到滿意的效果。對于新開發(fā)的程序包,應(yīng)盡量避免使用全局變量,使用函數(shù)來代替全局常量;對于現(xiàn)有的程序包,應(yīng)逐步實(shí)施代碼改造,同時密切監(jiān)控錯誤的發(fā)生、定期檢測失效的程序包并自動進(jìn)行重新編譯處理。

    [1]Feuerstein S,Pribyl B.Oracle PL/SQL程序設(shè)計[M].張曉明譯.5版.北京:人民郵電出版社,2011:593-594.

    [2]chinak62.重編譯定義全局變量的包引發(fā)的ora-04068錯誤[EB/OL]. (2010) http://blog.itpub.net/180324/viewspace-660315/.

    [3]Russell J,Portfolio T.PL/SQL User’s Guide and Reference Release 2(9.2)[M].California:Oracle Corporation,2002.

    [4]蓋國強(qiáng).深入淺出Oracle-DBA入門、進(jìn)階與診斷案例[M].北京:人民郵電出版社,2006:99-101.

    [5]Mcdonald C.精通Oracle PL/SQL[M].蔡偉毅,譯.北京:人民郵電出版社,2009:47-53.

    [6]Alapati S R.Oracle10g數(shù)據(jù)庫管理藝術(shù)[M].鐘鳴,等譯.北京:人民郵電出版社,2007.

    猜你喜歡
    常量會話全局
    Cahn-Hilliard-Brinkman系統(tǒng)的全局吸引子
    科學(xué)照亮世界
    ——卡文迪什測定萬有引力常量
    量子Navier-Stokes方程弱解的全局存在性
    落子山東,意在全局
    金橋(2018年4期)2018-09-26 02:24:54
    有意冒犯性言語的會話含義分析
    漢語教材中的會話結(jié)構(gòu)特征及其語用功能呈現(xiàn)——基于85個會話片段的個案研究
    低氧低分壓環(huán)境下泡塑吸附火焰原子吸收光譜法測定常量金
    西藏科技(2015年1期)2015-09-26 12:09:20
    新思路:牽一發(fā)動全局
    沖突語的會話分析研究
    對外漢語課堂英語通用語的會話調(diào)整功能
    亚洲欧美日韩东京热| av天堂在线播放| av在线观看视频网站免费| 国产精品人妻久久久影院| 久久天躁狠狠躁夜夜2o2o| 美女高潮的动态| 亚洲在线自拍视频| 亚洲经典国产精华液单| 五月伊人婷婷丁香| 欧美成人性av电影在线观看| 中文字幕免费在线视频6| 欧美人与善性xxx| 波多野结衣高清无吗| 99热只有精品国产| www.www免费av| 亚洲人成网站在线播| 欧美+日韩+精品| 日韩欧美国产一区二区入口| 免费看美女性在线毛片视频| 男人狂女人下面高潮的视频| 搞女人的毛片| 亚洲乱码一区二区免费版| 日本精品一区二区三区蜜桃| 乱人视频在线观看| 真人一进一出gif抽搐免费| 无人区码免费观看不卡| 国产成人a区在线观看| 99视频精品全部免费 在线| 亚洲美女视频黄频| www.www免费av| 国产久久久一区二区三区| 少妇熟女aⅴ在线视频| 日韩欧美精品v在线| 九色成人免费人妻av| 亚洲最大成人手机在线| 大又大粗又爽又黄少妇毛片口| 九九在线视频观看精品| 国产亚洲91精品色在线| 国产精品嫩草影院av在线观看 | 12—13女人毛片做爰片一| 精品乱码久久久久久99久播| 午夜精品在线福利| 亚洲在线观看片| 国产极品精品免费视频能看的| 国产精品一及| av女优亚洲男人天堂| 久久久精品大字幕| 成人国产一区最新在线观看| 俄罗斯特黄特色一大片| 精品日产1卡2卡| 欧美+日韩+精品| 国产精品无大码| 欧美性感艳星| 欧美中文日本在线观看视频| 免费看光身美女| 深夜a级毛片| 国产黄色小视频在线观看| 色视频www国产| 亚洲无线观看免费| 18禁黄网站禁片免费观看直播| 一个人免费在线观看电影| 国产视频内射| netflix在线观看网站| 亚洲av中文av极速乱 | 欧美日韩瑟瑟在线播放| 亚洲国产精品sss在线观看| 天美传媒精品一区二区| 免费看日本二区| 熟妇人妻久久中文字幕3abv| 国产一区二区三区av在线 | 有码 亚洲区| 能在线免费观看的黄片| 国产伦在线观看视频一区| 亚洲专区中文字幕在线| 少妇高潮的动态图| 日韩精品有码人妻一区| 午夜福利欧美成人| 欧美bdsm另类| АⅤ资源中文在线天堂| 亚洲精品国产成人久久av| 啪啪无遮挡十八禁网站| 麻豆精品久久久久久蜜桃| 又爽又黄a免费视频| 亚洲成av人片在线播放无| 国产在线男女| 日本一二三区视频观看| 男女视频在线观看网站免费| 一本一本综合久久| x7x7x7水蜜桃| 欧美国产日韩亚洲一区| 免费av观看视频| 国产高清不卡午夜福利| 日本免费一区二区三区高清不卡| 日韩精品有码人妻一区| 综合色av麻豆| 久久久久国内视频| 亚洲一区高清亚洲精品| 啦啦啦观看免费观看视频高清| 欧美不卡视频在线免费观看| 91午夜精品亚洲一区二区三区 | 成人av在线播放网站| 天堂影院成人在线观看| 18+在线观看网站| 日韩国内少妇激情av| 可以在线观看的亚洲视频| 亚洲第一电影网av| 人妻制服诱惑在线中文字幕| 亚洲美女黄片视频| 国产精品免费一区二区三区在线| 少妇裸体淫交视频免费看高清| 无人区码免费观看不卡| 欧美色视频一区免费| 久久九九热精品免费| 色精品久久人妻99蜜桃| 很黄的视频免费| 真实男女啪啪啪动态图| 九九在线视频观看精品| 丰满的人妻完整版| 少妇的逼好多水| 在线观看午夜福利视频| 亚洲国产色片| 久久精品国产99精品国产亚洲性色| 午夜视频国产福利| 麻豆成人av在线观看| 999久久久精品免费观看国产| 久久精品人妻少妇| 亚洲av.av天堂| 狠狠狠狠99中文字幕| 热99re8久久精品国产| 精品一区二区三区av网在线观看| 亚洲欧美日韩东京热| 嫩草影视91久久| 在线免费观看的www视频| 两个人视频免费观看高清| 久久精品国产亚洲网站| 99精品在免费线老司机午夜| 日本成人三级电影网站| 少妇人妻一区二区三区视频| 亚洲精品国产成人久久av| 久久久色成人| 九色国产91popny在线| 看十八女毛片水多多多| av中文乱码字幕在线| 日韩欧美一区二区三区在线观看| 国产乱人伦免费视频| 无遮挡黄片免费观看| 亚洲无线在线观看| 久久久久国内视频| 人妻少妇偷人精品九色| 无人区码免费观看不卡| 亚洲不卡免费看| 又黄又爽又刺激的免费视频.| 亚洲欧美日韩东京热| 日韩精品青青久久久久久| 日本精品一区二区三区蜜桃| 亚洲五月天丁香| 性欧美人与动物交配| 日韩在线高清观看一区二区三区 | 一级a爱片免费观看的视频| 我要看日韩黄色一级片| 亚洲四区av| 国内久久婷婷六月综合欲色啪| 国产伦一二天堂av在线观看| 22中文网久久字幕| 欧美精品国产亚洲| 国模一区二区三区四区视频| 亚洲一区高清亚洲精品| 又黄又爽又免费观看的视频| 亚洲av免费在线观看| bbb黄色大片| 免费看光身美女| 免费不卡的大黄色大毛片视频在线观看 | 国产精品电影一区二区三区| 久久热精品热| 中国美女看黄片| 可以在线观看毛片的网站| 亚洲乱码一区二区免费版| 一边摸一边抽搐一进一小说| 搞女人的毛片| 亚洲国产欧美人成| 中文字幕人妻熟人妻熟丝袜美| 国内少妇人妻偷人精品xxx网站| 男女之事视频高清在线观看| 成人欧美大片| 久久婷婷人人爽人人干人人爱| 人妻少妇偷人精品九色| 看十八女毛片水多多多| 听说在线观看完整版免费高清| 亚洲av电影不卡..在线观看| 成人国产一区最新在线观看| 国产精品久久久久久av不卡| 亚洲性久久影院| www.色视频.com| 一进一出抽搐动态| 看十八女毛片水多多多| 18禁在线播放成人免费| 99热精品在线国产| 久久婷婷人人爽人人干人人爱| 国产成人aa在线观看| 看免费成人av毛片| 最近视频中文字幕2019在线8| 欧洲精品卡2卡3卡4卡5卡区| 国产精品久久久久久亚洲av鲁大| 国产成人影院久久av| 人人妻人人看人人澡| 国产主播在线观看一区二区| 国产成人aa在线观看| 国产乱人伦免费视频| 亚洲国产欧美人成| 久久久久久久亚洲中文字幕| 久久精品久久久久久噜噜老黄 | 色在线成人网| 国产精品嫩草影院av在线观看 | 国产精品爽爽va在线观看网站| 精品久久久久久成人av| 婷婷精品国产亚洲av在线| 国产精品久久视频播放| 成人欧美大片| 国产三级在线视频| 亚洲av一区综合| 熟女人妻精品中文字幕| 老司机深夜福利视频在线观看| 搡老岳熟女国产| 亚洲精品久久国产高清桃花| av专区在线播放| 神马国产精品三级电影在线观看| 91在线精品国自产拍蜜月| 亚洲精品乱码久久久v下载方式| 国产视频一区二区在线看| 国产精品人妻久久久影院| 很黄的视频免费| 亚洲成av人片在线播放无| av在线观看视频网站免费| а√天堂www在线а√下载| 人妻久久中文字幕网| 亚洲av二区三区四区| 精品乱码久久久久久99久播| 国产精华一区二区三区| 亚洲在线自拍视频| av中文乱码字幕在线| 日本a在线网址| 久久久久精品国产欧美久久久| 九九在线视频观看精品| 精品久久国产蜜桃| 三级毛片av免费| 免费av观看视频| 亚洲美女黄片视频| 亚洲aⅴ乱码一区二区在线播放| 亚洲美女搞黄在线观看 | 三级国产精品欧美在线观看| 男女边吃奶边做爰视频| 极品教师在线视频| 永久网站在线| 国产精品精品国产色婷婷| 婷婷丁香在线五月| 国内精品一区二区在线观看| 久久久久久伊人网av| 中国美女看黄片| 精品久久久久久成人av| 黄色日韩在线| 五月玫瑰六月丁香| 99在线视频只有这里精品首页| 窝窝影院91人妻| 大型黄色视频在线免费观看| 久久精品综合一区二区三区| aaaaa片日本免费| 久久精品国产亚洲av涩爱 | 小蜜桃在线观看免费完整版高清| 国产三级在线视频| 欧美zozozo另类| 中文字幕人妻熟人妻熟丝袜美| 色哟哟哟哟哟哟| 嫩草影院精品99| 亚洲精品456在线播放app | 日本 欧美在线| 亚洲在线观看片| 自拍偷自拍亚洲精品老妇| 欧美黑人巨大hd| 日韩大尺度精品在线看网址| 亚洲美女黄片视频| 最近最新免费中文字幕在线| 国产精品野战在线观看| 男人舔奶头视频| 91在线精品国自产拍蜜月| 久久久久久久久久久丰满 | 久久精品影院6| 午夜激情欧美在线| 国语自产精品视频在线第100页| 天堂√8在线中文| 午夜激情欧美在线| 亚洲av五月六月丁香网| 男女做爰动态图高潮gif福利片| 亚洲国产高清在线一区二区三| 人妻夜夜爽99麻豆av| 我的女老师完整版在线观看| 亚洲最大成人手机在线| 精品久久久噜噜| 国产一级毛片七仙女欲春2| 一级a爱片免费观看的视频| 国产精品日韩av在线免费观看| 欧美色欧美亚洲另类二区| 免费看光身美女| 色吧在线观看| 能在线免费观看的黄片| 国产精品99久久久久久久久| 成人国产麻豆网| 一本久久中文字幕| 波多野结衣巨乳人妻| 美女大奶头视频| 午夜视频国产福利| 国产免费一级a男人的天堂| 极品教师在线免费播放| 黄色丝袜av网址大全| ponron亚洲| 女人十人毛片免费观看3o分钟| 99热这里只有是精品50| av天堂在线播放| 成人午夜高清在线视频| 久久精品国产亚洲av涩爱 | 一级a爱片免费观看的视频| 日本撒尿小便嘘嘘汇集6| 国产乱人视频| 99热6这里只有精品| 成年女人看的毛片在线观看| 亚洲av免费高清在线观看| 波野结衣二区三区在线| 嫩草影院入口| 日本成人三级电影网站| 18禁裸乳无遮挡免费网站照片| 亚洲经典国产精华液单| 午夜福利在线观看吧| 国产精品一区二区三区四区免费观看 | 一个人免费在线观看电影| 在线播放无遮挡| 综合色av麻豆| 亚洲国产日韩欧美精品在线观看| 久久久久久国产a免费观看| 精品国内亚洲2022精品成人| 哪里可以看免费的av片| 成人欧美大片| 淫秽高清视频在线观看| 亚洲国产日韩欧美精品在线观看| 免费大片18禁| 亚洲欧美日韩东京热| 午夜亚洲福利在线播放| 熟妇人妻久久中文字幕3abv| 日日干狠狠操夜夜爽| 色5月婷婷丁香| 乱人视频在线观看| 熟妇人妻久久中文字幕3abv| 成人午夜高清在线视频| h日本视频在线播放| 色播亚洲综合网| 91狼人影院| 狂野欧美激情性xxxx在线观看| 精品久久久久久久人妻蜜臀av| 长腿黑丝高跟| 窝窝影院91人妻| 国产成人福利小说| 午夜免费男女啪啪视频观看 | 久久精品国产亚洲网站| 亚洲美女黄片视频| 精品午夜福利视频在线观看一区| 亚洲精品成人久久久久久| 性欧美人与动物交配| 午夜福利18| 久久久久性生活片| 国产 一区精品| 蜜桃亚洲精品一区二区三区| 亚洲精品成人久久久久久| 亚洲欧美精品综合久久99| 深夜a级毛片| 国产精品久久久久久久久免| 午夜福利欧美成人| 99久久成人亚洲精品观看| 99久久精品热视频| 又黄又爽又刺激的免费视频.| 久久精品国产清高在天天线| 日本一本二区三区精品| 精品久久久久久久久av| 午夜免费男女啪啪视频观看 | 无人区码免费观看不卡| 国产三级在线视频| 欧美日韩亚洲国产一区二区在线观看| 国产精品av视频在线免费观看| 亚洲av不卡在线观看| 成人三级黄色视频| 亚洲国产精品久久男人天堂| 日韩欧美三级三区| 99久久精品一区二区三区| АⅤ资源中文在线天堂| 色综合婷婷激情| 乱人视频在线观看| 成人高潮视频无遮挡免费网站| 国产高清有码在线观看视频| av天堂中文字幕网| 免费观看的影片在线观看| 免费观看在线日韩| 久久久久九九精品影院| av在线蜜桃| 亚洲最大成人手机在线| 成人毛片a级毛片在线播放| 欧美xxxx性猛交bbbb| 又粗又爽又猛毛片免费看| 99热6这里只有精品| 国产精品福利在线免费观看| 色av中文字幕| 99久久中文字幕三级久久日本| 国产又黄又爽又无遮挡在线| 亚洲国产欧洲综合997久久,| 在线国产一区二区在线| 亚洲av日韩精品久久久久久密| 在线播放无遮挡| 国产黄色小视频在线观看| 婷婷亚洲欧美| 免费观看的影片在线观看| 12—13女人毛片做爰片一| 无人区码免费观看不卡| 亚洲自拍偷在线| 午夜福利成人在线免费观看| 99久久中文字幕三级久久日本| 精品久久久噜噜| 琪琪午夜伦伦电影理论片6080| 久久国产精品人妻蜜桃| 日韩精品有码人妻一区| 午夜激情欧美在线| 国产午夜福利久久久久久| 免费观看人在逋| 日韩大尺度精品在线看网址| 色在线成人网| 亚洲人与动物交配视频| 亚洲成人免费电影在线观看| 国产伦人伦偷精品视频| 国产伦精品一区二区三区四那| 一区福利在线观看| 一进一出抽搐动态| 三级国产精品欧美在线观看| АⅤ资源中文在线天堂| 尤物成人国产欧美一区二区三区| 又粗又爽又猛毛片免费看| 日韩高清综合在线| 特大巨黑吊av在线直播| 亚洲avbb在线观看| 免费看光身美女| 狂野欧美激情性xxxx在线观看| 亚洲天堂国产精品一区在线| 亚洲欧美日韩无卡精品| 高清毛片免费观看视频网站| 亚洲午夜理论影院| 免费不卡的大黄色大毛片视频在线观看 | 亚洲中文字幕日韩| 两个人视频免费观看高清| 国产精品不卡视频一区二区| 亚洲国产欧美人成| 国产探花在线观看一区二区| 丰满人妻一区二区三区视频av| 亚洲男人的天堂狠狠| 一级a爱片免费观看的视频| 麻豆精品久久久久久蜜桃| 国内少妇人妻偷人精品xxx网站| 一本一本综合久久| 99视频精品全部免费 在线| 色播亚洲综合网| 日韩国内少妇激情av| 偷拍熟女少妇极品色| 午夜免费男女啪啪视频观看 | 久久草成人影院| 亚洲精品亚洲一区二区| 一卡2卡三卡四卡精品乱码亚洲| 国产91精品成人一区二区三区| 免费在线观看日本一区| 观看美女的网站| 免费av不卡在线播放| 麻豆成人午夜福利视频| 国产 一区精品| 久久久久精品国产欧美久久久| 国产黄a三级三级三级人| 亚洲性久久影院| 国产精品久久视频播放| 亚洲专区中文字幕在线| 成人亚洲精品av一区二区| 99久久中文字幕三级久久日本| 亚洲av中文字字幕乱码综合| 久久久久久久精品吃奶| 人妻夜夜爽99麻豆av| 欧美丝袜亚洲另类 | 男女那种视频在线观看| 亚洲狠狠婷婷综合久久图片| 国产精品98久久久久久宅男小说| 成人av在线播放网站| 成人三级黄色视频| 日本一本二区三区精品| 免费看美女性在线毛片视频| 国产视频一区二区在线看| 一进一出抽搐动态| 午夜a级毛片| 免费在线观看日本一区| 91在线精品国自产拍蜜月| 免费观看在线日韩| 成人鲁丝片一二三区免费| 久久久久久伊人网av| 亚洲中文日韩欧美视频| 天美传媒精品一区二区| 国产探花极品一区二区| 在线观看美女被高潮喷水网站| 国产精品电影一区二区三区| 在线a可以看的网站| 一区二区三区免费毛片| 又紧又爽又黄一区二区| 欧美zozozo另类| 白带黄色成豆腐渣| 99riav亚洲国产免费| 小说图片视频综合网站| 男插女下体视频免费在线播放| 国产白丝娇喘喷水9色精品| 岛国在线免费视频观看| 久久久久免费精品人妻一区二区| 91在线精品国自产拍蜜月| 一个人看的www免费观看视频| 日本 欧美在线| 国内精品美女久久久久久| 国产中年淑女户外野战色| 在线观看免费视频日本深夜| 久久国内精品自在自线图片| 欧美+亚洲+日韩+国产| 成年女人毛片免费观看观看9| 村上凉子中文字幕在线| 女的被弄到高潮叫床怎么办 | 两人在一起打扑克的视频| 国产一区二区三区av在线 | 国产精品精品国产色婷婷| 成人高潮视频无遮挡免费网站| 欧美xxxx黑人xx丫x性爽| 1000部很黄的大片| 在线免费观看不下载黄p国产 | 女人被狂操c到高潮| 在线观看一区二区三区| 日韩欧美国产在线观看| 亚洲精品色激情综合| 少妇的逼水好多| 嫩草影院新地址| 国产精品1区2区在线观看.| 高清毛片免费观看视频网站| 三级国产精品欧美在线观看| 三级毛片av免费| 亚洲欧美日韩无卡精品| 九九爱精品视频在线观看| 99热只有精品国产| 国产欧美日韩精品一区二区| 亚洲最大成人av| 国产免费男女视频| 久久午夜福利片| 国产老妇女一区| 嫁个100分男人电影在线观看| 亚洲一区二区三区色噜噜| 别揉我奶头~嗯~啊~动态视频| 色哟哟哟哟哟哟| 国产成人aa在线观看| 国产av在哪里看| 欧美中文日本在线观看视频| 欧美日韩精品成人综合77777| 精品99又大又爽又粗少妇毛片 | 国产久久久一区二区三区| 91麻豆精品激情在线观看国产| 成人美女网站在线观看视频| 国产一区二区激情短视频| 国产亚洲精品av在线| 校园人妻丝袜中文字幕| 黄色配什么色好看| 亚洲av熟女| 精品不卡国产一区二区三区| 国产精品嫩草影院av在线观看 | 久久久久久大精品| 国产免费男女视频| 99久久无色码亚洲精品果冻| 亚洲国产高清在线一区二区三| 人妻少妇偷人精品九色| 亚洲真实伦在线观看| 国产精品久久久久久久久免| 久久婷婷人人爽人人干人人爱| 国产高清三级在线| 女生性感内裤真人,穿戴方法视频| 亚洲无线观看免费| 丝袜美腿在线中文| 身体一侧抽搐| 日韩欧美在线二视频| 乱人视频在线观看| 国内精品美女久久久久久| 99热这里只有精品一区| 亚洲狠狠婷婷综合久久图片| 国产午夜福利久久久久久| 午夜福利成人在线免费观看| 亚洲无线在线观看| 免费观看在线日韩| 亚洲男人的天堂狠狠| 乱人视频在线观看| 国产精品一区二区性色av| 久久精品国产亚洲av天美| 18禁在线播放成人免费| 亚洲成人久久性| 久久久久久久久久久丰满 | 人人妻人人看人人澡| 午夜福利视频1000在线观看| 男人舔女人下体高潮全视频| 在线播放无遮挡| 真人一进一出gif抽搐免费| 国产伦精品一区二区三区视频9| 国产成人一区二区在线| 午夜爱爱视频在线播放| 久久久久久伊人网av| 日韩,欧美,国产一区二区三区 | 黄片wwwwww| 亚洲成av人片在线播放无| 亚洲欧美日韩高清专用| 日韩欧美一区二区三区在线观看|