日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

oracle decode_错过血亏!一文搞懂Oracle锁相关视图及相关操作

發(fā)布時(shí)間:2025/3/11 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle decode_错过血亏!一文搞懂Oracle锁相关视图及相关操作 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文主要研究鎖的相關(guān)視圖,以及鎖的相關(guān)操作,通過(guò)視圖查鎖的問(wèn)題。

一、v$transaction視圖

第一個(gè)視圖是v$transaction,就是Oracle數(shù)據(jù)庫(kù)所有活動(dòng)的事務(wù)數(shù),所有活動(dòng)的事務(wù)每一個(gè)活動(dòng)的事務(wù)在這里有一行。

v$transaction

XIDUSN表示當(dāng)前事務(wù)使用的回滾段的編號(hào)

XIDSLOT說(shuō)明該事務(wù)在回滾段頭部的事務(wù)表中對(duì)應(yīng)的記錄編號(hào)(也可以叫做槽號(hào))

XIDSQN說(shuō)明序列號(hào)

STATUS說(shuō)明該事務(wù)是否為活動(dòng)的

這是v$transaction視圖的結(jié)構(gòu),這里做一個(gè)實(shí)驗(yàn)

在一個(gè)hr用戶的sqlplus中執(zhí)行

SQL> delete from employees where rownum=1;
1 row deleted.

我刪一行,開(kāi)始一個(gè)事務(wù),以管理員身份運(yùn)行,去執(zhí)行一下

select xidusn,xidslot,xidsqn,status from v$transaction;

看看有幾個(gè)事務(wù)

結(jié)果:

SQL> select xidusn,xidslot,xidsqn,status from v$transaction; XIDUSN XIDSLOT XIDSQN STATUS---------- ---------- ---------- ---------------- 4 43 216 ACTIVE

一個(gè)事務(wù)在這里面有一行

XIDUSN是事務(wù)使用的回滾段的編號(hào)XIDSLOT是哪個(gè)槽位數(shù)XIDSQN是覆蓋多少次這三個(gè)唯一的標(biāo)示一個(gè)事務(wù)的編號(hào)

STATUS是當(dāng)前事務(wù)的狀態(tài),這個(gè)事務(wù)為ACTIVE;這是v$transaction,所有的活動(dòng)事務(wù)里面都有

二、v$lock視圖

v$lock 記錄了session已經(jīng)獲得的鎖定以及正在請(qǐng)求的鎖定的信息 SID說(shuō)明session的ID號(hào) TYPE說(shuō)明鎖的類型,主要關(guān)注TX和TM LMODE說(shuō)明已經(jīng)獲得的鎖定的模式,以數(shù)字編碼表示 REQUEST說(shuō)明正在請(qǐng)求的鎖定的模式,以數(shù)字編碼表示 BLOCK說(shuō)明是否阻止了其他用戶獲得鎖定,大于0說(shuō)明是,等于0說(shuō)明否

v$lock這里面,記錄了session已經(jīng)獲得的鎖定以及正在請(qǐng)求的鎖定的信息,就是每個(gè)會(huì)話,它已經(jīng)獲取的鎖和正在申請(qǐng)的鎖它都會(huì)列出來(lái)

上面執(zhí)行了

delete from employees where rownum=1;

一個(gè)事務(wù)開(kāi)始以后至少產(chǎn)生幾個(gè)鎖,第一個(gè)行上加鎖了,行上的鎖你是看不見(jiàn)的,因?yàn)樗谛猩?#xff0c;但是我們開(kāi)始一個(gè)事務(wù)有一個(gè)事務(wù)鎖,同時(shí)在表上應(yīng)該加了個(gè)RX鎖,應(yīng)該這時(shí)候有兩個(gè)鎖,一個(gè)TX鎖事務(wù)鎖,一個(gè)是TM級(jí)別上的表級(jí)的RX鎖。

使用語(yǔ)句

select sid,type,id1,id2, decode(lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode, decode(request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') request_mode,block from v$lock where sid=129;

這里把它取名為(#A)語(yǔ)句,最后where條件有sid,sid是會(huì)話的編號(hào)

先查一下我們會(huì)話的編號(hào)是多少,在我的實(shí)驗(yàn)環(huán)境下,在hr用戶的sqlplus中

SQL> select sid from v$mystat where rownum=1;select sid from v$mystat where rownum=1 *ERROR at line 1:ORA-00942: table or view does not exist

hr用戶無(wú)權(quán)訪問(wèn)v$mystat,所以換個(gè)方法,使用下面的命令得到hr用戶當(dāng)前的sid

SQL> select userenv('sid') from dual;
USERENV('SID')-------------- 132

得到SID是132

然后用132替換前面(#A)語(yǔ)句where條件下的sid的值,然后在管理員用戶下查一下,因?yàn)閔r用戶依然無(wú)法訪問(wèn)v$lock。

執(zhí)行結(jié)果

SQL> select sid,type,id1,id2,decode(lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode,decode(request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') request_mode,block 2 3 from v$lock 4 where sid=132;
SID TY ID1 ID2 LOCK_MODE REQUEST_MODE BLOCK---------- -- ---------- ---------- ------------------- ------------------- ---------- 132 TM 51852 0 Row share None 0 132 TM 51855 0 Row share None 0 132 TM 51857 0 Row Exclusive None 0 132 TM 51864 0 Row share None 0 132 TM 51871 0 Row share None 0 132 TM 51889 0 Row share None 0 132 TM 51894 0 Row share None 0 132 TM 51902 0 Row share None 0 132 TX 262187 216 Exclusive None 0
9 rows selected.

我們看一下132這個(gè)會(huì)話在很多的表上產(chǎn)生了TM鎖,132這個(gè)會(huì)話至少底下產(chǎn)生了一個(gè)TX鎖,同時(shí)132產(chǎn)生了TM鎖,LOCK_MODE中是Row share說(shuō)明是RS鎖,是select for update產(chǎn)生的鎖;132這個(gè)會(huì)話產(chǎn)生的TM鎖的ID1列的ID數(shù),這個(gè)TM在某個(gè)表上產(chǎn)生的鎖,ID1就是這個(gè)表的編號(hào)

有一個(gè)是51902,我們可以根據(jù)51902查出來(lái)

select object_name from dba_objects where object_id=51902;

查出51902是哪個(gè)表

執(zhí)行結(jié)果

SQL> select object_name from dba_objects where object_id=51902;
OBJECT_NAME-------------------------------------------------------------------------------------------------------PRODUCT_INFORMATION

對(duì)象編號(hào)51902是PRODUCT_INFORMATION表,說(shuō)明我們找錯(cuò)了,這個(gè)表上加的鎖是Row share類型的鎖刪除操作的表應(yīng)該產(chǎn)生Row Exclusive類型的鎖,前面delete語(yǔ)句刪除EMPLOYEES表中行時(shí)牽涉到了PRODUCT_INFORMATION這個(gè)表,是主外鍵約束關(guān)系的原因在PRODUCT_INFORMATION表產(chǎn)生了RS鎖。

再看剛才的結(jié)果

132 TM 51857 0 Row Exclusive None 0

鎖應(yīng)該是RX鎖,TM級(jí)別的RX鎖,是51857

把語(yǔ)句改為

select object_name from dba_objects where object_id=51857;

改一下,執(zhí)行一下,看一下

SQL> select object_name from dba_objects where object_id=51857;
OBJECT_NAME----------------------------------------------------------------------------------------------------EMPLOYEES

結(jié)果是EMPLOYEES,是對(duì)的。所以這個(gè)TM這個(gè)表級(jí)鎖在哪個(gè)表上,根據(jù)ID1對(duì)應(yīng)的ID可以找出來(lái);另外結(jié)果中TX所在的行,有ID1對(duì)應(yīng)的ID和ID2列對(duì)應(yīng)的ID,ID1和ID2這兩個(gè)數(shù)字標(biāo)示著這個(gè)事務(wù)用的那個(gè)回滾段、事務(wù)表里面的槽位號(hào)還有覆蓋次數(shù),我們可以通過(guò)一個(gè)sql語(yǔ)句查出來(lái)

將ID1拆解

select trunc(393249/power(2,16)) as undo_blk#,bitand(393249,to_number('ffff','xxxx')) + 0 as slot#from dual;

剛才delete語(yǔ)句產(chǎn)生的TX鎖是這一行

132 TX 262187 216 Exclusive None 0

ID1列的值262187替換上面的語(yǔ)句中的值393249

得到

select trunc(262187/power(2,16)) as undo_blk#,bitand(262187,to_number(‘ffff’,’xxxx’)) + 0 as slot#from dual;

執(zhí)行一下

SQL> select trunc(262187/power(2,16)) as undo_blk#,bitand(262187,to_number('ffff','xxxx')) + 0 as slot# from dual; 2
UNDO_BLK# SLOT#---------- ---------- 4 43

看結(jié)果是4號(hào)回滾段,回滾段事務(wù)表中槽位號(hào)SLOT#是43

和以前查詢結(jié)果是一樣的

SQL> select xidusn,xidslot,xidsqn,status from v$transaction;
XIDUSN XIDSLOT XIDSQN STATUS---------- ---------- ---------- ---------------- 4 43 216 ACTIVE

剛才這個(gè)語(yǔ)句XIDSQN的值216

(#A)語(yǔ)句結(jié)果行

132 TX 262187 216 Exclusive None 0

直接有了

(#A)語(yǔ)句結(jié)果中ID2是覆蓋次數(shù)

通過(guò)這個(gè)sql語(yǔ)句

select trunc(262187/power(2,16)) as undo_blk#,bitand(262187,to_number(‘ffff’,’xxxx’)) + 0 as slot#from dual; 2

找出來(lái)用的哪個(gè)回滾段、槽位號(hào)是多少、覆蓋次數(shù)這三個(gè)信息

也就是(#A)語(yǔ)句結(jié)果中TX這一行,ID1列和ID2列可以找到哪個(gè)事務(wù)

行是TM鎖

132 TM 51857 0 Row Exclusive None 0

ID1對(duì)應(yīng)的編號(hào)51857是對(duì)象的編號(hào),這是v$lock

Oracle中的表級(jí)鎖有

鎖定模式 鎖定簡(jiǎn)稱 編碼數(shù)值Row Exclusive RX 3Row Shared RS 2Share S 4Exclusive X 6Share Row Exclusive SRX 5NULL N/A 0或者1

這是鎖的一些編號(hào),v$lock視圖里面是用編號(hào)給列出來(lái)了,如編號(hào)3對(duì)應(yīng)Row Exclusive鎖模式,并且v$lock持有鎖和申請(qǐng)鎖的都列出來(lái)了,我們查詢以后得出的結(jié)論,SID為132的LOCK_MODE它是持有鎖的模式。

(#A)結(jié)果中SID為132的行有9行,它是持有這么多的鎖,REQUEST_MODE都是None,請(qǐng)求這塊是none

我們看(#A)結(jié)果中這些列,SID是session id,Type是類型,有表級(jí)鎖TM和事務(wù)鎖TX,對(duì)于ID,對(duì)TM來(lái)講ID1是哪個(gè)對(duì)象,對(duì)于TX來(lái)講ID1和ID2分別對(duì)應(yīng)哪個(gè)事務(wù)。

LOCK_MODE是SID會(huì)話持有的鎖,它持有這個(gè)鎖,REQUEST_MODE這個(gè)是請(qǐng)求什么鎖,這里我請(qǐng)求都是None,沒(méi)有請(qǐng)求任何鎖,同時(shí),BLOCK這個(gè)數(shù)字是0或者1,其中:這個(gè)0表示,比如說(shuō)SID為132的會(huì)話持有LOCK_MODE為Row share的鎖,這個(gè)鎖并沒(méi)有把其它的別人鎖住,BLOCK就為0;BLOCK如果是1的話,132持有這個(gè)鎖同時(shí)還鎖住了別人到底鎖住了誰(shuí)可以去查。

BLOCK是這個(gè)意思,這里結(jié)果中block都是0,也就是對(duì)132來(lái)講,我持有這么多的鎖,但是沒(méi)有鎖其它的任何人,也就是132持有的鎖沒(méi)有對(duì)別人造成影響。

三、v$enqueue_lock視圖

v$enqueue_lock該視圖中包含的字段以及字段含義與v$lock中的字段一模一樣。只不過(guò)該視圖中只顯示那些申請(qǐng)鎖定,但是無(wú)法獲得鎖定的session信息。其中的記錄按照申請(qǐng)鎖定的時(shí)間先后順序排列,先申請(qǐng)鎖定的session排在前面,排在前面的session將會(huì)先獲得鎖定。

我們接著看v$enqueue_lock,vlock是把會(huì)話持有的鎖和請(qǐng)求的鎖全給列出來(lái)了,v$enqueue_lock只是把請(qǐng)求鎖的都列出來(lái)了,v$enqueue_lock只是把哪些會(huì)話它正在請(qǐng)求鎖,它把請(qǐng)求的列出來(lái)了,它持有鎖它沒(méi)列;因?yàn)閷?duì)我們來(lái)講,有時(shí)候我們只關(guān)心誰(shuí)在請(qǐng)求鎖,因?yàn)檎?qǐng)求鎖就有可能被鎖住,但有時(shí)候我們并不關(guān)心持有鎖

四、v$locked_object視圖

v$locked_object記錄了當(dāng)前已經(jīng)被鎖定的對(duì)象的信息

XIDUSN表示當(dāng)前事務(wù)使用的回滾段的編號(hào)

XIDSLOT說(shuō)明該事務(wù)在回滾段頭部的事務(wù)表中對(duì)應(yīng)的記錄編號(hào)

XIDSQN說(shuō)明序列號(hào)

OBJECT_ID說(shuō)明當(dāng)前被鎖定的對(duì)象的ID號(hào),可以根據(jù)該ID號(hào)到dba_objects里查找被鎖定的對(duì)象名稱

LOCKED_MODE說(shuō)明鎖定模式的數(shù)字編碼

v$locked_object記錄了當(dāng)前已經(jīng)被鎖定的對(duì)象的信息,哪些對(duì)象被鎖定了

XIDUSN、XIDSLOT、XIDSQN是鎖這些對(duì)象的事務(wù)信息

OBJECT_ID是哪個(gè)對(duì)象被鎖住了

LOCKED_MODE是鎖的模式是什么,用什么方式鎖了,比如某個(gè)表被鎖住的話這里面可以查出來(lái)

五、v$session視圖

v$session記錄了當(dāng)前session的相關(guān)信息

SID表示session的編號(hào)

SERIAL#表示序列號(hào)

SID和SERIAL#可以認(rèn)為是v$session的主鍵,它們共同唯一標(biāo)識(shí)一個(gè)session

記錄的是會(huì)話信息,通過(guò)SID和SERIAL#,它倆可以唯一的標(biāo)示一個(gè)會(huì)話

六、選擇hr用戶做實(shí)驗(yàn)

1)hr用戶

在sqldeveloper里面開(kāi)的會(huì)話有的是用hr用戶登陸的,sqldeveloper打開(kāi)后,在 連接 設(shè)置卡部分,選擇其中的一個(gè)連接,右鍵點(diǎn)擊連接名,再點(diǎn)擊右鍵菜單中的屬性,打開(kāi) 新建/選擇數(shù)據(jù)庫(kù)連接 設(shè)置卡,將其中的 用戶名和口令 改成你需要的用戶,我們使用hr做的測(cè)試,這里用hr,這個(gè)sqldeveloper就是使用hr用戶,也可以在sqldeveloper中使用sys用戶,這里使用的sqlplus里面都是用hr用戶登的。

hr用戶它默認(rèn)不能訪問(wèn)v$mystat,這個(gè)視圖要經(jīng)常被使用,可以使用下面的命令:

grant select on v_$mystat to hr;

以管理員身份運(yùn)行,給hr用戶授權(quán),在sys用戶里面執(zhí)行一下

SQL> grant select on v_$mystat to hr;
Grant succeeded.

執(zhí)行以后這個(gè)hr用戶就可以訪問(wèn)v$mystat了

我們看一下比如這個(gè)

select sid from v$mystat where rownum=1;

看看會(huì)話的當(dāng)前的SID是多少,如果grant沒(méi)有執(zhí)行的話,hr用戶使用這個(gè)語(yǔ)句查詢它會(huì)報(bào)錯(cuò)的,它會(huì)報(bào)沒(méi)有這個(gè)對(duì)象,去grant一下以后它就ok了,所以你需要用sys用戶grant一下

在sqldeveloper中,一個(gè)hr用戶建立的連接返回了一個(gè)結(jié)果

SID 134

當(dāng)前的SID是134,我們看看第二個(gè)hr用戶建立的會(huì)話

SID131

執(zhí)行時(shí)返回結(jié)果慢,在sqldeveloper執(zhí)行慢主要和sqldeveloper的原理有關(guān)系,當(dāng)一個(gè)會(huì)話長(zhǎng)時(shí)間不用的時(shí)候它會(huì)關(guān)掉,sqldeveloper確實(shí)非常占資源,我們現(xiàn)在開(kāi)了三個(gè)所以非常的慢了。

在sqlplus中也可以查,這個(gè)比較的快

SQL> select sid from v$mystat where rownum=1;
SID---------- 139

這個(gè)hr用戶會(huì)話的SID是139,在另一個(gè)sqlplus中查

SQL> select sid from v$mystat where rownum=1;
SID---------- 145

這個(gè)hr用戶會(huì)話的SID是145,簡(jiǎn)單記錄一下134,131,第三個(gè)sqldeveloper不用,第四個(gè)是sqlplus是139,第五個(gè)sqlplus是145,hr用戶一共建了了四個(gè)會(huì)話,SID分別是134,131,139,145

最終放棄了使用sqldeveloper做hr用戶的實(shí)驗(yàn),后面的實(shí)驗(yàn)只使用了前面hr會(huì)話中的139和145的兩個(gè)會(huì)話

2)v_$mystat和v$mystat

可能大家注意到了,grant語(yǔ)句中使用的v_$mystat和hr用戶訪問(wèn)的v$mystat不一樣,這里補(bǔ)充說(shuō)一下 v$mystat 和 v_$mystat 的區(qū)別。

初始狀態(tài)下hr用戶訪問(wèn)v$mystat時(shí)

SQL> select sid from v$mystat where rownum=1;select sid from v$mystat where rownum=1 *ERROR at line 1:ORA-00942: table or view does not exist

提示訪問(wèn)的表或者視圖不存在,當(dāng)sys用戶給hr用戶授權(quán)后

grant select on v_$mystat to hr;

hr用戶就可以訪問(wèn)了,大家注意到上面兩個(gè)語(yǔ)句中執(zhí)行的對(duì)象并不一樣,要訪問(wèn)的是v$mystat,而授權(quán)的是v_$mystat,如果我們直接給v$mystat授權(quán)

SQL> grant select on v$mystat to hr;grant select on v$mystat to hr *ERROR at line 1:ORA-02030: can only select from fixed tables/views

說(shuō)明這里授權(quán)的v$mystat不是固有視圖,不能直接授權(quán),實(shí)際這里hr訪問(wèn)的v$mystat是一個(gè)同義詞,sys不能給同義詞授權(quán),只能授權(quán)給固定的表或視圖,同義詞在Oracle中可以理解為一個(gè)對(duì)象的別名,有私有和共用之分,每個(gè)用戶都可以給自己的對(duì)象創(chuàng)建自己的同義詞,這樣創(chuàng)建的同義詞只能自己使用。

創(chuàng)建私有同義詞語(yǔ)法:

Create [OR REPLACE] SYNONYM [schema.]synonym_name FOR [schema.]object_name;

默認(rèn)只有系統(tǒng)管理員可以創(chuàng)建共用同義詞,共用同義詞屬于Oracle的public,public擁有了的權(quán)限,Oracle所有的用戶都自動(dòng)擁有了并可以使用

創(chuàng)建公有同義詞語(yǔ)法:

Create PUBLIC SYNONYM synonym_name FOR [schema.]object_name;

刪除同義詞的語(yǔ)法:

drop [public] synonym 同義詞名稱;

私有同義詞不能和自己已有的對(duì)象同名,公用同義詞可以和創(chuàng)建者已有的對(duì)象同名,當(dāng)一個(gè)用戶的一個(gè)對(duì)象和公有同義詞同名時(shí),使用時(shí)自己的對(duì)象優(yōu)先;私有同義詞和共用同義詞可以同名,使用時(shí)私有同義詞優(yōu)先。

所以這幾種對(duì)象如果有同名,語(yǔ)句中的使用順序是:先使用自己的固有對(duì)象或私有同義詞,最后使用公用同義詞。

查詢V$MYSTAT的說(shuō)明:

SQL> select * from dict where table_name='V$MYSTAT';
TABLE_NAME------------------------------COMMENTS------------------------------ V$MYSTATSynonym for V_$MYSTAT

V$MYSTAT是一個(gè)同義詞是V_$MYSTAT的同義詞,再在庫(kù)中的同義詞數(shù)據(jù)字典中查找這個(gè)同義詞

SQL> select * from dba_synonyms where SYNONYM_NAME='V$MYSTAT';
OWNER SYNONYM_NAME TABLE_OWNE TABLE_NAME DB_LINK---------- -------------------- ---------- -------------------- --------------------PUBLIC V$MYSTAT SYS V_$MYSTAT

說(shuō)明V$MYSTAT是SYS用戶的V_$MYSTAT視圖的共用同義詞,查詢V_$MYSTAT視圖的定義

SQL> select OWNER,VIEW_NAME,TEXT from dba_views where view_name = 'V_$MYSTAT';
OWNER VIEW_NAME TEXT---------- ------------------------------ --------------------------------------------------------------------------------SYS V_$MYSTAT select "SID","STATISTIC#","VALUE" from v$mystat

TEXT字段是這個(gè)視圖的定義

select “SID”,”STATISTIC#”,”VALUE” from v$mystat

也可以通過(guò)dbms_metadata.get_ddl查詢V_$MYSTAT視圖的定義,dbms_metadata.get_ddl返回的是long類型的結(jié)果,long型數(shù)據(jù)為可變長(zhǎng)字符串,最大長(zhǎng)度限制是2GB,sqlplus處理long型數(shù)據(jù)非常困難,因?yàn)槔锩娲娴臄?shù)據(jù)一般都很長(zhǎng),sqlplus顯示時(shí)一般只能顯示出來(lái)一部分,所以想顯示完整的long型數(shù)據(jù),要先給sqlplus環(huán)境設(shè)置LONG參數(shù)

SQL> SET LONG 9999SQL> select dbms_metadata.get_ddl('VIEW','V_$MYSTAT') from dual;
DBMS_METADATA.GET_DDL('VIEW','V_$MYSTAT')--------------------------------------------------------------------------------
CREATE OR REPLACE FORCE VIEW "SYS"."V_$MYSTAT" ("SID", "STATISTIC#", "VALUE") AS select "SID","STATISTIC#","VALUE" from v$mystat

結(jié)果和從dba_views得到的一樣,這里又有一個(gè)v$mystat,前面的一個(gè)是同義詞,這一個(gè)看看視圖定義里面有沒(méi)有,而視圖的定義在v$fixed_view_definition中有

這里查詢V$MYSTAT的定義

SQL> select * from v$fixed_view_definition where VIEW_NAME = 'V$MYSTAT';
VIEW_NAME------------------------------VIEW_DEFINITION--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------V$MYSTATselect SID , STATISTIC# , VALUE from GV$MYSTAT where inst_id = USERENV('Instance')

說(shuō)明有一個(gè)固定視圖也叫V$MYSTAT它來(lái)源于GV$MYSTAT,經(jīng)過(guò)查找和分析,GV$MYSTAT同樣有一個(gè)同名的PUBLIC同義詞和一個(gè)固定視圖,而且也有一個(gè)關(guān)聯(lián)的GV_$MYSTAT視圖PUBLIC同義詞,V$MYSTAT來(lái)自于GV_$MYSTAT,而GV_$MYSTAT又產(chǎn)生自固定視圖GV$MYSTAT

再看一下固定視圖GV$MYSTAT的定義

SQL> select * from v$fixed_view_definition where VIEW_NAME = 'GV$MYSTAT';
VIEW_NAME------------------------------VIEW_DEFINITION--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GV$MYSTATselect inst_id,ksusenum,ksusestn,ksusestv from x$ksumysta where bitand(ksspaflg,1)!=0 and bitand(ksuseflg,1)!=0 and ksusestn<(select ksusgstl from x$ksusgif)

說(shuō)明固定視圖GV$MYSTAT來(lái)自于x$ksumysta,這里x$ksumysta表中的信息是Oracle實(shí)例當(dāng)前會(huì)話的狀態(tài)信息,可以從v$fixed_table繼續(xù)查到x$ksumysta和結(jié)果中出現(xiàn)的x$ksusgif的信息

SQL> SELECT * FROM v$fixed_table WHERE NAME in ('X$KSUMYSTA','X$KSUSGIF');
NAME OBJECT_ID TYPE TABLE_NUM------------------------------ ---------- ----- ----------X$KSUSGIF 4294951930 TABLE 33X$KSUMYSTA 4294951106 TABLE 35

這是固定表,不用再繼續(xù)找了,一般用戶使用的V$MYSTAT是一個(gè)共用同義詞,它的來(lái)源渠道追溯過(guò)程是:V$MYSTAT共用同義詞,來(lái)自于V_$MYSTAT視圖、V$MYSTAT固定視圖、GV$MYSTAT、固定表X$KSUMYSTA,所以V$MYSTAT最終來(lái)自于固定表X$KSUMYSTA。

前面查詢中用到的dict實(shí)際也是個(gè)共用同義詞,SYS用戶的DICTIONARY視圖有兩個(gè)共用同義詞DICT和DICTIONARY,我們使用了DICT同義詞,DICTIONARY是一個(gè)數(shù)據(jù)字典,官方描述是:DICTIONARY contains descriptions of data dictionary tables and views. 就是DICTIONARY是個(gè)數(shù)據(jù)字典,內(nèi)容中包含Oracle系統(tǒng)中所有數(shù)據(jù)字典,包括所有數(shù)據(jù)字典表和數(shù)據(jù)字典視圖的名稱和說(shuō)明。

3)Oracle中的PUBLIC角色

前面講了一個(gè)共用同義詞創(chuàng)建時(shí),自動(dòng)的屬于了PUBLIC,PUBLIC在Oracle中比較特殊,有很多人弄不清楚它到底是什么類型的對(duì)象。

查詢PUBLIC在角色中有沒(méi)有定義:

SQL> select dbms_metadata.get_ddl('ROLE','PUBLIC') from dual;
DBMS_METADATA.GET_DDL('ROLE','PUBLIC')--------------------------------------------------------------------------------
CREATE ROLE "PUBLIC"

查詢PUBLIC在用戶中有沒(méi)有定義:

SQL> select dbms_metadata.get_ddl('USER','PUBLIC') from dual;ERROR:ORA-31603: object "PUBLIC" of type USER not found in schema "SYS"ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105ORA-06512: at "SYS.DBMS_METADATA", line 2805ORA-06512: at "SYS.DBMS_METADATA", line 4333ORA-06512: at line 1
no rows selected

所以PUBLIC是一個(gè)角色,不是用戶,但是在DBA_ROLES查詢

SQL> select * from DBA_ROLES;
ROLE PASSWORD------------------------------ --------CONNECT NORESOURCE NODBA NOSELECT_CATALOG_ROLE NOEXECUTE_CATALOG_ROLE NODELETE_CATALOG_ROLE NOEXP_FULL_DATABASE NOIMP_FULL_DATABASE NORECOVERY_CATALOG_OWNER NOGATHER_SYSTEM_STATISTICS NOLOGSTDBY_ADMINISTRATOR NOAQ_ADMINISTRATOR_ROLE NOAQ_USER_ROLE NOGLOBAL_AQ_USER_ROLE GLOBALSCHEDULER_ADMIN NOHS_ADMIN_ROLE NOAUTHENTICATEDUSER NOOEM_ADVISOR NOOEM_MONITOR NOWM_ADMIN_ROLE NOJAVAUSERPRIV NOJAVAIDPRIV NOJAVASYSPRIV NOJAVADEBUGPRIV NOEJBCLIENT NOJAVA_ADMIN NOJAVA_DEPLOY NOCTXAPP NOXDBADMIN NOXDBWEBSERVICES NOOLAP_DBA NOOLAP_USER NOMGMT_USER NO
33 rows selected.

并沒(méi)有PUBLIC。

查詢DBA_ROLES的定義

SQL> select dbms_metadata.get_ddl('VIEW','DBA_ROLES','SYS') from dual;
DBMS_METADATA.GET_DDL('VIEW','DBA_ROLES','SYS')--------------------------------------------------------------------------------
CREATE OR REPLACE FORCE VIEW "SYS"."DBA_ROLES" ("ROLE", "PASSWORD_REQUIRED") AS select name, decode(password, null, 'NO', 'EXTERNAL', 'EXTERNAL', 'GLOBAL', 'GLOBAL', 'YES')from user$where type# = 0 and name not in ('PUBLIC', '_NEXT_USER')

結(jié)果中有這么一句,name not in (‘PUBLIC’, ‘_NEXT_USER’),說(shuō)明DBA_ROLES生成時(shí)過(guò)濾掉了PUBLIC

Oracle中的角色是一種權(quán)限的集合,如常用的CONNECT連接角色,RESOURCE資源角色,DBA數(shù)據(jù)庫(kù)管理員角色是ORACLE系統(tǒng)的三個(gè)內(nèi)置角色,可以把單個(gè)的權(quán)限再賦予角色使角色的權(quán)限增加

如:

SQL> select ROLE, PRIVILEGE from role_sys_privs where role='CONNECT';ROLE PRIVILEGE------------------------------ ----------------------------------------CONNECT CREATE SESSIONSQL> grant CREATE ANY VIEW to CONNECT;Grant succeeded.SQL> select ROLE, PRIVILEGE from role_sys_privs where role='CONNECT';ROLE PRIVILEGE------------------------------ ----------------------------------------CONNECT CREATE ANY VIEWCONNECT CREATE SESSION

也可以回收角色的權(quán)限

SQL> revoke CREATE ANY VIEW from CONNECT;
Revoke succeeded.
SQL> select ROLE, PRIVILEGE from role_sys_privs where role='CONNECT';
ROLE PRIVILEGE------------------------------ ----------------------------------------CONNECT CREATE SESSION

但最終這些角色和單個(gè)的權(quán)限是要被賦予用戶來(lái)起作用的

查看用戶擁有的權(quán)限

select grantee,privilege from dba_sys_privs where grantee=’HR’;

如結(jié)果:

SQL> select grantee,privilege from dba_sys_privs where grantee='HR';
GRANTEE PRIVILEGE------------------------------ ----------------------------------------HR CREATE VIEWHR UNLIMITED TABLESPACEHR CREATE DATABASE LINKHR CREATE SEQUENCEHR CREATE SESSIONHR ALTER SESSIONHR CREATE SYNONYM
7 rows selected.

使用授權(quán)語(yǔ)句時(shí)可以把單個(gè)權(quán)限分別賦予單個(gè)用戶,也可以把權(quán)限的集合角色授予一個(gè)用戶,我們可以把權(quán)限賦予PUBLIC

SQL> grant CREATE ANY VIEW to PUBLIC;Grant succeeded.

同時(shí)也可以把PUBLIC賦予用戶

SQL> grant PUBLIC to HR;Grant succeeded.

如果把用戶賦予用戶是不允許的:

SQL> grant sys to HR;grant sys to HR *ERROR at line 1:ORA-01919: role 'SYS' does not exist

進(jìn)一步說(shuō)明PUBLIC是個(gè)角色,再查HR用戶的權(quán)限,HR的系統(tǒng)權(quán)限

SQL> select * from dba_sys_privs where grantee = 'HR';GRANTEE PRIVILEGE ADM------------------------------ ---------------------------------------- ---HR CREATE VIEW NOHR UNLIMITED TABLESPACE NOHR CREATE DATABASE LINK NOHR CREATE SEQUENCE NOHR CREATE SESSION NOHR ALTER SESSION NOHR CREATE SYNONYM NO7 rows selected.

HR的角色權(quán)限

SQL> select * from dba_role_privs where grantee = 'HR';GRANTEE GRANTED_ROLE ADM DEF------------------------------ ------------------------------ --- ---HR RESOURCE NO YESHR PUBLIC NO YES

這時(shí)HR用戶我們看到在已經(jīng)賦予的角色GRANTED_ROLE中有了PUBLIC角色權(quán)限,這是我前面手動(dòng)賦予了HR用戶的權(quán)限,盡管它原來(lái)就有,但在這里顯示出來(lái)了,而HR用戶初始的角色權(quán)限是這樣的:

SQL> select * from dba_role_privs where grantee = 'HR';GRANTEE GRANTED_ROLE ADM DEF------------------------------ ------------------------------ --- ---HR RESOURCE NO YES

這是HR角色權(quán)限的默認(rèn)狀態(tài),所以可以確定PUBLIC是一個(gè)角色了,但這個(gè)角色比較特殊,在很多的表和視圖都給屏蔽掉了,但有的地方還是可以查到的

SQL> select * from dba_role_privs where grantee = 'PUBLIC';
GRANTEE GRANTED_ROLE ADM DEF------------------------------ ------------------------------ --- ---PUBLIC RESOURCE NO YES
SQL> select * from dba_sys_privs where grantee = 'PUBLIC';
GRANTEE PRIVILEGE ADM------------------------------ ---------------------------------------- ---PUBLIC UNLIMITED TABLESPACE NOPUBLIC CREATE ANY VIEW NO

這兩個(gè)查詢列出了PUBLIC擁有的角色權(quán)限和系統(tǒng)權(quán)限,同樣也可以給PUBLIC添加新的權(quán)限,CREATE ANY VIEW就是我自己給它添加的,public擁有的權(quán)限,所有的用戶都自動(dòng)的擁有了,也就是所有的用戶初始默認(rèn)都擁有PUBLIC角色的權(quán)限。

七、兩個(gè)事務(wù)間鎖爭(zhēng)用實(shí)例

1)兩個(gè)事務(wù)爭(zhēng)用鎖

我們執(zhí)行一個(gè)update employees set last_name=last_name||’a’ where department_id=60;開(kāi)始一個(gè)事務(wù),開(kāi)始實(shí)驗(yàn),在其中一個(gè)sqlplus中執(zhí)行

SQL> update employees set last_name=last_name||'a' where department_id=60;5 rows updated.

之前提過(guò),這個(gè)事務(wù)一旦開(kāi)始以后伴隨著一堆的鎖,執(zhí)行這個(gè)語(yǔ)句的SID是139

我們先查一下和事務(wù)相關(guān)的

select xidusn,xidslot,xidsqn,status from v$transaction;

剛才已經(jīng)開(kāi)始一個(gè)事務(wù)了,使用sys用戶看一下有多少事務(wù),因?yàn)閯傞_(kāi)始一個(gè)事務(wù),它是active的沒(méi)有提交,它在v$transaction里面一定會(huì)出現(xiàn)

SQL> select xidusn,xidslot,xidsqn,status from v$transaction; XIDUSN XIDSLOT XIDSQN STATUS---------- ---------- ---------- ---------------- 7 23 238 ACTIVE

這就是剛才我們的事務(wù),然后我們可以去查一下,剛才在139開(kāi)始的一個(gè)事務(wù),sys使用下面的語(yǔ)句查一下

查詢結(jié)果

SQL> select sid,type,id1,id2,decode(lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode,decode(request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') request_mode,block 2 3 from v$lock where sid=139; 4 SID TY ID1 ID2 LOCK_MODE REQUEST_MODE BLOCK---------- -- ---------- ---------- ------------------- ------------------- ---------- 139 TM 51857 0 Row Exclusive None 0 139 TX 458775 238 Exclusive None 0

從結(jié)果看139會(huì)話,產(chǎn)生了一個(gè)TM鎖和一個(gè)TX鎖。

TM的ID2總是0,ID1是代表著操作所在的表,TX鎖的ID1和ID2通過(guò)語(yǔ)句可以找到這個(gè)事務(wù),從LOCK_MODE看出他們都持有鎖,REQUEST_MODE看出都沒(méi)有請(qǐng)求鎖,從BLOCK都是0看出持有的鎖都沒(méi)有阻塞別人,再另外開(kāi)一個(gè)session

同樣的去執(zhí)行

update employees set last_name=last_name||’b’ where department_id=60;

在SID為145的hr會(huì)話中執(zhí)行,它需要的資源被鎖住

SQL> update employees set last_name=last_name||'b' where department_id=60;

這時(shí)的執(zhí)行被卡住

我們?cè)偃ゲ橐幌逻@里是139和145,對(duì)(#A)語(yǔ)句稍作修改

得到語(yǔ)句

select sid,type,id1,id2,decode(lmode,0,’None’,1,’Null’,2,’Row share’,3,’Row Exclusive’,4,’Share’,5,’Share Row Exclusive’,6,’Exclusive’) lock_mode,decode(request,0,’None’,1,’Null’,2,’Row share’,3,’Row Exclusive’,4,’Share’,5,’Share Row Exclusive’,6,’Exclusive’) request_mode,blockfrom v$lockwhere sid in(139,145)order by sid;

查的是v$lock,看看這個(gè)鎖的狀況,好執(zhí)行一下,結(jié)果

SQL> select sid,type,id1,id2,decode(lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode, 2 3 decode(request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') request_mode,blockfrom v$lock 4 5 where sid in(139,145) 6 order by sid; SID TY ID1 ID2 LOCK_MODE REQUEST_MODE BLOCK---------- -- ---------- ---------- ------------------- ------------------- ---------- 139 TM 51857 0 Row Exclusive None 0 139 TX 458775 238 Exclusive None 1 145 TM 51857 0 Row Exclusive None 0 145 TX 458775 238 None Exclusive 0

139和145都出現(xiàn)了,139的TM和TX鎖沒(méi)變,一開(kāi)始執(zhí)行的139,后面執(zhí)行的145,139一開(kāi)始執(zhí)行的,持有TX和TM鎖,145的TM鎖LOCK_MODE為Row Exclusive,持有145和139的TM鎖的ID1相同就是對(duì)象還一樣,也就是說(shuō)139和145都在這個(gè)51857對(duì)象上加了RX鎖;但是145的TX鎖行的REQUEST_MODE的值是Exclusive出現(xiàn)了Exclusive,也就是145被139這個(gè)事務(wù)鎖住了。

然后我們看139的TX這行,BLOCK的值是1說(shuō)明阻塞了別人,阻塞了145,而145 TX的REQUEST_MODE是Exclusive,它正在請(qǐng)求Exclusive鎖,也就是被鎖住了

通過(guò)這個(gè)我們看到一些問(wèn)題,但是我們知道這個(gè)鎖出現(xiàn)這個(gè)問(wèn)

題,也不見(jiàn)得有問(wèn)題,因?yàn)殒i住很正常,139一旦提交以后,145馬上就獲取到這個(gè)鎖了

2)關(guān)于等待鎖中的ID1和ID2

另外從結(jié)果我們可能發(fā)現(xiàn)一個(gè)問(wèn)題

139 TX 458775 238 Exclusive None 1 145 TX 458775 238 None Exclusive 0

我們看到139會(huì)話和145會(huì)話的TX鎖的ID1和ID2是相同的,這里的145的鎖狀態(tài)的ID1和ID2并不是145會(huì)話的事務(wù)信息,145會(huì)話的TX鎖的REQUEST_MODE為Exclusive說(shuō)明它在請(qǐng)求一個(gè)鎖,這個(gè)例子中145自己本身的事務(wù)還沒(méi)有開(kāi)始,這時(shí)查詢v$transaction并沒(méi)有145會(huì)話的事務(wù)。

TX鎖REQUEST_MODE為Exclusive時(shí),這里的ID1和ID2的值是被請(qǐng)求鎖的事務(wù)信息,這里在請(qǐng)求139會(huì)話的鎖,這里ID1和ID2的值就是139會(huì)話的信息

當(dāng)145得到鎖以后,本例中這時(shí)145會(huì)話開(kāi)始了一個(gè)事務(wù),這里的ID1和ID2 的值會(huì)自動(dòng)改變?yōu)?45事務(wù)的信息,REQUEST_MODE為Exclusive的鎖ID1和ID2的信息始終是被請(qǐng)求的持有鎖的事務(wù)的信息,有多個(gè)事務(wù)等待同一個(gè)鎖,前一個(gè)持有鎖的事務(wù)釋放鎖后,一個(gè)新事務(wù)得到了這個(gè)鎖,這時(shí)隊(duì)列中的其它事務(wù)的Exclusive狀態(tài)的鎖信息的ID1和ID2都變?yōu)榱诉@個(gè)新持有鎖的事務(wù)的信息。

如果145事務(wù)在請(qǐng)求鎖之前,145已經(jīng)開(kāi)始了一個(gè)事務(wù),也就是它已經(jīng)持有了事務(wù)鎖,這時(shí)的結(jié)果會(huì)把它本身的事務(wù)鎖也列出,并且ID1和ID2的值是145事務(wù)的信息,同時(shí)也會(huì)列出它正在請(qǐng)求的鎖的信息,這條信息的ID1和ID2是被請(qǐng)求鎖的信息

做出了下面的一個(gè)例子的結(jié)果

SID TY ID1 ID2 LOCK_MODE REQUEST_MODE BLOCK---------- -- ---------- ---------- ------------------- ------------------- ---------- 148 TX 262165 242 None Exclusive 0 148 TM 51857 0 Row Exclusive None 0 148 TX 524327 303 Exclusive None 0 150 TX 262165 242 Exclusive None 1 150 TM 51857 0 Row Exclusive None 0

148會(huì)話本身持有一個(gè)TX鎖

148 TX 524327 303 Exclusive None 0

這條信息的ID1和ID2的信息是它本身事務(wù)的信息,148會(huì)話還請(qǐng)求一個(gè)TX鎖

148 TX 262165 242 None Exclusive 0

這條信息的ID1和ID2的信息是148正在請(qǐng)求的被請(qǐng)求鎖的事務(wù)的信息,這里正在請(qǐng)求150正在持有的鎖,所以這行的ID1和ID2列出了150事務(wù)的信息

有一行

150 TX 262165 242 Exclusive None 1

這行的BLOCK為1,說(shuō)明150事務(wù)它持有的鎖有別的事務(wù)正在等待,正好和148正在請(qǐng)求鎖對(duì)應(yīng),驗(yàn)證了前面的分析

八、三個(gè)事務(wù)的鎖爭(zhēng)用

1)三個(gè)事務(wù)爭(zhēng)同一個(gè)鎖

我們?cè)俅蜷_(kāi)一個(gè)會(huì)話,再新建一個(gè)會(huì)話,以hr用戶身份連接

先查一下SID

SQL> select sid from v$mystat where rownum=1; SID---------- 136

這個(gè)新的當(dāng)前會(huì)話的SID是136,接著前面的實(shí)驗(yàn),也去做同樣的一個(gè)操作

update employees set last_name=last_name||’b’ where department_id=60;

它肯定也被鎖住

執(zhí)行結(jié)果

SQL> update employees set last_name=last_name||'b' where department_id=60;

暫時(shí)無(wú)返回值,也被鎖住,這里是136,現(xiàn)在是139 145 和136操作,139應(yīng)該把145和136鎖住了

再去查一個(gè)語(yǔ)句

select sid,type, decode(request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') request_mode from v$enqueue_lock where sid in(145,136);

根據(jù)分析兩個(gè)被鎖住的是145和136,查的是v$enqueue_lock,這里面它會(huì)只是把誰(shuí)被鎖住了誰(shuí)給列出來(lái),請(qǐng)求鎖的被列出來(lái),執(zhí)行一下,這里訪問(wèn)的是v$enqueue_lock

執(zhí)行結(jié)果

SQL> select sid,type, decode(request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') request_mode from v$enqueue_lock where sid in(145,136); 2 3 4 5 SID TY REQUEST_MODE---------- -- ------------------- 145 TX Exclusive 136 TX Exclusive

我們看145和136都在,v$enqueue_lock列出的都在請(qǐng)求鎖,145和136都在請(qǐng)求事務(wù)鎖,都被別人鎖住了,其實(shí)139鎖住了145 和 136,根據(jù)語(yǔ)句執(zhí)行的順序,145是第一個(gè)被鎖住的,136是第二個(gè)被鎖住的

這里面如果我139釋放了的話,139把145和136同時(shí)鎖住了,第一個(gè)獲得鎖的應(yīng)該是145,再就是136,鎖是可以排隊(duì)的。

我們看一個(gè)TX鎖這個(gè)鎖是139的,這個(gè)鎖把145和136同時(shí)鎖住了,145和136會(huì)到139下面去排隊(duì),先是145,后面是136要過(guò)來(lái)排隊(duì),139釋放以后,145第一個(gè)獲取,第一個(gè)獲得鎖,有可能獲得鎖以后145又把136鎖住了。

如果它們獲取一樣的資源,145把136鎖住了,如果說(shuō)139釋放以后,145獲取的資源和136獲取的資源不一樣的話,這兩個(gè)可以同時(shí)獲取到鎖。通過(guò)這個(gè)我們可以看出并記住鎖是排隊(duì)的。

2)v$lock中BLOCK字段的值

舉一個(gè)三個(gè)事務(wù)爭(zhēng)用相同鎖的例子,查詢v$lock視圖的結(jié)果

SQL> select sid,type,id1,id2,decode(lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode, 2 3 decode(request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') request_mode,block 4 from v$lock 5 where sid in(132,135,139) 6 order by sid;
SID TY ID1 ID2 LOCK_MODE REQUEST_MODE BLOCK---------- -- ---------- ---------- ------------------- ------------------- ---------- 132 TM 51857 0 Row Exclusive None 0 132 TX 655370 242 Exclusive None 1 135 TM 51857 0 Row Exclusive None 0 135 TX 655370 242 None Exclusive 0 139 TM 51857 0 Row Exclusive None 0 139 TX 655370 242 None Exclusive 06 rows selected.

這三個(gè)事務(wù)開(kāi)始執(zhí)行的順序是132,135,139,這時(shí)132事務(wù)的信息是ID1:655370 ,ID2:242,135和139會(huì)話中的事務(wù)還沒(méi)有開(kāi)始,執(zhí)行rollback釋放第一個(gè)事務(wù)占用的鎖,然后執(zhí)行相同的語(yǔ)句

得到的結(jié)果是:

SID TY ID1 ID2 LOCK_MODE REQUEST_MODE BLOCK---------- -- ---------- ---------- ------------------- ------------------- ---------- 135 TM 51857 0 Row Exclusive None 0 135 TX 327683 338 Exclusive None 1 139 TM 51857 0 Row Exclusive None 0 139 TX 327683 338 None Exclusive 0

132事務(wù)釋放鎖后,第一個(gè)排隊(duì)的135得到了鎖,得到鎖后135會(huì)話中的事務(wù)就開(kāi)始了,這時(shí)135會(huì)話中事務(wù)的信息是ID1:327683,ID2:338,這時(shí)它鎖住了139,139還在等待,39會(huì)話中的事務(wù)仍然沒(méi)有開(kāi)始

不管是1個(gè)事務(wù)還是2個(gè)事務(wù)在等待鎖,持有鎖的事務(wù)的信息的BLOCK都為1,這個(gè)字段并不是說(shuō)明有多少個(gè)事務(wù)在等待鎖,只是說(shuō)明有沒(méi)有事務(wù)在等待這個(gè)鎖

等待鎖的139會(huì)話

在第一次查詢時(shí)的結(jié)果

139 TX 655370 242 None Exclusive 0

在第二次查詢時(shí)的結(jié)果

139 TX 327683 338 None Exclusive 0

ID1和ID2的值變化了,但都是139它等待的當(dāng)前正在持有這個(gè)鎖的事務(wù)的信息

九、鎖的時(shí)間

我們找一個(gè)非常有意義的一個(gè)

select a.sid blocker_sid,a.serial#,a.username as blocker_username,b.type,decode(b.lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode,b.ctime as time_held,c.sid as waiter_sid,decode(c.request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') request_mode,c.ctime time_waited from v$lock b, v$enqueue_lock c, v$session a where a.sid = b.sid and b.id1= c.id1(+) and b.id2 = c.id2(+) and c.type(+) = 'TX' and b.type = 'TX' and b.block = 1order by time_held, time_waited;

這個(gè)sql語(yǔ)句是我們用的最多的一個(gè)sql語(yǔ)句,它做一件什么事情呢?

SQL> select a.sid blocker_sid,a.serial#,a.username as blocker_username,b.type,decode(b.lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode, 2 3 b.ctime as time_held,c.sid as waiter_sid, 4 decode(c.request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') request_mode, 5 c.ctime time_waited 6 from v$lock b, v$enqueue_lock c, v$session awhere a.sid = b.sid and b.id1= c.id1(+) and b.id2 = c.id2(+) and c.type(+) = 'TX' and b.type = 'TX' and b.block = 1 7 8 order by time_held, time_waited;BLOCKER_SID SERIAL# BLOCKER_USERNAME TY LOCK_MODE TIME_HELD WAITER_SID REQUEST_MODE TIME_WAITED----------- ---------- ------------------------------ -- ------------------- ---------- ---------- ------------------- ----------- 139 2746 HR TX Exclusive 3909 136 Exclusive 1790 139 2746 HR TX Exclusive 3909 145 Exclusive 2931

前兩個(gè)字段,BLOCKER_SID為139和SERIAL#為2746標(biāo)明一個(gè)會(huì)話,這個(gè)會(huì)話使用BLOCKER_USERNAME為hr用戶登陸的,它的TY是TX鎖,它持有TIME_HELD為3909厘秒。

第一行WAITER_SID為136事務(wù),TIME_WAITED等待了1790這么長(zhǎng)時(shí)間,也就是說(shuō)136目前在等待139,就是136被139鎖住了,139持有鎖的時(shí)間是TIME_HELD 3909這么長(zhǎng)了,WAITER_SID 136等待TIME_WAITED 1790這么長(zhǎng)了,有了時(shí)間了就能判斷這個(gè)鎖是不是有沒(méi)有問(wèn)題。

還有一個(gè)136等待了1790這么長(zhǎng)的時(shí)間,145等待139等待了2931這么長(zhǎng)時(shí)間,就說(shuō)明145比136等的時(shí)間長(zhǎng)了,過(guò)了一段時(shí)間再執(zhí)行一次上面的命令

SQL> select a.sid blocker_sid,a.serial#,a.username as blocker_username,b.type,decode(b.lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode, 2 3 b.ctime as time_held,c.sid as waiter_sid, 4 decode(c.request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') request_mode, 5 c.ctime time_waitedfrom v$lock b, v$enqueue_lock c, v$session a 6 7 where a.sid = b.sid and b.id1= c.id1(+) and b.id2 = c.id2(+) and c.type(+) = 'TX' and b.type = 'TX' and b.block = 1 8 order by time_held, time_waited;BLOCKER_SID SERIAL# BLOCKER_USERNAME TY LOCK_MODE TIME_HELD WAITER_SID REQUEST_MODE TIME_WAITED----------- ---------- ------------------------------ -- ------------------- ---------- ---------- ------------------- ----------- 139 2746 HR TX Exclusive 6334 136 Exclusive 4215 139 2746 HR TX Exclusive 6334 145 Exclusive 5356

145等待的時(shí)間比136時(shí)間長(zhǎng),也就是從某種意義上來(lái)講145它排在136的前面,這個(gè)命令是有意義的

我們就看TIME_WAITED列,再看TIME_HELD,如果你持有時(shí)間太長(zhǎng)了,也就是說(shuō)明你這個(gè)事務(wù)遲遲不提交,就根據(jù)BLOCKER_SID和SERIAL#這里是139和2746,就可以執(zhí)行一個(gè)sql語(yǔ)句

可以用

alter system kill session ‘139,2746’;

把它kill掉,執(zhí)行這個(gè)命令,執(zhí)行它以后,它就可以把139給kill掉,kill以后它就會(huì)自動(dòng)回滾

系統(tǒng)管理員sys會(huì)話中做一下

SQL> alter system kill session '139,2746';System altered.

kill以后我們看,139已經(jīng)kill掉了,這時(shí)我們看145

SQL> update employees set last_name=last_name||'b' where department_id=60;5 rows updated.

145的等待狀態(tài)解除了,update操作成功了,也就是145現(xiàn)在持有了鎖,136仍在等待,136還被鎖著得不到執(zhí)行,因?yàn)?45又把136鎖了

我們?cè)偃ゲ?/p>

SQL> select a.sid blocker_sid,a.serial#,a.username as blocker_username,b.type,decode(b.lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode,b.ctime as time_held,c.sid as waiter_sid, 2 3 4 decode(c.request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') request_mode, 5 c.ctime time_waited 6 from v$lock b, v$enqueue_lock c, v$session awhere a.sid = b.sid and b.id1= c.id1(+) and b.id2 = c.id2(+) and c.type(+) = 'TX' and b.type = 'TX' and b.block = 1 7 8 order by time_held, time_waited;BLOCKER_SID SERIAL# BLOCKER_USERNAME TY LOCK_MODE TIME_HELD WAITER_SID REQUEST_MODE TIME_WAITED----------- ---------- ------------------------------ -- ------------------- ---------- ---------- ------------------- ----------- 145 1015 HR TX Exclusive 221 136 Exclusive 221

現(xiàn)在是145持有鎖,但它阻塞了WAITER_SID 為136的會(huì)話,139會(huì)話就沒(méi)鎖了

我們把剛才的事務(wù)都回滾了,在139會(huì)話中執(zhí)行

SQL> rollback;rollback*ERROR at line 1:ORA-00028: your session has been killed

看出session 139已經(jīng)被kill了,再把145的會(huì)話回滾了

SQL> rollback;Rollback complete.

再把136的會(huì)話回滾了

SQL> update employees set last_name=last_name||'b' where department_id=60;5 rows updated.SQL> rollback;Rollback complete.

136會(huì)話在145會(huì)話回滾后得到了執(zhí)行,最終它也得到了鎖

為了試驗(yàn)把它也回滾了

十、一個(gè)事務(wù)多個(gè)TM鎖

一個(gè)事務(wù)修改多行,產(chǎn)生一個(gè)TX鎖,可以在多個(gè)表上產(chǎn)生多個(gè)TM鎖,一個(gè)事務(wù)只產(chǎn)生一個(gè)事務(wù)鎖TX鎖

我們?cè)谝粋€(gè)事務(wù)里面多執(zhí)行幾條sql語(yǔ)句

update employees set last_name=last_name||'a' where department_id=60;update departments set department_name='unknow' where department_id=10;update locations set city='unknown' where location_id=1100;

在一個(gè)hr會(huì)話

SQL> select sid from v$mystat where rownum=1; SID--------- 132

先執(zhí)行一條update

SQL> update employees set last_name=last_name||'a' where department_id=60;5 rows updated.

更新了employees這個(gè)表

第二個(gè)語(yǔ)句,它接著更新departments

SQL> update departments set department_name='unknow' where department_id=10;1 row updated.

都是一個(gè)事務(wù)里面的,下面語(yǔ)句是更新locations

SQL> update locations set city='unknown' where location_id=1100;1 row updated.

更新了三個(gè)語(yǔ)句,然后我們?cè)偈褂?/p>

select sid,type,id1,id2,decode(lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode,decode(request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive')request_mode,blockfrom v$lockwhere sid=132;

再去查132這個(gè)會(huì)話它持有鎖的情況,在sys用戶會(huì)話中執(zhí)行結(jié)果

SQL> select sid,type,id1,id2,decode(lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode, 2 3 decode(request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive')request_mode,block 4 from v$lock 5 where sid=132;
SID TY ID1 ID2 LOCK_MODE REQUEST_MODE BLOCK---------- -- ---------- ---------- ------------------- ------------------- ---------- 132 TM 51857 0 Row Exclusive None 0 132 TM 51852 0 Row Exclusive None 0 132 TM 51847 0 Row Exclusive None 0 132 TX 589860 329 Exclusive None 0

一個(gè)會(huì)話的一個(gè)事務(wù)它修改了三個(gè)表,對(duì)三個(gè)表產(chǎn)生TM鎖,它產(chǎn)生了一個(gè)TX鎖,TX鎖就只有一個(gè)。

十一、transactions和dml_locks參數(shù)

再看一個(gè)sql語(yǔ)句

select name,value from v$parameter where name in(‘transactions’,’dml_locks’);

可以獲得的TX鎖定的總個(gè)數(shù)由初始化參數(shù)transactions決定,而可以獲得的TM鎖定的個(gè)數(shù)則由初始化參數(shù)dml_locks決定

transactions參數(shù)表示Oracle一個(gè)實(shí)例最多可有的事務(wù)數(shù)

dml_locks參數(shù)表示一個(gè)Oracle實(shí)例中最多可產(chǎn)生的TM鎖就是表級(jí)鎖的數(shù)量

對(duì)整個(gè)數(shù)據(jù)庫(kù)來(lái)講

它能獲得的TX鎖和TM鎖的總數(shù)由’transactions’和’dml_locks’它倆限制

如果這兩個(gè)參數(shù)過(guò)小的話

有可能影響并發(fā)的事務(wù)的數(shù)量以及訪問(wèn)的表的數(shù)量

我們執(zhí)行一下看有多大

SQL> select name,value from v$parameter where name in('transactions','dml_locks');NAME VALUE--------------- ----------dml_locks 748transactions 187

這個(gè)有時(shí)候也會(huì)碰到一些問(wèn)題,結(jié)果中一個(gè)dml_locks是748,一個(gè)transactions是187,對(duì)數(shù)據(jù)庫(kù)來(lái)講,同時(shí)可以有187個(gè)事務(wù)可以同時(shí)運(yùn)行,而鎖的數(shù)量,同時(shí)修改的表可以有700多個(gè)。

一般的我們把這個(gè)都修改的抬高一些,比如把transactions修改為300,比如dml_locks我們修改成1500,可以給它增加,到底該不該增加,我們有一個(gè)查詢

select resource_name as "R_N",current_utilization as "C_U",max_utilization as "M_U",initial_allocation as "I_U" from v$resource_limit where resource_name in('transactions','dml_locks');

這個(gè)很有用,很有幫助,有v$resource_limit這個(gè)視圖,我們大家可以查一下,里面有好多的信息

我們先查這一個(gè)transactions和dml_locks參數(shù)

SQL> select resource_name as "R_N",current_utilization as "C_U",max_utilization as "M_U",initial_allocation as "I_U"from v$resource_limitwhere resource_name in('transactions','dml_locks'); 2 3R_N C_U M_U I_U------------------------------ ---------- ---------- --------------------dml_locks 3 48 748transactions 2 9 187

R_N這個(gè)列是資源名字,如dml_locks是資源名,C_U是current_utilization當(dāng)前已經(jīng)使用的數(shù)目,當(dāng)前鎖定了3個(gè)表,M_U是max_utilization最大同時(shí)使用的數(shù)目,最大鎖過(guò)48個(gè),I_U是initial_allocation初始可分配的數(shù)量,最大可分配的748

這是dml_locks,當(dāng)前C_U是3個(gè),最大可以是I_U是748,M_U為48是曾經(jīng)達(dá)到的最大值是48,只要這個(gè)48沒(méi)達(dá)到748,說(shuō)明我這個(gè)dml_locks沒(méi)出現(xiàn)過(guò)問(wèn)題

那么transactions,曾經(jīng)最大是9個(gè),最大可以是187,這都沒(méi)問(wèn)題,v$resource_limit視圖我們查一下訪問(wèn)一下,里面有很多資源

SQL> select resource_name as "R_N",current_utilization as "C_U",max_utilization as "M_U",initial_allocation as "I_U"from v$resource_limit; 2R_N C_U M_U I_U------------------------------ ---------- ---------- --------------------processes 27 37 150sessions 31 42 170enqueue_locks 13 22 2300enqueue_resources 17 38 968ges_procs 0 0 0ges_ress 0 0 0ges_locks 0 0 0ges_cache_ress 0 0 0ges_reg_msgs 0 0 0ges_big_msgs 0 0 0ges_rsv_msgs 0 0 0gcs_resources 0 0 0gcs_shadows 0 0 0dml_locks 3 48 748temporary_table_locks 0 0 UNLIMITEDtransactions 2 9 187branches 0 0 187cmtcallbk 0 2 187sort_segment_locks 0 1 UNLIMITEDmax_rollback_segments 11 11 187max_shared_servers 1 1 UNLIMITEDparallel_max_servers 0 2 4022 rows selected.

只要這個(gè)M_U的值沒(méi)有跟I_U的值相等,當(dāng)然不可能超過(guò),沒(méi)有跟它相等就說(shuō)明我設(shè)置的參數(shù)都沒(méi)有問(wèn)題,比如有人經(jīng)常說(shuō)這個(gè)processes、這個(gè)sessions是不是設(shè)小了,連不上可以看看sessions的M_U的值有沒(méi)有超過(guò)I_U的值,有沒(méi)有等于它,等于它說(shuō)明可能就有問(wèn)題

記住v$resource_limit這個(gè)很有意義,這里講了和事務(wù)相關(guān)的一些操作

十二、死鎖

1)死鎖的發(fā)生

Oracle里面還有一種鎖叫死鎖,Oracle一直這么說(shuō),Oracle中只要產(chǎn)生死鎖一定是你的應(yīng)用寫(xiě)的有問(wèn)題,碰到死鎖的時(shí)候Oracle自動(dòng)會(huì)釋放,會(huì)殺掉一個(gè)事務(wù),一個(gè)死鎖會(huì)產(chǎn)生一個(gè)trc文件,我們來(lái)看什么叫死鎖一個(gè)事務(wù)要修改一個(gè)資源,A事務(wù)修改了這個(gè)資源,B事務(wù)修改了另一個(gè)資源,A事務(wù)修改了一個(gè)資源以后在這個(gè)資源上加了鎖了,事務(wù)修改了另一個(gè)資源后也加了鎖。

A想持有B正在修改的這個(gè)資源,但已被B鎖住了A修改了一個(gè)資源但是它還想修改B正在修改的資源但已被B鎖住A被B鎖住了B修改了一個(gè)資源后又想去修改A正在修改的資源B被A鎖住了

產(chǎn)生死鎖,并且這個(gè)結(jié)它解不開(kāi),因?yàn)?#xff0c;這時(shí)只有A回滾了以后,B才能持有A現(xiàn)在擁有的資源

死鎖以后會(huì)有什么現(xiàn)象呢?

我把原來(lái)實(shí)驗(yàn)的會(huì)話都給它rollback,并在新會(huì)話中實(shí)驗(yàn),在session1里面,我更新100

SQL> select sid from v$mystat where rownum=1; SID---------- 150 SQL> update employees set last_name=last_name||'a'
where employee_id=100; 21 row updated.

我把100給鎖住了

然后在 session2里面呢?

SQL> select sid from v$mystat where rownum=1; SID---------- 148 SQL> update employees set last_name=last_name||'b'where employee_id=101; 21 row updated.

把101給鎖住了,A里面把100鎖住了,B把101鎖住了,然后session1想去:

SQL> update employees set last_name=last_name||'c' where employee_id=101;

想去鎖B鎖住的資源,已被B鎖住了,這時(shí)A被B鎖住了,然后session2中:

SQL> update employees set last_name=last_name||'d' where employee_id=100;

也在等待鎖,B又被A鎖住了,形成一個(gè)死循環(huán)了,這時(shí)在A里面出現(xiàn)

SQL> update employees set last_name=last_name||'c' where employee_id=101;update employees set last_name=last_name||'c' where employee_id=101 *ERROR at line 1:ORA-00060: deadlock detected while waiting for resource

這時(shí)候A會(huì)話?cǎi)R上出一個(gè)問(wèn)題,另外一個(gè)會(huì)話B中我們回車以后,這個(gè)A會(huì)話一下子檢測(cè)到死鎖,被回滾了,馬上被回滾了,這里回滾的不是A會(huì)話中的整個(gè)事務(wù),只是被回滾了一條語(yǔ)句,就是把造成死鎖的那條語(yǔ)句給回滾了,這個(gè)事務(wù)中前面其它語(yǔ)句沒(méi)有影響,并沒(méi)有回滾整個(gè)的事務(wù)

如果這時(shí)查詢A會(huì)話,查詢后可以得知這條語(yǔ)句前執(zhí)行的語(yǔ)句仍然有效,也就是當(dāng)死鎖發(fā)生的時(shí)候,Oracle馬上會(huì)檢測(cè),同時(shí)將其中一個(gè)事務(wù)的一條造成死鎖的語(yǔ)句給自動(dòng)回滾

這里是回滾了第一個(gè)會(huì)話造成死鎖的語(yǔ)句,就是請(qǐng)求第二個(gè)會(huì)話占有的鎖但是未得到鎖的語(yǔ)句,但這時(shí)第二個(gè)會(huì)話請(qǐng)求的鎖,第一個(gè)會(huì)話仍然占有,既然如此,死循環(huán)被解除了,這樣在在造成死鎖的兩個(gè)會(huì)話中解除了死鎖。

我們執(zhí)行rollback將其中一個(gè)會(huì)話全部回滾

SQL> rollback;Rollback complete.

并且這里又把第一個(gè)會(huì)話中占用鎖的語(yǔ)句回滾后

第二個(gè)會(huì)話中等待鎖的語(yǔ)句得到了執(zhí)行

SQL> update employees set last_name=last_name||'d' where employee_id=100;1 row updated.

把第二個(gè)會(huì)話也回滾

SQL> rollback;Rollback complete.

當(dāng)死循環(huán)發(fā)生的時(shí)候會(huì)做幾件事情,第一個(gè)Oracle自動(dòng)的對(duì)死鎖自動(dòng)的檢測(cè),而且還能快速檢測(cè),而且把其中一個(gè)事務(wù)給回滾,但只是回滾部分sql語(yǔ)句

2)死鎖的信息

同時(shí)當(dāng)死鎖發(fā)生的時(shí)候會(huì)出現(xiàn)一件很重要的事情,Oracle會(huì)記錄下死鎖的信息

死鎖發(fā)生的時(shí)候

[oracle@redhat4 bdump]$ pwd/u01/app/oracle/admin/jiagulun/bdump

在這個(gè)目錄里面

[oracle@redhat4 bdump]$ lsalert_jiagulun.log jiagulun_lgwr_13577.trc jiagulun_mmnl_6638.trcjiagulun_cjq0_13651.trc jiagulun_lgwr_13643.trc jiagulun_p000_6646.trcjiagulun_lgwr_13460.trc jiagulun_lgwr_6626.trc jiagulun_p001_6648.trc

有alert日志alert_jiagulun.log,alert日志是數(shù)據(jù)庫(kù)的總?cè)罩?#xff0c;可以查看這個(gè)alert日志cat alert_jiagulun.log

執(zhí)行結(jié)果

[oracle@redhat4 bdump]$ cat alert_jiagulun.logMon Apr 11 13:38:53 2016Starting ORACLE instance (normal)LICENSE_MAX_SESSION = 0LICENSE_SESSIONS_WARNING = 0Shared memory segment for instance monitoring createdTue Nov 21 06:45:15 2017MMNL absent for 63369 secs; Foregrounds taking overMMNL absent for 63369 secs; Foregrounds taking overMMNL absent for 63369 secs; Foregrounds taking overTue Nov 21 08:14:17 2017ORA-00060: Deadlock detected. More info in file /u01/app/oracle/admin/jiagulun/udump/jiagulun_ora_21608.trc.Tue Nov 21 08:25:31 2017ORA-00060: Deadlock detected. More info in file /u01/app/oracle/admin/jiagulun/udump/jiagulun_ora_21608.trc.

在alert日志里面會(huì)自動(dòng)把死鎖信息給列出來(lái),說(shuō)死鎖發(fā)生了

如:

Tue Nov 21 08:25:31 2017ORA-00060: Deadlock detected. More info in file /u01/app/oracle/admin/jiagulun/udump/jiagulun_ora_21608.trc.

在信息里面可以得到死鎖對(duì)應(yīng)的trc文件

/u01/app/oracle/admin/jiagulun/udump/jiagulun_ora_21608.trc

總結(jié)

以上是生活随笔為你收集整理的oracle decode_错过血亏!一文搞懂Oracle锁相关视图及相关操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

在线观看中文字幕 | 免费av在线网 | 91色在线观看 | 色综合天天爱 | 成人一级片在线观看 | 日本性生活一级片 | 国产三级av在线 | 中文字幕丝袜制服 | 免费视频18| 久久久不卡影院 | 伊人av综合 | av大片免费看 | 一区二区三区四区五区六区 | 欧美性爽爽| 午夜精品久久 | 人人草在线视频 | 成片免费观看视频 | 久草视频播放 | 黄色成人91| 久久久久久久久久亚洲精品 | 亚洲日韩中文字幕 | 国产九色在线播放九色 | 国产精品大片在线观看 | 亚洲伊人网在线观看 | 综合久久精品 | www日韩在线观看 | 国模视频一区二区三区 | 中文字幕在线观看91 | 夜夜狠狠 | 97人人澡人人爽人人模亚洲 | 欧美一级艳片视频免费观看 | av免费观看高清 | 一区二区三区四区在线 | 国产专区视频在线观看 | 久久久影视 | av在线电影免费观看 | 亚洲天堂在线观看完整版 | 日韩日韩日韩日韩 | 一区二区不卡在线观看 | 日韩欧美一区二区在线观看 | 极品国产91在线网站 | 欧美性另类 | 伊人资源站| 99久久精品视频免费 | 久久五月网 | 4438全国亚洲精品在线观看视频 | 日韩欧美一区二区三区视频 | 国产美腿白丝袜足在线av | 欧美91视频 | 日韩大片在线看 | 一区二区三区动漫 | 色a网| 视频三区 | www.久久久.cum| www.香蕉 | www.日本色 | 夜夜夜夜夜夜操 | 2021国产精品 | 欧美日韩一区二区久久 | 亚洲情婷婷 | 亚洲欧洲精品视频 | 日韩性久久 | 天天曰天天干 | 亚洲五月 | 久久久久国产精品一区 | 麻豆影视网站 | 成人在线播放免费观看 | 91在线视频播放 | 偷拍精偷拍精品欧洲亚洲网站 | wwwww.国产| 色婷av| 欧美日韩不卡一区 | 高清av免费看 | av免费看看| 精品二区久久 | 人人草人人草 | 视频在线播放国产 | 精品999久久久| 成人av在线看 | 亚洲国产播放 | 亚洲成人一二三 | 欧美另类交在线观看 | 亚洲精品视频免费在线 | 黄色在线观看污 | 久久久久久蜜av免费网站 | 人人射| av在线色 | 日韩网站在线 | 亚洲精品88欧美一区二区 | 久久精彩| 国产精品午夜久久 | 久久精品99国产精品酒店日本 | 精品久久一二三区 | 91精品视频一区 | 欧洲亚洲国产视频 | 国产aa免费视频 | 日本在线观看一区 | 成人久久免费视频 | 国产精品久久久久久久久搜平片 | 免费视频你懂的 | 成 人 黄 色 视频 免费观看 | 日韩精品中文字幕在线播放 | 五月色丁香 | 91在线91拍拍在线91 | 精品国产一区二区三区久久久久久 | 国产日产欧美在线观看 | 国产丝袜美腿在线 | 91亚州 | 国产资源免费在线观看 | 日韩黄色网络 | 亚洲激情六月 | 国产香蕉视频 | 一区二区视频在线观看免费 | 日本中文字幕视频 | 亚洲视频电影在线 | av青草| 91少妇精拍在线播放 | 天天干夜夜干 | 久久一久久 | 黄在线免费看 | 99一级片 | 在线免费av网站 | 日本久久99 | 日韩影视大全 | 精品国产黄色片 | 激情综合色图 | 天天干天天干天天射 | 91视频一8mav | 波多野结衣精品在线 | 综合国产在线 | 黄色在线网站噜噜噜 | 日韩欧美在线观看 | 亚洲久草在线 | 久草视频在线免费看 | 天天爱天天插 | 日韩色在线观看 | 国产精品11 | 成人小视频在线播放 | 国产黄色精品网站 | 精品美女国产在线 | 国产精品日韩欧美 | 欧美性猛片 | 久久久久这里只有精品 | 久久久午夜电影 | 国产一级片免费播放 | 欧美国产精品一区二区 | 五月花婷婷 | 色婷婷综合成人av | 国产精品视频资源 | 在线免费黄色 | av网站免费线看精品 | 91视频免费播放 | 精品国产精品久久一区免费式 | 日本在线视频网址 | 伊人婷婷色 | 99热精品久久 | 激情婷婷色 | 国产香蕉97碰碰久久人人 | 欧美日高清视频 | 久久男人视频 | av网站免费线看精品 | 六月激情| 日韩av网页 | a级免费观看 | 精品一区二区在线观看 | 在线观看免费av网 | 久久久久中文字幕 | 国产精品丝袜在线 | 中文字幕传媒 | 中文字幕在线观看视频免费 | 国产又粗又猛又色又黄视频 | 欧美日本三级 | 人人插人人搞 | 午夜影视一区 | 国产一区二区不卡视频 | av色图天堂网 | 久久精品爱爱视频 | 97国产大学生情侣酒店的特点 | 国产伦理一区二区三区 | 天天插天天色 | 在线www色| 99精品久久久久久久 | 亚洲欧洲av | 色婷婷88av视频一二三区 | 999电影免费在线观看 | 国产精品一区二区三区在线免费观看 | 97在线看片 | 国产亚洲在线 | 视频在线观看亚洲 | av中文在线影视 | 久久伊人爱 | 亚洲日本欧美 | 精品国产日本 | 深夜福利视频一区二区 | 91精品天码美女少妇 | 成人三级av | 久久伦理| 久久久久激情电影 | 国产高清一 | 欧美国产91 | 国产精品久久久电影 | 97免费视频在线播放 | 欧洲精品码一区二区三区免费看 | 992tv人人网tv亚洲精品 | 一区二区三区四区在线免费观看 | 伊人中文在线 | 日韩免费成人av | 手机在线看永久av片免费 | 精品国产伦一区二区三区观看说明 | 在线观看深夜视频 | 色网站在线免费 | 欧美va天堂在线电影 | 日本精品一二区 | 国产区精品在线观看 | 亚洲综合成人在线 | 久久尤物电影视频在线观看 | 国产精品久久久久久久久久99 | 精品久久久久久久久久久久久久久久久久 | 亚洲最大的av网站 | 毛片的网址 | 亚洲三级黄色 | 91九色九色| 亚洲在线精品视频 | 中文字幕在线观看免费高清电影 | 97视频入口免费观看 | 亚一亚二国产专区 | 欧美日韩性| 国产专区第一页 | 天天干亚洲 | 五月婷婷色丁香 | 成人h视频| 操一草| 91亚洲国产成人久久精品网站 | 国产在线97 | 日韩免费视频观看 | 久久亚洲国产精品 | 国产精品精品国产 | 伊人婷婷激情 | 国产最新在线视频 | 97av精品 | 亚洲一区二区三区91 | 日日爱网址 | 亚洲精品成人网 | 人人爽人人 | 91喷水 | 午夜av免费在线观看 | 插婷婷| 五月天六月色 | 欧美一级片在线免费观看 | 激情视频免费观看 | 激情综合五月天 | 色香蕉在线 | 在线观看岛国av | 日本黄区免费视频观看 | 91成人免费视频 | 狠狠躁日日躁夜夜躁av | 日韩欧美视频免费看 | 97麻豆视频| 永久免费毛片在线观看 | 欧美在线不卡一区 | 人人干97 | 日韩一级电影网站 | 狠狠色丁香婷婷综合视频 | 国产亚洲精品综合一区91 | 久久精品国产精品亚洲 | 18岁免费看片 | 国产亚洲小视频 | 日韩城人在线 | 国产黄在线播放 | 最新超碰在线 | 日韩av看片 | 777久久久 | 在线观看免费版高清版 | 国产黄色av网站 | 亚洲精品456在线播放乱码 | 成人中文字幕+乱码+中文字幕 | 亚洲精品一区二区三区新线路 | 国产成人av电影在线观看 | 8x成人在线| 国产成人精品一区二区三区免费 | 久久在视频 | 亚洲精品高清在线 | 久保带人 | 激情狠狠干| 青草视频在线 | www.久久婷婷 | 国产成人精品一区二区三区福利 | 国产精品成人久久久久 | 国内精品久久久久影院一蜜桃 | www.99av| 91高清一区 | 色88久久| 亚洲精品国产精品99久久 | 黄色在线网站噜噜噜 | 成人91在线观看 | 亚洲欧洲在线视频 | 高清精品久久 | 精品久久久久久国产91 | 丁香一区二区 | 国产成人av网址 | 综合国产在线 | 亚洲不卡在线 | 在线观看一区二区精品 | 免费精品人在线二线三线 | 特级aaa毛片 | 91成人免费观看视频 | av免费观看网址 | 91久久人澡人人添人人爽欧美 | 中文av字幕在线观看 | 特级毛片aaa| 欧美另类老妇 | 日韩久久午夜一级啪啪 | 国产字幕在线播放 | 欧美综合国产 | 久久久一本精品99久久精品 | 黄色午夜 | 91精品国产福利在线观看 | 欧美日韩国产精品久久 | 天天操天天摸天天射 | 96亚洲精品久久久蜜桃 | 国产麻豆剧果冻传媒视频播放量 | 一区二区三区视频在线 | 亚洲永久精品视频 | 亚洲综合色av | 精品国产日本 | 免费能看的黄色片 | 91成人精品国产刺激国语对白 | 国产精品一区免费在线观看 | 国产精品24小时在线观看 | 深夜免费福利在线 | 欧美精品在线观看免费 | 青青河边草免费直播 | 17videosex性欧美| 久久综合亚洲鲁鲁五月久久 | 婷婷六月天天 | 婷婷国产在线 | 午夜精品成人一区二区三区 | 国产伦理剧 | 国产一区二区精品久久 | av网站在线观看播放 | 欧美性脚交 | 波多野结衣视频一区二区三区 | 国产人成看黄久久久久久久久 | 97精品视频在线播放 | 97精品国产91久久久久久久 | 久久涩涩网站 | 伊人婷婷久久 | 日本成人黄色片 | 91九色精品国产 | 97视频免费看| 国产中文字幕在线免费观看 | 久久精品79国产精品 | 国际精品久久久 | 亚洲区精品视频 | 国际精品久久久 | 国产黄色电影 | av在线免费网站 | 狠狠躁夜夜躁人人爽超碰91 | 中文字幕日韩电影 | 不卡电影一区二区三区 | 精品国产一区二区三区久久久蜜月 | 色香蕉在线视频 | 亚洲不卡123 | 欧美精品一级视频 | 在线 视频 亚洲 | 精品国产乱码久久久久久久 | 日韩在观看线 | 国色天香在线观看 | 国产亚洲精品中文字幕 | 色综合久久综合中文综合网 | 国产精品理论片在线观看 | 黄色av电影在线观看 | 91成人精品观看 | 四虎影视av | 日韩欧美精品一区二区三区经典 | 美腿丝袜一区二区三区 | 欧洲一区二区三区精品 | 麻豆成人小视频 | 国产精久久久久久妇女av | 日韩爱爱网站 | 999久久久久久久久久久 | 国产精品乱码一区二区视频 | 91免费视频国产 | 麻豆国产精品永久免费视频 | 国产亚洲精品久久久久久网站 | 中文字幕免费观看 | 成年人免费看片网站 | 国产精品theporn | 激情电影影院 | 国产一区二区三区高清播放 | avv天堂| 超碰公开在线观看 | 久草在线高清视频 | 在线免费观看视频你懂的 | 色网站在线 | 午夜视频福利 | 成人国产精品免费观看 | 日韩在线视频一区二区三区 | 99r国产精品| 日日草夜夜操 | 9999激情 | 亚洲一级性 | 在线v片| 日韩资源在线播放 | 亚洲人成人99网站 | 欧美激情另类文学 | 九热在线 | 久久国产午夜精品理论片最新版本 | 少妇高潮流白浆在线观看 | 国产亚洲免费的视频看 | 国产a国产| 成人av动漫在线观看 | 久久草草热国产精品直播 | 亚洲最新av在线网址 | 91热在线| www.天天射.com| 久久精品久久99精品久久 | 亚洲专区 国产精品 | 日日干天天 | 天天综合精品 | 日日夜夜精品视频 | 中文字幕欲求不满 | 99精品国产亚洲 | 久草网站在线观看 | 国产精品一区二区av日韩在线 | 国产精品一区二区久久精品爱微奶 | 久久久久国产视频 | 婷婷六月丁 | 国产精品电影一区二区 | 亚洲人成免费网站 | 免费中文字幕在线观看 | 精品国精品自拍自在线 | 日韩中文字幕免费视频 | 黄色com | 久久久私人影院 | 看av在线| 欧美日韩一区二区免费在线观看 | 国产精品久久久久久久久久了 | 国产精品国产三级国产aⅴ无密码 | 色欧美成人精品a∨在线观看 | 热久在线 | 国产精品免费在线观看视频 | 久久久久综合精品福利啪啪 | 国产免费成人av | 亚洲日本在线视频观看 | 一级性视频| 成人免费在线网 | 亚洲一区美女视频在线观看免费 | 成年人毛片在线观看 | 黄色a视频| 在线观看成人国产 | 四虎成人精品 | 免费看污网站 | 国产999精品| 久久精品视频99 | 成人9ⅰ免费影视网站 | 成人一级电影在线观看 | 韩国精品福利一区二区三区 | 毛片久久久 | 国产原创在线观看 | 91在线资源 | 成人av免费播放 | 国产在线永久 | 成人网中文字幕 | 国产一区二区三区四区大秀 | 色综合www| 久久综合毛片 | 99国产精品久久久久老师 | 午夜精品一区二区三区免费视频 | 青草视频在线 | 亚洲视频专区在线 | 亚洲首页 | 免费成人在线视频网站 | 国产精品区一区 | 国产成人精品一区二区三区在线 | 亚洲精品自在在线观看 | 亚洲精品视频在线观看免费 | japanesexxxxfreehd乱熟 | 超碰人人草人人 | 国产精品久久久久四虎 | 国产看片网站 | 精品视频9999 | 中文在线a∨在线 | 永久免费的av电影 | 欧美一级久久久 | 久久视屏网 | 国产黄色片免费观看 | 国产一级视屏 | 日韩欧美v | 91亚色免费视频 | 久久精品99国产精品日本 | 一级α片| 欧美日韩在线视频一区二区 | 亚洲第五色综合网 | 人人超碰免费 | 99在线观看精品 | 国产在线观看免费 | 亚洲另类视频在线 | 久久xx视频 | 中文字幕在线观看一区二区三区 | 99色亚洲| 香蕉视频网站在线观看 | av大全免费在线观看 | 在线成人一区 | 九九热免费在线视频 | 国产精品久久久久久久免费大片 | 成年人在线播放视频 | 色婷婷综合久久久久中文字幕1 | 91九色综合| 亚洲国产精品激情在线观看 | 亚洲综合五月天 | 91网在线观看 | 精品国产一区二区三区四区vr | 亚洲天堂在线观看完整版 | 日日草天天干 | 天天综合成人 | 国产麻豆果冻传媒在线观看 | 久草视频在 | 91久久精品日日躁夜夜躁国产 | 久久久麻豆视频 | 亚洲精品中文在线 | 男女激情片在线观看 | 色婷婷av一区 | 手机成人av | 成人综合免费 | 黄色免费网 | 成人黄在线观看 | 综合在线色 | 天堂中文在线视频 | 亚洲一级电影视频 | 一本一本久久a久久精品综合 | 日韩av女优视频 | 欧美综合国产 | 性色av一区二区三区在线观看 | 天天干,天天操,天天射 | 2023av| 99热这里是精品 | 亚洲欧美乱综合图片区小说区 | www.国产在线视频 | 精品国产色 | 夜色.com| 欧美日一级片 | 韩国av一区二区三区在线观看 | www日韩在线观看 | 色综合久久五月天 | 国产毛片久久 | 玖玖在线免费视频 | 亚洲,播放 | 国产高清视频在线播放一区 | 亚洲永久精品一区 | 色狠狠综合 | 亚洲精品免费在线播放 | 日韩欧美一区二区三区免费观看 | 99色99| 在线观看一区 | 国产精品九九热 | 国产人成在线观看 | 精品国产精品久久 | 亚洲精品videossex少妇 | 97精品国产91久久久久久久 | 国际精品网 | 免费看的黄网站软件 | 精品免费久久久久久 | 激情中文在线 | 人人狠狠综合久久亚洲 | 亚洲精品在线免费 | 亚洲综合激情网 | 在线播放一区二区三区 | 日韩在线理论 | 久久精品久久久久电影 | 又黄又网站| av大片免费看 | h视频日本| 国产色拍拍拍拍在线精品 | 精品久久五月天 | 国产成人a亚洲精品v | 国产一线天在线观看 | 91精品色| 黄色a一级片 | 天天干天天想 | 丝袜制服综合网 | 日本aaaa级毛片在线看 | 国产精品资源在线观看 | 免费av大全| 亚洲美女免费视频 | 伊人六月| 伊人久久在线观看 | 久久综合网色—综合色88 | 九九久久久 | 国产精品乱码久久久久久1区2区 | 韩国av一区二区 | 久久人人爽爽 | 丝袜制服天堂 | 精品视频久久 | 美女久久 | 成人黄色在线电影 | 97超碰人人看 | 国产又粗又长的视频 | 三级小视频在线观看 | 丝袜美腿亚洲 | 国产亚洲视频中文字幕视频 | 五月婷婷,六月丁香 | 一级黄色大片 | 亚洲四虎 | 综合色影院 | 午夜视频在线观看一区二区 | 正在播放国产一区 | 亚洲三级黄色 | 久久久久久福利 | 91麻豆精品国产91久久久久久 | 精品产品国产在线不卡 | 午夜三级大片 | 在线观看色视频 | 欧美日韩不卡在线观看 | 亚洲欧美日韩一级 | 99久久精品日本一区二区免费 | 大胆欧美gogo免费视频一二区 | 国产高清免费在线播放 | 国产精品麻豆三级一区视频 | 亚洲va欧美va人人爽春色影视 | 国产高清在线观看av | 久艹在线观看视频 | 亚洲成年人在线播放 | 天天综合天天做天天综合 | 91麻豆精品国产午夜天堂 | 日韩av一区二区在线 | 国产精品久久久网站 | 97碰视频| 成人午夜片av在线看 | 精品亚洲国产视频 | 国产成人免费 | 西西44人体做爰大胆视频 | 亚洲专区在线播放 | 精品国产欧美一区二区 | 欧美色插 | 亚洲精品乱码久久久久久久久久 | 亚洲五月六月 | 天天干天天天 | 亚洲精品国产精品国自产在线 | 亚洲四虎| av在线免费在线 | 国产成人三级在线播放 | 黄色大全免费网站 | 2017狠狠干| www.久久色 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 99视频在线观看一区三区 | 久久久久久久久久免费 | 香蕉视频在线免费 | 亚洲高清视频在线观看免费 | 日韩欧美视频在线观看免费 | 亚洲3级 | 国产免费人人看 | 久艹在线观看视频 | 91九色蝌蚪国产 | 久草久视频 | 国产一级黄色免费看 | 草久在线观看视频 | 中文字幕在线免费观看视频 | 西西444www | 久久天天综合网 | 日韩一区二区久久 | 久久69av| 91桃色在线播放 | 精品免费视频 | 欧美精品一二 | 国产尤物在线 | 美女视频又黄又免费 | av大片免费在线观看 | 久久99久久久久久 | a'aaa级片在线观看 | 亚洲欧美视频网站 | 中文字幕在线电影 | 亚洲无线视频 | 色亚洲激情 | 区一区二在线 | 一区二区久久 | 91精品色 | 欧美综合久久 | 亚洲一区二区视频在线播放 | 少妇性aaaaaaaaa视频 | 亚洲精品日韩一区二区电影 | 精品国产亚洲一区二区麻豆 | 黄色片毛片 | 五月开心综合 | av天天澡天天爽天天av | 91视频在线看 | 国产精品美女久久久免费 | 99精品在线 | 久草久热 | 麻豆久久久久 | 99精品视频网站 | 久草视频免费在线观看 | 香蕉视频久久 | 91刺激视频 | 99久久99| 日韩黄色av网站 | 99久久精品免费看国产一区二区三区 | 午夜av网站| 天天撸夜夜操 | 日韩av不卡在线播放 | 91成人黄色 | a成人v在线 | 成人免费观看视频大全 | 91经典在线| 亚洲天堂社区 | 国产亚洲永久域名 | 国产青青青 | 欧美在线一二 | 高清日韩一区二区 | 亚洲一本视频 | 日韩二区在线播放 | 欧美成人性网 | 天天色天天上天天操 | 日韩欧美视频免费看 | 亚洲一级免费观看 | 亚洲一区在线看 | 日本成人免费在线观看 | 久久久午夜精品福利内容 | 欧美精品久久久久久久 | 精品96久久久久久中文字幕无 | 人人添人人澡人人澡人人人爽 | 国产精品成人免费精品自在线观看 | 国产精品第7页 | 国产九九九精品视频 | 国产精品免费在线 | 97精品国产 | 久久精品人人做人人综合老师 | 精品产品国产在线不卡 | 在线观看视频中文字幕 | 日韩在线视频网 | 国产99久久九九精品 | 久久精品国产久精国产 | 久久精品国产亚洲aⅴ | 久黄色 | www.综合网.com| 欧美日韩另类视频 | 奇米网网址 | 国产呻吟在线 | 五月婷婷视频在线观看 | 中文字幕欧美激情 | 黄色三几片 | 午夜手机电影 | av在线a | 永久免费视频国产 | 久久久久欧美精品999 | 午夜91在线 | 国产黑丝一区二区三区 | 久久国产精品99久久久久久老狼 | 久久久久精 | 草久久精品 | 在线中文字幕视频 | 中文字幕资源在线观看 | 久久视精品 | 欧美视频在线观看免费网址 | 成人a视频片观看免费 | 最新av免费在线观看 | 免费在线色电影 | 国色天香av | 四虎影视成人永久免费观看亚洲欧美 | 91日韩在线 | 久久久这里有精品 | 欧美一级免费片 | 中文字幕欧美日韩va免费视频 | 成人资源在线播放 | 国产视频欧美视频 | 在线观看视频你懂的 | 欧美一级淫片videoshd | 日韩在线观看视频网站 | 99久久精品午夜一区二区小说 | 日韩av一区在线观看 | 久久99久国产精品黄毛片入口 | 毛片网在线观看 | 成人av电影在线播放 | 久久久91精品国产一区二区三区 | 亚洲欧美视频在线播放 | 国产精品毛片久久蜜 | 片黄色毛片黄色毛片 | 免费视频久久久久久久 | 西西www444| 我要看黄色一级片 | 久久99热这里只有精品 | 成人在线你懂得 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 日韩av片无码一区二区不卡电影 | 精品视频在线视频 | 国产人成精品一区二区三 | 97网在线观看 | 久久久久久蜜桃一区二区 | 久久伊人综合 | 一区二区三区免费看 | 西西人体www444 | 97电影院网 | 91中文在线视频 | 福利视频在线看 | 99久久精品国产观看 | 天天干天天干天天色 | 精品一区二区日韩 | 成年人视频免费在线播放 | 三级黄色大片在线观看 | 日韩久久久久久久久久 | 天天爱天天操天天爽 | 久久国产亚洲精品 | 免费在线观看日韩 | 久久手机精品视频 | 日韩午夜在线 | 色综合久久中文字幕综合网 | 国内精品久久久久久久影视简单 | 在线а√天堂中文官网 | 精品中文字幕在线播放 | 欧美一二三区播放 | 四虎影视成人永久免费观看视频 | 国产网站在线免费观看 | 免费日韩av片 | 超碰免费97| 成人精品视频久久久久 | 最近日本mv字幕免费观看 | 午夜av在线免费 | 99久高清在线观看视频99精品热在线观看视频 | 色网站在线观看 | 国产剧情一区二区在线观看 | 成年人网站免费在线观看 | 天天插狠狠插 | 激情六月婷婷久久 | 人人舔人人干 | 四虎天堂 | 日韩中文字幕免费看 | 看国产黄色片 | 激情视频91| 亚洲欧美日韩精品一区二区 | 成人黄在线观看 | 超碰97在线资源站 | 亚洲精品久久久久久国 | 91av在线精品 | 日韩一区二区三免费高清在线观看 | 97超碰色偷偷 | 97人人艹 | 午夜视频色 | 国产亚洲综合性久久久影院 | 国产精品久久久999 国产91九色视频 | 四虎在线免费观看 | 丝袜制服天堂 | 中文字幕精品久久 | 国产精品尤物视频 | 国产精品久久久久婷婷 | 日韩精品一区二区三区丰满 | 亚洲精品国产高清 | 最近中文字幕免费大全 | 国产一区二区久久久久 | 黄色大片入口 | 色就色,综合激情 | 中文字幕乱在线伦视频中文字幕乱码在线 | 成人av电影在线播放 | 91在线播放综合 | 97超碰成人 | 欧美日韩一区二区三区在线观看视频 | 奇米影视777影音先锋 | 成在人线av| 999成人| 日本精品久久久久影院 | 日韩一区二区久久 | 久久视频99 | 国产福利91精品一区 | 成人黄色av免费在线观看 | www.午夜视频 | 91色九色| 精品在线一区二区 | 香蕉国产91| 五月婷婷综合在线 | 成人a级黄色片 | 日韩在线小视频 | 久久综合毛片 | 不卡视频一区二区三区 | 97超碰人人爱 | 欧美在线91| 亚洲干视频在线观看 | 久久高清免费观看 | 欧美一区免费观看 | 99在线视频网站 | 精品国产aⅴ麻豆 | 日韩免费观看一区二区 | 中文字幕在线观看第一区 | 国产xx视频 | 成人午夜影院 | 日韩精品一区二区三区免费观看视频 | 亚洲一二三区精品 | 亚洲五月激情 | 久久精品一区二区三区国产主播 | 五月天电影免费在线观看一区 | 精品久久久久久综合日本 | 欧美一级日韩免费不卡 | 国产一区二区在线免费观看 | 97人人澡人人添人人爽超碰 | se婷婷 | 伊人久久av| 国产在线精品二区 | 中文字幕在线看人 | av色一区 | www一起操 | 午夜免费福利视频 | 日韩成人在线免费观看 | 久久精品国产亚洲aⅴ | 99视频国产精品 | 成人高清在线观看 | 一级黄色大片在线观看 | 日日天天狠狠 | 成人av电影网址 | bbw av| 黄色片网站av | 国产亚洲婷婷免费 | 最近日本中文字幕 | 91视频啊啊啊 | 久久久国产一区二区 | 韩国在线一区 | 91精品视屏 | 国产成人三级一区二区在线观看一 | 国产一区在线免费观看 | 国产亚洲字幕 | 亚洲精品乱码久久久一二三 | 免费视频一区二区 | 成年人电影免费在线观看 | 在线一区观看 | 夜夜操天天操 | 国产精品一区二区三区观看 | 久久草网站 | 中文字幕视频观看 | 人人狠狠综合久久亚洲 | 国产麻豆精品95视频 | 人人澡人人添人人爽一区二区 | 丁香六月激情 | 日韩美女av在线 | 天天人人 | 人人干网站 | 五月婷婷六月丁香在线观看 | 国产人成在线观看 | 久久伦理 | 九九视频一区 | 中文字幕丰满人伦在线 | 99久久99久久精品 | 黄色日视频| www狠狠操| 亚洲精品1234区 | 狠狠夜夜 | 欧美激情视频一二区 | 成人黄色短片 | 久久精品理论 | 国产精品美女久久久久久免费 | 日韩乱码中文字幕 | 日韩视频精品在线 | 久久久麻豆 | 在线精品在线 | 午夜精品婷婷 | 久久久久久久久久网 | 日韩理论片在线 | 在线免费色视频 | 日韩精品久久久免费观看夜色 | 色在线网站| 美女免费视频一区二区 | 亚洲欧美国产视频 | 91亚洲精品久久久蜜桃网站 | 日韩特黄一级欧美毛片特黄 | 国产精品毛片一区二区 | 国产亚洲婷婷免费 | 亚洲欧美日韩在线一区二区 | 国产成人精品在线播放 | 69国产精品视频免费观看 | 欧美亚洲另类在线视频 | 激情av综合 | 亚洲一区二区三区四区精品 | 成人欧美一区二区三区在线观看 | 美女免费电影 | 久久久私人影院 | 国产精品久久久久久久久费观看 | 国产精品夜夜夜一区二区三区尤 | 一区二区在线影院 | 久草在线资源观看 | 黄色一级片视频 | 色香com. | 狠狠操综合网 | av网址最新| 日韩精品在线免费播放 | 亚洲国产精品久久久久婷婷884 | 国产一区私人高清影院 | 黄在线免费看 | 日韩女同一区二区三区在线观看 | 99久久这里只有精品 | 色婷婷狠狠五月综合天色拍 | 成年人在线观看免费视频 | 国产麻豆剧果冻传媒视频播放量 | 中文在线亚洲 | 中文字幕在线观看一区二区 | 青春草免费在线视频 | 国产精品二区三区 | 在线视频日韩精品 | 色狠狠综合天天综合综合 | 97视频播放 | 国产在线观看二区 | 欧美日韩国产精品一区二区亚洲 |