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

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

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

    隨筆-314  評(píng)論-209  文章-0  trackbacks-0

    我的評(píng)論

    共3頁(yè): 上一頁(yè) 1 2 3 
    re: java命令詳解 xzc 2009-12-04 17:24  
    /bea/bea/jdk150_10/bin/java -server -Xms1024m -Xmx1024m -XX:MaxPermSize=256m -DIBSS_HOME=/bea/odsapp

    -Xms1024m 初始化內(nèi)存
    -Xmx1024m 最大內(nèi)存
    -DIBSS_HOME=/bea/odsapp
    IBSS_HOME屬性,通System.getProperties()來(lái)可獲得.
    re: java命令詳解 xzc 2009-12-04 17:24  
    1.4.1 JVM堆大小的調(diào)整

    Sun HotSpot 1.4.1使用分代收集器,它把堆分為三個(gè)主要的域:新域、舊域以及永久域。JVM生成的所有新對(duì)象放在新域中。一旦對(duì)象經(jīng)歷了一定數(shù)量的垃圾收集循環(huán)后,便獲得使用期并進(jìn)入舊域。

    在永久域中JVM則存儲(chǔ)class和method對(duì)象。就配置而言,永久域是一個(gè)獨(dú)立域并且不認(rèn)為是堆的一部分。下面介紹如何控制這些域的大小。可使用-Xms和-Xmx 控制整個(gè)堆的原始大小或最大值。

    下面的命令是把初始大小設(shè)置為128M:



    Java –Xms128m



    –Xmx256m為控制新域的大小,可使用-XX:NewRatio設(shè)置新域在堆中所占的比例。下面的命令把整個(gè)堆設(shè)置成128m,新域比率設(shè)置成3,即新域與舊域比例為1:3,新域?yàn)槎训?/4或32M:



    Java –Xms128m –Xmx128m



    –XX:NewRatio =3可使用-XX:NewSize和-XX:MaxNewsize設(shè)置新域的初始值和最大值。

    下面的命令把新域的初始值和最大值設(shè)置成64m:



    Java –Xms256m –Xmx256m –Xmn64m



    永久域默認(rèn)大小為4m。運(yùn)行程序時(shí),JVM會(huì)調(diào)整永久域的大小以滿足需要。每次調(diào)整時(shí),JVM會(huì)對(duì)堆進(jìn)行一次完全的垃圾收集。

    使用-XX:MaxPerSize標(biāo)志來(lái)增加永久域搭大小。在WebLogic Server應(yīng)用程序加載較多類時(shí),經(jīng)常需要增加永久域的最大值。當(dāng)JVM加載類時(shí),永久域中的對(duì)象急劇增加,從而使JVM不斷調(diào)整永久域大小。為了避免調(diào)整,可使用-XX:PerSize標(biāo)志設(shè)置初始值。下面把永久域初始值設(shè)置成32m,最大值設(shè)置成64m。



    Java -Xms512m -Xmx512m -Xmn128m

    -XX:PermSize=32m

    -XX:MaxPermSize=64m



    默認(rèn)狀態(tài)下,HotSpot在新域中使用復(fù)制收集器。該域一般分為三個(gè)部分。第一部分為Eden,用于生成新的對(duì)象。另兩部分稱為救助空間,當(dāng)Eden充滿時(shí),收集器停止應(yīng)用程序,把所有可到達(dá)對(duì)象復(fù)制到當(dāng)前的from救助空間,一旦當(dāng)前的from救助空間充滿,收集器則把可到達(dá)對(duì)象復(fù)制到當(dāng)前的to救助空間。

    From和to救助空間互換角色。維持活動(dòng)的對(duì)象將在救助空間不斷復(fù)制,直到它們獲得使用期并轉(zhuǎn)入舊域。使用-XX:SurvivorRatio可控制新域子空間的大小。

    同NewRation一樣,SurvivorRation規(guī)定某救助域與Eden空間的比值。比如,以下命令把新域設(shè)置成64m,Eden占32m,每個(gè)救助域各占16m:



    Java -Xms256m -Xmx256m -Xmn64m

    -XX:SurvivorRation =2



    如前所述,默認(rèn)狀態(tài)下HotSpot對(duì)新域使用復(fù)制收集器,對(duì)舊域使用標(biāo)記-清除-壓縮收集器。在新域中使用復(fù)制收集器有很多意義,因?yàn)閼?yīng)用程序生成的大部分對(duì)象是短壽命的。理想狀態(tài)下,所有過(guò)渡對(duì)象在移出Eden空間時(shí)將被收集。

    如果能夠這樣的話,并且移出Eden空間的對(duì)象是長(zhǎng)壽命的,那么理論上可以立即把它們移進(jìn)舊域,避免在救助空間反復(fù)復(fù)制。但是,應(yīng)用程序不能適合這種理想狀態(tài),因?yàn)樗鼈冇幸恍〔糠种虚L(zhǎng)壽命的對(duì)象。

    最好是保持這些中長(zhǎng)壽命的對(duì)象并放在新域中,因?yàn)閺?fù)制小部分的對(duì)象總比壓縮舊域廉價(jià)。為控制新域中對(duì)象的復(fù)制,可用-XX:TargetSurvivorRatio控制救助空間的比例(該值是設(shè)置救助空間的使用比例。

    如救助空間位1M,該值50表示可用500K)。該值是一個(gè)百分比,默認(rèn)值是50。當(dāng)較大的堆棧使用較低的sruvivorratio時(shí),應(yīng)增加該值到80至90,以更好利用救助空間。用-XX:maxtenuring threshold可控制上限。

    為放置所有的復(fù)制全部發(fā)生以及希望對(duì)象從eden擴(kuò)展到舊域,可以把MaxTenuring Threshold設(shè)置成0。設(shè)置完成后,實(shí)際上就不再使用救助空間了,因此應(yīng)把SurvivorRatio設(shè)成最大值以最大化Eden空間,設(shè)置如下:



    Java … -XX:MaxTenuringThreshold=0

    –XX:SurvivorRatio=50000 …

    set trimspool on
    set linesize 120
    set pagesize 2000
    set newpage 1
    set heading off
    set term off
    spool 'd:\exp.txt'
    select owner || ',' || table_name || '..' from all_tables;
    spool off
    re: Oracle UTL_FILE 用法例子 xzc 2009-09-25 16:18  
    CREATE OR REPLACE PROCEDURE UTL_FILE_TEST AS
    V_FILE UTL_FILE.FILE_TYPE;
    V_BUFFER VARCHAR2(32767);
    BEGIN
    V_FILE := UTL_FILE.FOPEN('UTL', 'UTL_FILE_TEST.txt', 'A');
    V_BUFFER := 'EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO';
    UTL_FILE.PUT_LINE(V_FILE, V_BUFFER);
    FOR I IN (SELECT 'UTL_FILE_TEST' RESULT FROM dual) LOOP
    UTL_FILE.PUT_LINE(V_FILE, I.RESULT);
    END LOOP;
    UTL_FILE.FCLOSE(V_FILE);
    END;
    --監(jiān)控索引是否使用

    alter index &index_name monitoring usage;

    alter index &index_name nomonitoring usage;

    select * from v$object_usage where index_name = &index_name;

    --求數(shù)據(jù)文件的I/O分布

    select df.name,phyrds,phywrts,phyblkrd,phyblkwrt,singleblkrds,readtim,writetim

    from v$filestat fs,v$dbfile df

    where fs.file#=df.file# order by df.name;

    --求某個(gè)隱藏參數(shù)的值

    col ksppinm format a54

    col ksppstvl format a54

    select ksppinm, ksppstvl

    from x$ksppi pi, x$ksppcv cv

    where cv.indx=pi.indx and pi.ksppinm like '\_%' escape '\' and pi.ksppinm like '%meer%';

    --求系統(tǒng)中較大的latch

    select name,sum(gets),sum(misses),sum(sleeps),sum(wait_time)

    from v$latch_children

    group by name having sum(gets) > 50 order by 2;

    --求歸檔日志的切換頻率(生產(chǎn)系統(tǒng)可能時(shí)間會(huì)很長(zhǎng))

    select start_recid,start_time,end_recid,end_time,minutes from (select test.*, rownum as rn

    from (select b.recid start_recid,to_char(b.first_time,'yyyy-mm-dd hh24:mi:ss') start_time,

    a.recid end_recid,to_char(a.first_time,'yyyy-mm-dd hh24:mi:ss') end_time,round(((a.first_time-b.first_time)*24)*60,2) minutes

    from v$log_history a,v$log_history b where a.recid=b.recid+1 and b.first_time > sysdate - 1

    order by a.first_time desc) test) y where y.rn < 30

    --求回滾段正在處理的事務(wù)

    select a.name,b.xacts,c.sid,c.serial#,d.sql_text

    from v$rollname a,v$rollstat b,v$session c,v$sqltext d,v$transaction e

    where a.usn=b.usn and b.usn=e.xidusn and c.taddr=e.addr

    and c.sql_address=d.address and c.sql_hash_value=d.hash_value order by a.name,c.sid,d.piece;

    --求出無(wú)效的對(duì)象

    select 'alter procedure '||object_name||' compile;'

    from dba_objects

    where status='INVALID' and wner='&' and object_type in ('PACKAGE','PACKAGE BODY');

    /

    select owner,object_name,object_type,status from dba_objects where status='INVALID';

    --求process/session的狀態(tài)

    select p.pid,p.spid,s.program,s.sid,s.serial#

    from v$process p,v$session s where s.paddr=p.addr;

    --求當(dāng)前session的狀態(tài)

    select sn.name,ms.value

    from v$mystat ms,v$statname sn

    where ms.statistic#=sn.statistic# and ms.value > 0;

    --求表的索引信息

    select ui.table_name,ui.index_name

    from user_indexes ui,user_ind_columns uic

    where ui.table_name=uic.table_name and ui.index_name=uic.index_name

    and ui.table_name like '&table_name%' and uic.column_name='&column_name';

    --顯示表的外鍵信息

    col search_condition format a54

    select table_name,constraint_name

    from user_constraints

    where constraint_type ='R' and constraint_name in (select constraint_name from user_cons_columns where column_name='&1');

    select rpad(child.table_name,25,' ') child_tablename,

    rpad(cp.column_name,17,' ') referring_column,rpad(parent.table_name,25,' ') parent_tablename,

    rpad(pc.column_name,15,' ') referred_column,rpad(child.constraint_name,25,' ') constraint_name

    from user_constraints child,user_constraints parent,

    user_cons_columns cp,user_cons_columns pc

    where child.constraint_type = 'R' and child.r_constraint_name = parent.constraint_name and

    child.constraint_name = cp.constraint_name and parent.constraint_name = pc.constraint_name and

    cp.position = pc.position and child.table_name ='&table_name'

    order by child.owner,child.table_name,child.constraint_name,cp.position;

    --顯示表的分區(qū)及子分區(qū)(user_tab_subpartitions)

    col table_name format a16

    col partition_name format a16

    col high_value format a81

    select table_name,partition_name,HIGH_VALUE from user_tab_partitions where table_name='&table_name'

    --使用dbms_xplan生成一個(gè)執(zhí)行計(jì)劃

    explain plan set statement_id = '&sql_id' for &sql;

    select * from table(dbms_xplan.display);

    --求某個(gè)事務(wù)的重做信息(bytes)

    select s.name,m.value

    from v$mystat m,v$statname s

    where m.statistic#=s.statistic# and s.name like '%redo size%';

    --求cache中緩存超過(guò)其5%的對(duì)象

    select o.owner,o.object_type,o.object_name,count(b.objd)

    from v$bh b,dba_objects o

    where b.objd = o.object_id

    group by o.owner,o.object_type,o.object_name

    having count(b.objd) > (select to_number(value)*0.05 from v$parameter where name = 'db_block_buffers');

    --求誰(shuí)阻塞了某個(gè)session(10g)

    select sid, username, event, blocking_session,

    seconds_in_wait, wait_time

    from v$session where state in ('WAITING') and wait_class != 'Idle';

    --求session的OS進(jìn)程ID

    col program format a54

    select p.spid "OS Thread", b.name "Name-User", s.program

    from v$process p, v$session s, v$bgprocess b

    where p.addr = s.paddr and p.addr = b.paddr

    UNION ALL

    select p.spid "OS Thread", s.username "Name-User", s.program

    from v$process p, v$session s where p.addr = s.paddr and s.username is not null;

    --查會(huì)話的阻塞

    col user_name format a32

    select /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username user_name, o.owner,o.object_name,s.sid,s.serial#

    from v$locked_object l,dba_objects o,v$session s

    where l.object_id=o.object_id and l.session_id=s.sid order by o.object_id,xidusn desc ;

    col username format a15

    col lock_level format a8

    col owner format a18

    col object_name format a32

    select /*+ rule */ s.username, decode(l.type,'tm','table lock', 'tx','row lock', null) lock_level, o.owner,o.object_name,s.sid,s.serial#

    from v$session s,v$lock l,dba_objects o

    where l.sid = s.sid and l.id1 = o.object_id(+) and s.username is not null ;

    --求等待的事件及會(huì)話信息/求會(huì)話的等待及會(huì)話信息

    select se.sid,s.username,se.event,se.total_waits,se.time_waited,se.average_wait

    from v$session s,v$session_event se

    where s.username is not null and se.sid=s.sid and s.status='ACTIVE' and se.event not like '%SQL*Net%' order by s.username;

    select s.sid,s.username,sw.event,sw.wait_time,sw.state,sw.seconds_in_wait

    from v$session s,v$session_wait sw

    where s.username is not null and sw.sid=s.sid and sw.event not like '%SQL*Net%' order by s.username;

    --求會(huì)話等待的file_id/block_id

    col event format a24

    col p1text format a12

    col p2text format a12

    col p3text format a12

    select sid,event,p1text, p1, p2text, p2, p3text, p3

    from v$session_wait

    where event not like '%SQL%' and event not like '%rdbms%' and event not like '%mon%' order by event;

    select name,wait_time from v$latch l where exists (select 1 from (select sid,event,p1text, p1, p2text, p2, p3text, p3

    from v$session_wait

    where event not like '%SQL%' and event not like '%rdbms%' and event not like '%mon%'

    ) x where x.p1= l.latch#);

    --求會(huì)話等待的對(duì)象

    col owner format a18

    col segment_name format a32

    col segment_type format a32

    select owner,segment_name,segment_type

    from dba_extents

    where file_id = &file_id and &block_id between block_id and block_id + blocks - 1;

    --求buffer cache中的塊信息

    select o.OBJECT_TYPE, substr(o.OBJECT_NAME,1,10) objname , b.objd , b.status, count(b.objd)

    from v$bh b, dba_objects o

    where b.objd = o.data_object_id and o.owner = '&1' group by o.object_type, o.object_name,b.objd, b.status ;

    --求日志文件的空間使用

    select le.leseq current_log_sequence#, 100*cp.cpodr_bno/le.lesiz percentage_full

    from x$kcccp cp,x$kccle le

    where le.leseq =cp.cpodr_seq;

    --求等待中的對(duì)象

    select /*+rule */ s.sid, s.username, w.event, o.owner, o.segment_name, o.segment_type,

    o.partition_name, w.seconds_in_wait seconds, w.state

    from v$session_wait w, v$session s, dba_extents o

    where w.event in (select name from v$event_name where parameter1 = 'file#'

    and parameter2 = 'block#' and name not like 'control%')

    and o.owner <> 'sys' and w.sid = s.sid and w.p1 = o.file_id and w.p2 >= o.block_id and w.p2 < o.block_id + o.blocks

    --求當(dāng)前事務(wù)的重做尺寸

    select value

    from v$mystat, v$statname

    where v$mystat.statistic# = v$statname.statistic# and v$statname.name = 'redo size';

    --喚醒smon去清除臨時(shí)段

    column pid new_value Smon

    set termout off

    select p.pid from sys.v_$bgprocess b,sys.v_$process p where b.name = 'SMON' and p.addr = b.paddr

    /

    set termout on

    oradebug wakeup &Smon

    undefine Smon

    --求回退率

    select b.value/(a.value + b.value),a.value,b.value from v$sysstat a,v$sysstat b

    where a.statistic#=4 and b.statistic#=5;

    --求DISK READ較多的SQL

    select st.sql_text from v$sql s,v$sqltext st

    where s.address=st.address and s.hash_value=st.hash_value and s.disk_reads > 300;

    --求DISK SORT嚴(yán)重的SQL

    select sess.username, sql.sql_text, sort1.blocks

    from v$session sess, v$sqlarea sql, v$sort_usage sort1

    where sess.serial# = sort1.session_num

    and sort1.sqladdr = sql.address

    and sort1.sqlhash = sql.hash_value and sort1.blocks > 200;

    --求對(duì)象的創(chuàng)建代碼

    column column_name format a36

    column sql_text format a99

    select dbms_metadata.get_ddl('TABLE','&1') from dual;

    select dbms_metadata.get_ddl('INDEX','&1') from dual;

    --求表的索引

    set linesize 131

    select a.index_name,a.column_name,b.status, b.index_type

    from user_ind_columns a,user_indexes b

    where a.index_name=b.index_name and a.table_name='&1';

    求索引中行數(shù)較多的

    select index_name,blevel,num_rows,CLUSTERING_FACTOR,status from user_indexes where num_rows > 10000 and blevel > 0

    select table_name,index_name,blevel,num_rows,CLUSTERING_FACTOR,status from user_indexes where status <> 'VALID'

    --求當(dāng)前會(huì)話的SID,SERIAL#

    select sid, serial# from v$session where audsid = SYS_CONTEXT('USERENV','SESSIONID');

    --求表空間的未用空間

    col mbytes format 9999.9999

    select tablespace_name,sum(bytes)/1024/1024 mbytes from dba_free_space group by tablespace_name;

    --求表中定義的觸發(fā)器

    select table_name,index_type,index_name,uniqueness from user_indexes where table_name='&1';

    select trigger_name from user_triggers where table_name='&1';

    --求未定義索引的表

    select table_name from user_tables where table_name not in (select table_name from user_ind_columns);

    --執(zhí)行常用的過(guò)程

    exec print_sql('select count(*) from tab');

    exec show_space2('table_name');

    --求free memory

    select * from v$sgastat where name='free memory';

    select a.name,sum(b.value) from v$statname a,v$sesstat b where a.statistic# = b.statistic# group by a.name;

    查看一下誰(shuí)在使用那個(gè)可以得回滾段,或者查看一下某個(gè)可以得用戶在使用回滾段,

    找出領(lǐng)回滾段不斷增長(zhǎng)的事務(wù),再看看如何處理它,是否可以將它c(diǎn)ommit,再不行

    就看看能否kill它,等等,查看當(dāng)前正在使用的回滾段的用戶信息和回滾段信息:

    set linesize 121

    SELECT r.name "ROLLBACK SEGMENT NAME ",l.sid "ORACLE PID",p.spid "SYSTEM PID ",s.username "ORACLE USERNAME"

    FROM v$lock l, v$process p, v$rollname r, v$session s

    WHERE l.sid = p.pid(+) AND s.sid=l.sid AND TRUNC(l.id1(+)/65536) = r.usn AND l.type(+) = 'TX' AND l.lmode(+) = 6 ORDER BY r.name;

    --查看用戶的回滾段的信息

    select s.username, rn.name from v$session s, v$transaction t, v$rollstat r, v$rollname rn

    where s.saddr = t.ses_addr and t.xidusn = r.usn and r.usn = rn.usn

    --生成執(zhí)行計(jì)劃

    explain plan set statement_id='a1' for &1;

    --查看執(zhí)行計(jì)劃

    select lpad(' ',2*(level-1))||operation operation,options,OBJECT_NAME,position from plan_table

    start with id=0 and statement_id='a1' connect by prior id=parent_id and statement_id='a1'

    --查看內(nèi)存中存的使用

    select decode(greatest(class,10),10,decode(class,1,'Data',2,'Sort',4,'Header',to_char(class)),'Rollback') "Class",

    sum(decode(bitand(flag,1),1,0,1)) "Not Dirty",sum(decode(bitand(flag,1),1,1,0)) "Dirty",

    sum(dirty_queue) "On Dirty",count(*) "Total"

    from x$bh group by decode(greatest(class,10),10,decode(class,1,'Data',2,'Sort',4,'Header',to_char(class)),'Rollback');

    --查看表空間狀態(tài)

    select tablespace_name,extent_management,segment_space_management from dba_tablespaces;

    select table_name,freelists,freelist_groups from user_tables;

    --查看系統(tǒng)請(qǐng)求情況

    SELECT DECODE (name, 'summed dirty write queue length', value)/

    DECODE (name, 'write requests', value) "Write Request Length"

    FROM v$sysstat WHERE name IN ( 'summed dirty queue length', 'write requests') and value>0;

    --計(jì)算data buffer命中率

    select a.value + b.value "logical_reads", c.value "phys_reads",

    round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO"

    from v$sysstat a, v$sysstat b, v$sysstat c

    where a.statistic# = 40 and b.statistic# = 41 and c.statistic# = 42;

    SELECT name, (1-(physical_reads/(db_block_gets+consistent_gets)))*100 H_RATIO FROM v$buffer_pool_statistics;

    --查看內(nèi)存使用情況

    select least(max(b.value)/(1024*1024),sum(a.bytes)/(1024*1024)) shared_pool_used,

    max(b.value)/(1024*1024) shared_pool_size,greatest(max(b.value)/(1024*1024),sum(a.bytes)/(1024*1024))-

    (sum(a.bytes)/(1024*1024)) shared_pool_avail,((sum(a.bytes)/(1024*1024))/(max(b.value)/(1024*1024)))*100 avail_pool_pct

    from v$sgastat a, v$parameter b where (a.pool='shared pool' and a.name not in ('free memory')) and b.name='shared_pool_size';

    --查看用戶使用內(nèi)存情況

    select username, sum(sharable_mem), sum(persistent_mem), sum(runtime_mem)

    from sys.v_$sqlarea a, dba_users b

    where a.parsing_user_id = b.user_id group by username;

    --查看對(duì)象的緩存情況

    select OWNER,NAMESPACE,TYPE,NAME,SHARABLE_MEM,LOADS,EXECUTIONS,LOCKS,PINS,KEPT

    from v$db_object_cache where type not in ('NOT LOADED','NON-EXISTENT','VIEW','TABLE','SEQUENCE')

    and executions>0 and loads>1 and kept='NO' order by owner,namespace,type,executions desc;

    select type,count(*) from v$db_object_cache group by type;

    --查看庫(kù)緩存命中率

    select namespace,gets, gethitratio*100 gethitratio,pins,pinhitratio*100 pinhitratio,RELOADS,INVALIDATIONS from v$librarycache

    --查看某些用戶的hash

    select a.username, count(b.hash_value) total_hash,count(b.hash_value)-count(unique(b.hash_value)) same_hash,

    (count(unique(b.hash_value))/count(b.hash_value))*100 u_hash_ratio

    from dba_users a, v$sqlarea b where a.user_id=b.parsing_user_id group by a.username;

    --查看字典命中率

    select (sum(getmisses)/sum(gets)) ratio from v$rowcache;

    --查看undo段的使用情況

    SELECT d.segment_name,extents,optsize,shrinks,aveshrink,aveactive,d.status

    FROM v$rollname n,v$rollstat s,dba_rollback_segs d

    WHERE d.segment_id=n.usn(+) and d.segment_id=s.usn(+);

    --無(wú)效的對(duì)象

    select owner,object_type,object_name from dba_objects where status='INVALID';

    select constraint_name,table_name from dba_constraints where status='INVALID';

    --求出某個(gè)進(jìn)程,并對(duì)它進(jìn)行跟蹤

    select s.sid,s.serial# from v$session s,v$process p where s.paddr=p.addr and p.spid=&1;

    exec dbms_system.SET_SQL_TRACE_IN_SESSION(&1,&2,true);

    exec dbms_system.SET_SQL_TRACE_IN_SESSION(&1,&2,false);

    --求出鎖定的對(duì)象

    select do.object_name,session_id,process,locked_mode

    from v$locked_object lo, dba_objects do where lo.object_id=do.object_id;

    --求當(dāng)前session的跟蹤文件

    SELECT p1.value || '/' || p2.value || '_ora_' || p.spid || '.ora' filename

    FROM v$process p, v$session s, v$parameter p1, v$parameter p2

    WHERE p1.name = 'user_dump_dest' AND p2.name = 'instance_name'

    AND p.addr = s.paddr AND s.audsid = USERENV('SESSIONID') AND p.background is null AND instr(p.program,'CJQ') = 0;

    --求對(duì)象所在的文件及塊號(hào)

    select segment_name,header_file,header_block

    from dba_segments where segment_name like '&1';

    --求對(duì)象發(fā)生事務(wù)時(shí)回退段及塊號(hào)

    select a.segment_name,a.header_file,a.header_block

    from dba_segments a,dba_rollback_segs b

    where a.segment_name=b.segment_name and b.segment_id='&1'

    --9i的在線重定義表

    /*如果在線重定義的表沒(méi)有主鍵需要?jiǎng)?chuàng)建主鍵*/

    exec dbms_redefinition.can_redef_table('cybercafe','announcement');

    create table anno2 as select * from announcement

    exec dbms_redefinition.start_redef_table('cybercafe','announcement','anno2');

    exec dbms_redefinition.sync_interim_table('cybercafe','announcement','anno2');

    exec dbms_redefinition.finish_redef_table('cybercafe','announcement','anno2');

    drop table anno2

    exec dbms_redefinition.abort_redef_table('cybercafe','announcement','anno2');

    --常用的logmnr腳本(cybercafe)

    exec sys.dbms_logmnr_d.build(dictionary_filename =>'esal',dictionary_location =>'/home/oracle/logmnr');

    exec sys.dbms_logmnr.add_logfile(logfilename=>'/home/oracle/oradata/esal/archive/1_24050.dbf', ptions=>sys.dbms_logmnr.new);

    exec sys.dbms_logmnr.add_logfile(logfilename=>'/home/oracle/oradata/esal/archive/1_22912.dbf', ptions=>sys.dbms_logmnr.addfile);

    exec sys.dbms_logmnr.add_logfile(logfilename=>'/home/oracle/oradata/esal/archive/1_22913.dbf', ptions=>sys.dbms_logmnr.addfile);

    exec sys.dbms_logmnr.add_logfile(logfilename=>'/home/oracle/oradata/esal/archive/1_22914.dbf', ptions=>sys.dbms_logmnr.addfile);

    exec sys.dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/logmnr/esal.ora');

    create table logmnr2 as select * from v$logmnr_contents;

    --與權(quán)限相關(guān)的字典

    ALL_COL_PRIVS表示列上的授權(quán),用戶和PUBLIC是被授予者

    ALL_COL_PRIVS_MADE表示列上的授權(quán),用戶是屬主和被授予者

    ALL_COL_RECD表示列上的授權(quán),用戶和PUBLIC是被授予者

    ALL_TAB_PRIVS表示對(duì)象上的授權(quán),用戶是PUBLIC或被授予者或用戶是屬主

    ALL_TAB_PRIVS_MADE表示對(duì)象上的權(quán)限,用戶是屬主或授予者

    ALL_TAB_PRIVS_RECD表示對(duì)象上的權(quán)限,用戶是PUBLIC或被授予者

    DBA_COL_PRIVS數(shù)據(jù)庫(kù)列上的所有授權(quán)

    DBA_ROLE_PRIVS顯示已授予用戶或其他角色的角色

    DBA_SYS_PRIVS已授予用戶或角色的系統(tǒng)權(quán)限

    DBA_TAB_PRIVS數(shù)據(jù)庫(kù)對(duì)象上的所有權(quán)限

    ROLE_ROLE_PRIVS顯示已授予用戶的角色

    ROLE_SYS_PRIVS顯示通過(guò)角色授予用戶的系統(tǒng)權(quán)限

    ROLE_TAB_PRIVS顯示通過(guò)角色授予用戶的對(duì)象權(quán)限

    SESSION_PRIVS顯示用戶現(xiàn)在可利用的所有系統(tǒng)權(quán)限

    USER_COL_PRIVS顯示列上的權(quán)限,用戶是屬主、授予者或被授予者

    USER_COL_PRIVS_MADE顯示列上已授予的權(quán)限,用戶是屬主或授予者

    USER_COL_PRIVS_RECD顯示列上已授予的權(quán)限,用戶是屬主或被授予者

    USER_ROLE_PRIVS顯示已授予給用戶的所有角色

    USER_SYS_PRIVS顯示已授予給用戶的所有系統(tǒng)權(quán)限

    USER_TAB_PRIVS顯示已授予給用戶的所有對(duì)象權(quán)限

    USER_TAB_PRIVS_MADE顯示已授予給其他用戶的對(duì)象權(quán)限,用戶是屬主

    USER_TAB_PRIVS_RECD顯示已授予給其他用戶的對(duì)象權(quán)限,用戶是被授予者

    --如何用dbms_stats分析表及模式?

    exec dbms_stats.gather_schema_stats(ownname=>'&USER_NAME',estimate_percent=>dbms_stats.auto_sample_size,

    method_opt => 'for all columns size auto',degree=> DBMS_STATS.DEFAULT_DEGREE);

    exec dbms_stats.gather_schema_stats(ownname=>'&USER_NAME',estimate_percent=>dbms_stats.auto_sample_size,cascade=>true);

    /*

    FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]

    FOR COLUMNS [size clause] column|attribute [size_clause] [,column|attribute [size_clause]...],

    where size_clause is defined as size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}

    integer--Number of histogram buckets. Must be in the range [1,254].

    REPEAT--Collects histograms only on the columns that already have histograms.

    AUTO--Oracle determines the columns to collect histograms based on data distribution and the workload of the columns.

    SKEWONLY--Oracle determines the columns to collect histograms based on the data distribution of the columns

    */
    報(bào)表縱列改為橫列展示:
    select case b.index_type
    when 1 then
    b.index_value
    else
    '0'
    end,
    case b.index_type
    when 2 then
    b.index_value
    else
    '0'
    end,
    case b.index_type
    when 3 then
    b.index_value
    else
    '0'
    end
    from TB_AUDIT_RATIO a, TB_AUDIT_INSTANCE b
    where a.audit_type = 'DD'
    and a.table_code = 'DAPDcdrstandfeeday'
    and a.index_id = b.index_id
    and b.lan_id = 701
    order by a.table_code, a.index_id
    9.5 I18N formatting 標(biāo)簽庫(kù)
    看到 I18N 就應(yīng)該想到知識(shí)“國(guó)際化”, I18N formatting 標(biāo)簽庫(kù)就是用于在 JSP 頁(yè)面中做國(guó)際化的動(dòng)作。在該標(biāo)簽庫(kù)中的標(biāo)簽一共有 12 個(gè),被分為了兩類,分別是:

    q 國(guó)際化核心標(biāo)簽: <fmt:setLocale> 、 <fmt:bundle> 、 <fmt:setBundle> 、 <fmt:message> 、 <fmt:param> 、 <fmt:requestEncoding> 。

    q 格式化標(biāo)簽: <fmt:timeZone> 、 <fmt:setTimeZone> 、 <fmt:formatNumber> 、 <fmt:parseNumber> 、 <fmt:formatDate> 、 <fmt:parseDate> 。

    下面只選擇其中常見(jiàn)的一些標(biāo)簽和屬性進(jìn)行介紹。

    9.5.1 用于設(shè)置本地化環(huán)境的 <fmt:setLocale> 標(biāo)簽
    <fmt:setLocale> 標(biāo)簽用于設(shè)置 Locale 環(huán)境。它的屬性和描述如表 9.17 所示:

    表 9.17   <fmt:setLocale> 標(biāo)簽屬性和說(shuō)明

    屬性
    描述

    value
    Locale 環(huán)境的指定,可以是 java.util.Locale 或 String 類型的實(shí)例

    scope
    Locale 環(huán)境變量的作用范圍(可選)


    下面看一個(gè)示例:

    <fmt:setLocale value="zh_TW"/>

    表示設(shè)置本地環(huán)境為繁體中文。

    9.5.2 用于資源文件綁定的 <fmt:bundle> 、 <fmt:setBundle> 標(biāo)簽
    這兩組標(biāo)簽用于資源配置文件的綁定,唯一不同的是 <fmt:bundle> 標(biāo)簽將資源配置文件綁定于它標(biāo)簽體中的顯示, <fmt:setBundle> 標(biāo)簽則允許將資源配置文件保存為一個(gè)變量,在之后的工作可以根據(jù)該變量來(lái)進(jìn)行。

    根據(jù) Locale 環(huán)境的不同將查找不同后綴的資源配置文件,這點(diǎn)在國(guó)際化的任何技術(shù)上都是一致的,通常來(lái)說(shuō),這兩種標(biāo)簽單獨(dú)使用是沒(méi)有意義的,它們都會(huì)與 I18N formatting 標(biāo)簽庫(kù)中的其他標(biāo)簽配合使用。它們的屬性和描述如表 9.18 所示:

    表 9.18   <fmt:bundle> 、 <fmt:setBundle> 標(biāo)簽屬性和說(shuō)明

    屬性
    描述

    basename
    資源配置文件的指定,只需要指定文件名而無(wú)須擴(kuò)展名,二組標(biāo)簽共有的屬性

    var
    <fmt:setBundle> 獨(dú)有的屬性,用于保存資源配置文件為一個(gè)變量

    scope
    變量的作用范圍


    下面看一個(gè)示例

    <fmt:setLocale value="zh_CN"/>

    <fmt:setBundle basename="applicationMessage" var="applicationBundle"/>

    該示例將會(huì)查找一個(gè)名為 applicationMessage_zh_CN.properties 的資源配置文件,來(lái)作為顯示的 Resource 綁定。

    9.5.3 用于顯示資源配置文件信息的 <fmt:message> 標(biāo)簽
    用于信息顯示的標(biāo)簽,將顯示資源配置文件中定義的信息。它的屬性和描述如表 9.19 所示:

    表 9.19   <fmt:message> 標(biāo)簽屬性和說(shuō)明

    屬性
    描述

    key
    資源配置文件的“鍵”指定

    bundle
    若使用 <fmt:setBundle> 保存了資源配置文件,該屬性就可以從保存的資源配置文件中進(jìn)行查找

    var
    將顯示信息保存為一個(gè)變量

    scope
    變量的作用范圍


    下面看一個(gè)示例:

    <fmt:setBundle basename="applicationMessage" var="applicationBundle"/>

    <fmt:bundle basename="applicationAllMessage">

    <fmt:message key="userName" />

    <p>

    <fmt:message key="passWord" bundle="${applicationBundle}" />

    </fmt:bundle>

    該示例使用了兩種資源配置文件的綁定的做法,“ applicationMessage ”資源配置文件利用 <fmt:setBundle> 標(biāo)簽被賦于了變量“ applicationBundle ”,而作為 <fmt:bundle> 標(biāo)簽定義的“ applicationAllMessage ”資源配置文件作用于其標(biāo)簽體內(nèi)的顯示。

    q 第一個(gè) <fmt:message> 標(biāo)簽將使用“ applicationAllMessage ”資源配置文件中“鍵”為“ userName ”的信息顯示。

    q 第二個(gè) <fmt:message> 標(biāo)簽雖然被定義在 <fmt:bundle> 標(biāo)簽體內(nèi),但是它使用了 bundle 屬性,因此將指定之前由 <fmt:setBundle> 標(biāo)簽保存的“ applicationMessage ”資源配置文件,該“鍵”為“ passWord ”的信息顯示。

    9.5.4 用于參數(shù)傳遞的 <fmt:param> 標(biāo)簽
    <fmt:param> 標(biāo)簽應(yīng)該位于 <fmt:message> 標(biāo)簽內(nèi),將為該消息標(biāo)簽提供參數(shù)值。它只有一個(gè)屬性 value 。

    <fmt:param> 標(biāo)簽有兩種使用版本,一種是直接將參數(shù)值寫在 value 屬性中,另一種是將參數(shù)值寫在標(biāo)簽體內(nèi)。

    9.5.6 用于為請(qǐng)求設(shè)置字符編碼的 <fmt:requestEncoding> 標(biāo)簽
    <fmt:requestEncoding> 標(biāo)簽用于為請(qǐng)求設(shè)置字符編碼。它只有一個(gè)屬性 value ,在該屬性中可以定義字符編碼。

    9.5.7 用于設(shè)定時(shí)區(qū)的 <fmt:timeZone> 、 <fmt:setTimeZone> 標(biāo)簽
    這兩組標(biāo)簽都用于設(shè)定一個(gè)時(shí)區(qū)。唯一不同的是 <fmt:timeZone> 標(biāo)簽將使得在其標(biāo)簽體內(nèi)的工作可以使用該時(shí)區(qū)設(shè)置, <fmt:setBundle> 標(biāo)簽則允許將時(shí)區(qū)設(shè)置保存為一個(gè)變量,在之后的工作可以根據(jù)該變量來(lái)進(jìn)行。它們的屬性和描述如表 9.20 所示:

    表 9.20   <fmt:timeZone> 、 <fmt:setTimeZone> 標(biāo)簽 屬性和說(shuō)明

    屬性
    描述

    value
    時(shí)區(qū)的設(shè)置

    var
    <fmt:setTimeZone> 獨(dú)有的屬性,用于保存時(shí)區(qū)為一個(gè)變量

    scope
    變量的作用范圍


    9.5.8 用于格式化數(shù)字的 <fmt:formatNumber> 標(biāo)簽
    <fmt: formatNumber > 標(biāo) 簽用于格式化數(shù)字。它的屬性和描述如表 9.21 所示:

    表 9.21   <fmt:formatNumber> 標(biāo)簽屬性和說(shuō)明

    屬性
    描述

    value
    格式化的數(shù)字,該數(shù)值可以是 String 類型或 java.lang.Number 類型的實(shí)例

    type
    格式化的類型

    pattern
    格式化模式

    var
    結(jié)果保存變量

    scope
    變量的作用范圍

    maxIntegerDigits
    指定格式化結(jié)果的最大值

    minIntegerDigits
    指定格式化結(jié)果的最小值

    maxFractionDigits
    指定格式化結(jié)果的最大值,帶小數(shù)

    minFractionDigits
    指定格式化結(jié)果的最小值,帶小數(shù)


    <fmt:formatNumber> 標(biāo)簽實(shí)際是對(duì)應(yīng) java.util.NumberFormat 類, type 屬性的可能值包括 currency (貨幣)、 number (數(shù)字)和 percent (百分比)。

    下面看一個(gè)示例。

    <fmt:formatNumber value="1000.888" type="currency" var="money"/>

    該結(jié)果將被保存在“ money ”變量中,將根據(jù) Locale 環(huán)境顯示當(dāng)?shù)氐呢泿鸥袷健?


    9.5.9 用于解析數(shù)字的 <fmt:parseNumber> 標(biāo)簽
    <fmt:parseNumber> 標(biāo)簽用于解析一個(gè)數(shù)字,并將結(jié)果作為 java.lang.Number 類的實(shí)例返回。 <fmt:parseNumber> 標(biāo)簽看起來(lái)和 <fmt:formatNumber> 標(biāo)簽的作用正好相反。它的屬性和描述如表 9.22 所示:

    表 9.22   <fmt:parseNumber> 標(biāo)簽屬性和說(shuō)明

    屬性
    描述

    value
    將被解析的字符串

    type
    解析格式化的類型

    pattern
    解析格式化模式

    var
    結(jié)果保存變量,類型為 java.lang.Number

    scope
    變量的作用范圍

    parseLocale
    以本地化的形式來(lái)解析字符串,該屬性的內(nèi)容應(yīng)為 String 或 java.util.Locale 類型的實(shí)例


    下面看一個(gè)示例。

    <fmt:parseNumber value="15%" type="percent" var="num"/>

    解析之后的結(jié)果為“ 0.15 ”。

    9.5.10 用于格式化日期的 <fmt:formatDate> 標(biāo)簽
    <fmt:formatDate> 標(biāo)簽用于格式化日期。它的屬性和描述如表 9.23 所示:

    表 9.23   <fmt:formatDate> 標(biāo)簽屬性和說(shuō)明

    屬性
    描述

    value
    格式化的日期,該屬性的內(nèi)容應(yīng)該是 java.util.Date 類型的實(shí)例

    type
    格式化的類型

    pattern
    格式化模式

    var
    結(jié)果保存變量

    scope
    變量的作用范圍

    timeZone
    指定格式化日期的時(shí)區(qū)


    <fmt:formatDate> 標(biāo)簽與 <fmt:timeZone> 、 <fmt:setTimeZone> 兩組標(biāo)簽的關(guān)系密切。若沒(méi)有指定 timeZone屬性, 也可以通過(guò) <fmt:timeZone> 、 <fmt:setTimeZone> 兩組標(biāo)簽設(shè)定的時(shí)區(qū)來(lái)格式化最后的結(jié)果。

    9.5.11 用于解析日期的 <fmt:parseDate> 標(biāo)簽
    <fmt:parseDate> 標(biāo)簽用于解析一個(gè)日期,并將結(jié)果作為 java.lang.Date 類型的實(shí)例返回。 <fmt:parseDate> 標(biāo)簽看起來(lái)和 <fmt:formatDate> 標(biāo)簽的作用正好相反。它的屬性和描述如表 9.24 所示:

    表 9.24   <fmt:parseDate> 標(biāo)簽屬性和說(shuō)明

    屬性
    描述

    value
    將被解析的字符串

    type
    解析格式化的類型

    pattern
    解析格式化模式

    var
    結(jié)果保存變量,類型為 java.lang.Date

    scope
    變量的作用范圍

    parseLocale
    以本地化的形式來(lái)解析字符串,該屬性的內(nèi)容為 String 或 java.util.Locale 類型的實(shí)例

    timeZone
    指定解析格式化日期的時(shí)區(qū)


    <fmt:parseNumber> 和 <fmt:parseDate> 兩組標(biāo)簽都實(shí)現(xiàn)解析字符串為一個(gè)具體對(duì)象實(shí)例的工作,因此,這兩組解析標(biāo)簽對(duì) var 屬性的字符串參數(shù)要求非常嚴(yán)格。就 JSP 頁(yè)面的表示層前段來(lái)說(shuō),處理這種解析本不屬于份內(nèi)之事,因此 <fmt:parseNumber> 和 <fmt:parseDate> 兩組標(biāo)簽應(yīng)該盡量少用,替代工作的地方應(yīng)該在服務(wù)器端表示層的后段,比如在 Servlet 中。

    messageSource[Spring]主要用于消息、日志[Locale.getDefault()]
    jstl I18N 主要用于jsp頁(yè)面。[ ]
    <beans>
    <!-- this MessageSource is being used in a web application -->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="baseName" value="WEB-INF/test-messages"/>
    </bean>
    <!-- let's inject the above MessageSource into this POJO -->
    <bean id="example" class="com.foo.Example">
    <property name="messages" ref="messageSource"/>
    </bean>
    </beans>
    String message = resources.getMessage("argument.required",
    new Object [] {"userDao"}, "Required", Locale.getDefault());
    使用JSTL解決國(guó)際化問(wèn)題非常簡(jiǎn)單,首先在WEB-INF/classes放上資源文件,例如messages.properties、messages_zh_CN.properties等文件。

    使用JSTL fmt庫(kù):
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
    <fmt:setLocale value="${header['accept-language']}"/>
    <fmt:setBundle basename="messages"/>

    setLocale設(shè)置地區(qū),一般從HTTP Header里面取就比較方便一點(diǎn)。
    setBundle設(shè)置資源文件的名稱。

    通過(guò)如下方式就可以應(yīng)用了。
    <fmt:message key="SampleMessage"/>

    還可以加參數(shù)。
    <fmt:message key="LoginMessage">
    <fmt:param value="${loginName}"/>
    </fmt:message>
    <%@page contentType="text/html; charset=UTF-8"%>
    <%@page import="java.util.*"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
    <html>
    <head>
    <title>language choose</title>
    </head>
    <body bgcolor="#ffffff">

    copyright @ lizongbo @ donews.net


    <c:if test="${param['locale'] != null}">
    <fmt:setLocale value="${param['locale']}" scope="session"/>
    <fmt:setTimeZone value="${param['locale']}" scope="session"/>
    </c:if>
    <c:if test="${param['locale'] == null}">
    <fmt:setLocale value="${header['locale']}" scope="session"/>
    <fmt:setTimeZone value="${header['locale']}" scope="session"/>
    </c:if>
    <%
    Locale crtl = Locale.getDefault();
    Object cobj = session.getAttribute("javax.servlet.jsp.jstl.fmt.locale.session");
    if (cobj != null && cobj instanceof Locale) {
    crtl = (Locale) cobj;
    }
    Locale[] la = java.text.NumberFormat.getAvailableLocales();
    %>
    <form method="POST" action="">
    language choose:
    <br />
    <select name="locale">
    <%for (int i = 0; i < la.length; i++) {%>
    <option value="<%=la[i]%>" <%if (la[i].equals(crtl)) {
    out.print("selected=\"selected\"");
    }%>><%= la[i].getDisplayName(crtl)%></option>
    <%
    }
    %>
    </select>
    <br />
    <input type="submit" value="change"/>
    </form>
    </body>
    </html>


    import java.util.Locale;

    public class EchoDefaultSystemEncoding {

    public static void main(String[] args) {

    String encoding = System.getProperty("file.encoding");
    System.out.println("Default System Encoding:" + encoding);

    System.out.println("Locale.getDefault()=" + Locale.getDefault());

    System.out.println("系統(tǒng)參數(shù)");
    System.getProperties().list(System.out);
    }
    }
    Runtime.getRuntime().exec("java -cp class2.jar com.Test a \"b c d\"")
    ETLImplProgDAO etlImplProgDAO = (ETLImplProgDAO) Class.forName("com.Test").newInstance();
    rtn = etlImplProgDAO.execute(workItemType, regionId, dataStime, dataEtime);
    java Test a b
    輸出到文件 RollingFileAppender的擴(kuò)展,可以提供一種日志的備份功能。
    log4j.appender.R=org.apache.log4j.RollingFileAppender


    日志文件的名稱
    log4j.appender.R.File=log4j.log
    日志文件的大小
    log4j.appender.R.MaxFileSize=100KB
    保存一個(gè)備份文件
    log4j.appender.R.MaxBackupIndex=1

    log4j.appender.R.layout=org.apache.log4j.TTCCLayout

    在文件后面繼續(xù)寫

    log4j.appender.ROLLING_FILE.Append=true

    設(shè)置配置文件的編碼

    log4j.appender.ROLLING_FILE.encoding=UTF-8
    輸出到文件 RollingFileAppender的擴(kuò)展,可以提供一種日志的備份功能。
    log4j.appender.R=org.apache.log4j.RollingFileAppender


    日志文件的名稱
    log4j.appender.R.File=log4j.log
    日志文件的大小
    log4j.appender.R.MaxFileSize=100KB
    保存一個(gè)備份文件
    log4j.appender.R.MaxBackupIndex=1

    log4j.appender.R.layout=org.apache.log4j.TTCCLayout

    在文件后面繼續(xù)寫

    log4j.appender.ROLLING_FILE.Append=true

    設(shè)置配置文件的編碼

    log4j.appender.ROLLING_FILE.encoding=UTF-8

    select * from v$database;
    select * from v$instance;
    select * from v$parameter;
    Db_name:對(duì)一個(gè)數(shù)據(jù)庫(kù)(Oracle database)的唯一標(biāo)識(shí),該數(shù)據(jù)庫(kù)為第一章講到的Oracle database。這種表示對(duì)于單個(gè)數(shù)據(jù)庫(kù)是足夠的,但是隨著由多個(gè)數(shù)據(jù)庫(kù)構(gòu)成的分布式數(shù)據(jù)庫(kù)的普及,這種命令數(shù)據(jù)庫(kù)的方法給數(shù)據(jù)庫(kù)的管理造成一定的負(fù)擔(dān),因?yàn)楦鱾€(gè)數(shù)據(jù)庫(kù)的名字可能一樣,造成管理上的混亂。為了解決這種情況,引入了Db_domain參數(shù),這樣在數(shù)據(jù)庫(kù)的標(biāo)識(shí)是由Db_name和Db_domain兩個(gè)參數(shù)共同決定的,避免了因?yàn)閿?shù)據(jù)庫(kù)重名而造成管理上的混亂。這類似于互連網(wǎng)上的機(jī)器名的管理。我們將Db_name和Db_domain兩個(gè)參數(shù)用’.’連接起來(lái),表示一個(gè)數(shù)據(jù)庫(kù),并將該數(shù)據(jù)庫(kù)的名稱稱為Global_name,即它擴(kuò)展了Db_name。Db_name參數(shù)只能由字母、數(shù)字、’_’、’#’、’$’組成,而且最多8個(gè)字符。

    Db_domain:定義一個(gè)數(shù)據(jù)庫(kù)所在的域,該域的命名同互聯(lián)網(wǎng)的’域’沒(méi)有任何關(guān)系,只是數(shù)據(jù)庫(kù)管理員為了更好的管理分布式數(shù)據(jù)庫(kù)而根據(jù)實(shí)際情況決定的。當(dāng)然為了管理方便,可以將其等于互聯(lián)網(wǎng)的域。

    Global_name:對(duì)一個(gè)數(shù)據(jù)庫(kù)(Oracle database)的唯一標(biāo)識(shí),oracle建議用此種方法命令數(shù)據(jù)庫(kù)。該值是在創(chuàng)建數(shù)據(jù)庫(kù)是決定的,缺省值為Db_name. Db_domain。在以后對(duì)參數(shù)文件中Db_name與Db_domain參數(shù)的任何修改不影響Global_name的值,如果要修改Global_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO <db_name.db_domain>命令進(jìn)行修改,然后修改相應(yīng)參數(shù)。

    Service_name:該參數(shù)是oracle8i新引進(jìn)的。在8i以前,我們用SID來(lái)表示標(biāo)識(shí)數(shù)據(jù)庫(kù)的一個(gè)實(shí)例,但是在Oracle的并行環(huán)境中,一個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)多個(gè)實(shí)例,這樣就需要多個(gè)網(wǎng)絡(luò)服務(wù)名,設(shè)置繁瑣。為了方便并行環(huán)境中的設(shè)置,引進(jìn)了Service_name參數(shù),該參數(shù)對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù),而不是一個(gè)實(shí)例,而且該參數(shù)有許多其它的好處。該參數(shù)的缺省值為Db_name. Db_domain,即等于Global_name。一個(gè)數(shù)據(jù)庫(kù)可以對(duì)應(yīng)多個(gè)Service_name,以便實(shí)現(xiàn)更靈活的配置。該參數(shù)與SID沒(méi)有直接關(guān)系,即不必Service name 必須與SID一樣。

    Net service name:網(wǎng)絡(luò)服務(wù)名,又可以稱為數(shù)據(jù)庫(kù)別名(database alias)。是客戶端程序訪問(wèn)數(shù)據(jù)庫(kù)時(shí)所需要,屏蔽了客戶端如何連接到服務(wù)器端的細(xì)節(jié),實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的位置透明的特性
    DECLARE
    v_cursor NUMBER;
    v_stat NUMBER;
    v_row NUMBER;
    v_id NUMBER;
    v_no VARCHAR(100);
    v_date DATE;
    v_sql VARCHAR(200);
    s_id NUMBER;
    s_date DATE;
    BEGIN
    s_id := 3000;
    s_date := SYSDATE;
    v_sql := 'SELECT id,qan_no,sample_date FROM "tblno" WHERE id > :sid and sample_date < :sdate';
    v_cursor := dbms_sql.open_cursor; --打開(kāi)游標(biāo);
    dbms_sql.parse(v_cursor, v_sql, dbms_sql.native); --解析動(dòng)態(tài)SQL語(yǔ)句;
    dbms_sql.bind_variable(v_cursor, ':sid', s_id); --綁定輸入?yún)?shù);
    dbms_sql.bind_variable(v_cursor, ':sdate', s_date);

    dbms_sql.define_column(v_cursor, 1, v_id); --定義列
    dbms_sql.define_column(v_cursor, 2, v_no, 100);
    dbms_sql.define_column(v_cursor, 3, v_date);
    v_stat := dbms_sql.execute(v_cursor); --執(zhí)行動(dòng)態(tài)SQL語(yǔ)句。
    LOOP
    EXIT WHEN dbms_sql.fetch_rows(v_cursor)<=0; --fetch_rows在結(jié)果集中移動(dòng)游標(biāo),如果未抵達(dá)末尾,返回1。
    dbms_sql.column_value(v_cursor, 1, v_id); --將當(dāng)前行的查詢結(jié)果寫入上面定義的列中。
    dbms_sql.column_value(v_cursor, 2, v_no);
    dbms_sql.column_value(v_cursor, 3, v_date);
    dbms_output.put_line(v_id || ';' || v_no || ';' || v_date);
    END LOOP;
    dbms_sql.close_cursor(v_cursor); --關(guān)閉游標(biāo)。
    END;



    re: Oracle觸發(fā)器 xzc 2008-05-28 14:49  
    語(yǔ)法規(guī)則:
    Create [or replace] trigger [模式.]觸發(fā)器名
    Before| after insert|delete|(update of 列名)

    On 表名

    [for each row]

    When 條件

    PL/SQL塊

    說(shuō)明:

    For each row的意義是:在一次操作表的語(yǔ)句中,每操作成功一行就會(huì)觸發(fā)一次;不寫的話,表示是表級(jí)觸發(fā)器,則無(wú)論操作多少行,都只觸發(fā)一次;

    When條件的出現(xiàn)說(shuō)明了,在DML操作的時(shí)候也許一定會(huì)觸發(fā)觸發(fā)器,但是觸發(fā)器不一定會(huì)做實(shí)際的工作,比如when 后的條件不為真的時(shí)候,觸發(fā)器只是簡(jiǎn)單地跳過(guò)了PL/SQL塊;

    例子:

    sql 代碼
    create or replace trigger wf_tri_user_list before insert or update or delete on user_list
    for each row
    declare
    uid varchar2(10); useq varchar2(10); asql varchar2(200); namea varchar2(200); nameb varchar2(200);
    begin
    namea:=NULL;
    nameb:=NULL;
    if inserting then
    insert into wflow.bpm_org_user(userid,username,diaplayname,seq) values(:NEW.user_id,:NEW.user_name,:NEW.user_realname,:NEW.user_id);
    dbms_output.put_line('insert trigger is chufale .....');

    end if;
    if updating then
    if (:NEW.user_name<>:OLD.user_name) and (:NEW.user_realname<>:OLD.user_realname) then
    namea:=:NEW.user_name;
    nameb:=:NEW.user_realname;
    asql:='update wflow.bpm_org_user set diaplayname=:1 where username=:2';
    execute immediate asql using namea,nameb;
    else
    if :NEW.user_name<>:OLD.user_name then
    namea:=:NEW.user_name;
    asql:='update wflow.bpm_org_user set user_name=:1 where username=:2';
    execute immediate asql using namea;
    else
    if :NEW.user_realname<>:OLD.user_realname then
    nameb:=:NEW.user_realname;
    asql:='update wflow.bpm_org_user set diaplayname=:1 where username=:2';
    execute immediate asql using nameb,:OLD.user_id;
    end if;
    end if;
    end if;
    end if;
    if deleting then
    update wflow.bpm_org_jobusers set userid = 0 where :OLD.user_id =userid and parentid=-1;
    delete from wflow.bpm_org_jobusers where userid = :OLD.user_id;
    delete wflow.bpm_org_user where userid=:OLD.user_id;
    end if;
    commit;
    end;




    關(guān)鍵字:

    :NEW 和:OLD使用方法和意義,new 只出現(xiàn)在insert和update時(shí),old只出現(xiàn)在update和delete時(shí)。在insert時(shí)new表示新插入的行數(shù)據(jù),update時(shí)new表示要替換的新數(shù)據(jù)、old表示要被更改的原來(lái)的數(shù)據(jù)行,delete時(shí)old表示要被刪除的數(shù)據(jù)。

    注意:

    在觸發(fā)器中不能使用commit。
    TYPE cursor_type IS REF CURSOR;
    c1 cursor_type;
    --
    OPEN c1 FOR lc_sql;
    LOOP
    FETCH c1
    INTO lc_source_column_pk_value, lc_source_column_npk_value;
    EXIT WHEN c1%NOTFOUND;
    null;
    END LOOP;
    <<ERROREND>>
    CLOSE c1;
    ----定義
    type cursor_type is ref cursor;
    c1 cursor_type;
    ----使用
    --打開(kāi)動(dòng)態(tài)游標(biāo),再往下就都一樣了
    open c1 for sql2;
    loop
    fetch c1 into r_c1;
    exit when c1%notfound;
    DailyRollingFileAppender的使用
    DailyRollingFileAppender是日志記錄軟件包Log4J中的一個(gè)Appender,它能夠按一定的頻度滾動(dòng)日志記錄文件。

    如果您不熟悉Log4J,那我們建議您閱讀一下 使用Log4j進(jìn)行日志記錄。

    我們可以按下面的方式配置DailyRollingFileAppender:

    log4j.rootCategory=INFO,file
    log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.file.DatePattern='.'yyyy-MM-dd
    log4j.appender.file.File=run.log
    log4j.appender.file.Append=true
    log4j.appender.file.Threshold=INFO
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%c %x - %m%n
    在DailyRollingFileAppender中可以指定monthly(每月)、weekly(每周)、daily(每天)、half-daily(每半天)、hourly(每小時(shí))和minutely(每分鐘)六個(gè)頻度,這是通過(guò)為DatePattern選項(xiàng)賦予不同的值來(lái)完成的。DatePattern選項(xiàng)的有效值為:

    '.'yyyy-MM,對(duì)應(yīng)monthly(每月)
    '.'yyyy-ww,對(duì)應(yīng)weekly(每周)
    '.'yyyy-MM-dd,對(duì)應(yīng)daily(每天)
    '.'yyyy-MM-dd-a,對(duì)應(yīng)half-daily(每半天)
    '.'yyyy-MM-dd-HH,對(duì)應(yīng)hourly(每小時(shí))
    '.'yyyy-MM-dd-HH-mm,對(duì)應(yīng)minutely(每分鐘)
    DatePattern中不用處理的文字要放到單引號(hào)(')中,如上面的(.)。如果您對(duì)此有疑問(wèn)可以查閱SimpleDateFormat的文檔。DailyRollingFileAppender中使用這個(gè)類來(lái)處理DatePattern。

    DatePattern格式化之后的文本作為文件名字的后綴。DailyRollingFileAppender不支持格式化之后的文本作為文件名字的前綴。

    DailyRollingFileAppender在每一個(gè)日志事件(LoggingEvent)附加(append)之前檢查是否需要附加。也就是說(shuō)如果在一個(gè)滾動(dòng)區(qū)間中沒(méi)有任何日志記錄,那么這個(gè)區(qū)間的日志記錄文件就不會(huì)形成。

    查閱DailyRollingFileAppender的JavaDoc文檔。

    re: JOB[未登錄](méi) xzc 2007-11-26 14:48  
    begin
    sys.dbms_job.submit(job => :job,
    what => 'check_err;',
    next_date => trunc(sysdate)+23/24,
    interval => 'trunc(next_day(sysdate,''星期五''))+23/24');
    coMMit;
    end;
    其中:job是系統(tǒng)自動(dòng)產(chǎn)生編號(hào),check_err是我的一個(gè)過(guò)程,next_date設(shè)置下次執(zhí)行時(shí)間,這里是今天晚上23:00,interval設(shè)置時(shí)間間隔,多久執(zhí)行一次,這里是每周的星期五晚上23:00,函數(shù)next_day返回日期中包含指定字符的日期,trunc 函數(shù)去掉日期里的時(shí)間,也就是得到的是某天的00:00,時(shí)間是以天為單位的所以要得到某某點(diǎn)某某分,就需要分?jǐn)?shù):

    1/24 一小時(shí);
    1/1440 一分;
    1/3600 一秒;

    謝謝,請(qǐng)給我也發(fā)一份。
    xzc0202@gmail.com
    select translate('1224312321','\0123456789','\') from dual;

    不用存儲(chǔ)過(guò)程查出字符串中是否含有字母
    create table aa (aa varchar2(20));
    insert into aa values ('221324');
    insert into aa values ('23kkj23');
    insert into aa values ('asfsf');
    insert into aa values ('33DS32sd34');

    用下面SQL就可以查出
    select * from aa
    where aa!=translate(aa,'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz','0123456789');



    create or replace function num(s in varchar2) return number
    is
    begin
    return to_number(s) ;
    exception
    when others then
    return null;
    end;
    一、語(yǔ)法:
    TRANSLATE(string,from_str,to_str)
    二、目的
    返回將(所有出現(xiàn)的)from_str中的每個(gè)字符替換為to_str中的相應(yīng)字符以后的string。TRANSLATE 是 REPLACE 所提供的功能的一個(gè)超集。如果 from_str 比 to_str 長(zhǎng),那么在 from_str 中而不在 to_str 中的額外字符將從 string 中被刪除,因?yàn)樗鼈儧](méi)有相應(yīng)的替換字符。to_str 不能為空。Oracle 將空字符串解釋為 NULL,并且如果TRANSLATE 中的任何參數(shù)為NULL,那么結(jié)果也是 NULL。
    三、允許使用的位置
    過(guò)程性語(yǔ)句和SQL語(yǔ)句。
    四、示例
    SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual;
    TRANSLATE (
    --------------
    123456ghij

    SELECT TRANSLATE('abcdefghij','abcdefghij','123456') FROM dual;
    TRANSL
    ----------
    123456

    SELECT TRANSLATE('2ABC229',
    '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
    '0123456789') "Translate example"
    FROM DUAL;
    --
    2229
    xzc0202@qq.com收到了,謝謝
    xzc0202@qq.com
    謝謝!
    re: oracle日期處理完全版 xzc 2007-09-14 12:57  
    ============================================

    --計(jì)算工作日方法

    create table t(s date,e date);
    alter session set nls_date_format = 'yyyy-mm-dd';
    insert into t values('2003-03-01','2003-03-03');
    insert into t values('2003-03-02','2003-03-03');
    insert into t values('2003-03-07','2003-03-08');
    insert into t values('2003-03-07','2003-03-09');
    insert into t values('2003-03-05','2003-03-07');
    insert into t values('2003-02-01','2003-03-31');

    -- 這里假定日期都是不帶時(shí)間的,否則在所有日期前加trunc即可。
    select s,e,e-s+1 total_days,
    trunc((e-s+1)/7)*5 + length(replace(substr('01111100111110',to_char(s,'d'),mod(e-s+1,7)),'0','')) work_days
    from t;

    -- drop table t;

    引此:http://www.itpub.net/showthread.php?s=1635506cd5f48b1bc3adbe4cde96f227&threadid=104060&perpage=15&pagenumber=1


    ================================================================================

    判斷當(dāng)前時(shí)間是上午下午還是晚上

    SELECT CASE
    WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 6 AND 11 THEN '上午'
    WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 11 AND 17 THEN '下午'
    WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 17 AND 21 THEN '晚上'
    END
    FROM dual;


    ================================================================================

    Oracle 中的一些處理日期



    將數(shù)字轉(zhuǎn)換為任意時(shí)間格式.如秒:需要轉(zhuǎn)換為天/小時(shí)
    SELECT to_char(floor(TRUNC(936000/(60*60))/24))||'天'||to_char(mod(TRUNC(936000/(60*60)),24))||'小時(shí)' FROM DUAL
    re: oracle日期處理完全版 xzc 2007-09-14 12:56  
    Oracle時(shí)間日期操作
    sysdate+(5/24/60/60) 在系統(tǒng)時(shí)間基礎(chǔ)上延遲5秒
    sysdate+5/24/60 在系統(tǒng)時(shí)間基礎(chǔ)上延遲5分鐘
    sysdate+5/24 在系統(tǒng)時(shí)間基礎(chǔ)上延遲5小時(shí)
    sysdate+5 在系統(tǒng)時(shí)間基礎(chǔ)上延遲5天
    add_months(sysdate,-5) 在系統(tǒng)時(shí)間基礎(chǔ)上延遲5月
    add_months(sysdate,-5*12) 在系統(tǒng)時(shí)間基礎(chǔ)上延遲5年


    上月末的日期:select last_day(add_months(sysdate, -1)) from dual;
    本月的最后一秒:select trunc(add_months(sysdate,1),'MM') - 1/24/60/60 from dual
    本周星期一的日期:select trunc(sysdate,'day')+1 from dual


    年初至今的天數(shù):select ceil(sysdate - trunc(sysdate, 'year')) from dual;

    今天是今年的第幾周 :select to_char(sysdate,'fmww') from dual
    今天是本月的第幾周:SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" FROM dual

    本月的天數(shù)
    SELECT to_char(last_day(SYSDATE),'dd') days FROM dual
    今年的天數(shù)
    select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
    下個(gè)星期一的日期
    SELECT Next_day(SYSDATE,'monday') FROM dual
    使用J2SE API讀取Properties文件的六種方法
      
      1.使用java.util.Properties類的load()方法
      
      示例: InputStream in = lnew BufferedInputStream(new FileInputStream(name));
      Properties p = new Properties();
      p.load(in);
      
      2.使用java.util.ResourceBundle類的getBundle()方法
      
      示例: ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());
      
      3.使用java.util.PropertyResourceBundle類的構(gòu)造函數(shù)
      
      示例: InputStream in = new BufferedInputStream(new FileInputStream(name));
      ResourceBundle rb = new PropertyResourceBundle(in);
      
      4.使用class變量的getResourceAsStream()方法
      
      示例: InputStream in = JProperties.class.getResourceAsStream(name);
      Properties p = new Properties();
      p.load(in);
      
      5.使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法
      
      示例: InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name);
      Properties p = new Properties();
      p.load(in);
      
      6.使用java.lang.ClassLoader類的getSystemResourceAsStream()靜態(tài)方法
      
      示例: InputStream in = ClassLoader.getSystemResourceAsStream(name);
      Properties p = new Properties();
      p.load(in);
    常見(jiàn)的主要原因是JNDI 的名稱寫錯(cuò)
    錯(cuò)誤的調(diào)用代碼:
    public static java.sql.Connection getConnection () throws java.sql.SQLException {
    java.sql.Connection conn = null;
    try {
    Context ictx = new InitialContext();
    Context ctx = (Context) ictx.lookup("java:comp/env"); //這段代碼,很多資料介紹里都是這么寫的
    javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup (DATA_SOURCE);
    conn = ds.getConnection();
    } catch (Exception e) {
    Debug.printErr (e.getMessage ());
    throw new SQLException ("Cannot get connection!" + e.getMessage ());
    }
    if (conn == null) throw new SQLException ("Cannot get connection!");
    return conn;
    }
    正確的應(yīng)該為:
    Context ictx = new InitialContext();
    javax.sql.DataSource ds = (javax.sql.DataSource) ictx.lookup (DATA_SOURCE);
    conn = ds.getConnection();
    re: JOB xzc 2007-09-04 17:43  
    /*SET SERVEROUT ON*/
    /*聲明部分,以DECLARE開(kāi)頭*/
    DECLARE
    V_DUMMY VARCHAR2(1);

    /*執(zhí)行部分,以BEGIN開(kāi)頭*/
    BEGIN
    SELECT DUMMY INTO V_DUMMY FROM DUAL WHERE DUMMY='&V';
    IF V_DUMMY='X' THEN
    DBMS_OUTPUT.PUT_LINE('TRUE');
    ELSE
    DBMS_OUTPUT.PUT_LINE('FALSE');
    END IF;
    /*異常處理部分,以EXCEPTION開(kāi)始*/
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('NO DATA.');
    END;
    re: Oracle PL/SQL入門之慨述 xzc 2007-08-21 11:17  
    /*SET SERVEROUT ON*/
    /*聲明部分,以DECLARE開(kāi)頭*/
    DECLARE
    V_DUMMY VARCHAR2(1);

    /*執(zhí)行部分,以BEGIN開(kāi)頭*/
    BEGIN
    SELECT DUMMY INTO V_DUMMY FROM DUAL WHERE DUMMY='&V';
    IF V_DUMMY='X' THEN
    DBMS_OUTPUT.PUT_LINE('TRUE');
    ELSE
    DBMS_OUTPUT.PUT_LINE('FALSE');
    END IF;
    /*異常處理部分,以EXCEPTION開(kāi)始*/
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('NO DATA.');
    END;
    re: Log4j基本使用方法 xzc 2007-07-04 16:23  
    1. 把重要的業(yè)務(wù)日志異步批量寫入數(shù)據(jù)庫(kù)
    配置文件示例:

    log4j.logger.business=INFO,db
    log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
    log4j.appender.db.BufferSize=10
    log4j.appender.db.URL=jdbc:hsqldb:res:/hsqldb/bookstore
    log4j.appender.db.driver=org.hsqldb.jdbcDriver
    log4j.appender.db.user=sa
    log4j.appender.db.password=
    log4j.appender.db.sql=INSERT INTO SS_LOG4J_LOG (PRIORITY,LOGDATE,CLASS,METHOD,MSG) VALUES('%p','%d{yyyy-MM-dd HH:mm:ss}','%C','%M','%m')
    log4j.appender.db.layout=org.apache.log4j.PatternLayout log4j提供了簡(jiǎn)單靈活且不影響性能的機(jī)制, 將重要業(yè)務(wù)日志寫入數(shù)據(jù)庫(kù),方便日后的查詢:

    1. 建立一個(gè)任意命名的日志記錄表,在log4j.properties里設(shè)置連接參數(shù),根據(jù)剛才建的表名列名,編寫插入的語(yǔ)句。

    2. BufferSize=10 這樣的參數(shù)可以讓日志異步批量寫入,不會(huì)影響系統(tǒng)性能。

    3. 業(yè)務(wù)日志log最好不要用原來(lái)的package結(jié)構(gòu),而是在項(xiàng)目里協(xié)調(diào)一個(gè)獨(dú)立的名字,如business。

    Log buzzLog = LogFactory.getLog("business"); 4. 以上功能的演示代碼在bookstore example 的OrderManager.java,測(cè)試代碼在bookstore example的DBLogTest.java。

    分頁(yè)
    SELECT *
    FROM (SELECT table_a.*, ROWNUM AS my_rownum
    FROM (select * from rr_tr) table_a
    WHERE ROWNUM <= 1)
    WHERE my_rownum >= 0;
    select 1,to_char(sysdate,'Day,Month DD,YYYY','NLS_DATE_LANGUAGE = American') from dual
    select decode(max(a.record_id),null,1,max(a.record_id)+1) from pdn_fieldchang a
    public class test{
    public static void main(String[] args){

    String str = "{0}";
    System.out.println(str);
    str = str.replaceAll("\\{0\\}","xxx");
    System.out.println(str);
    }
    }
    共3頁(yè): 上一頁(yè) 1 2 3 
    主站蜘蛛池模板: 免费无遮挡无码视频网站| 亚洲午夜激情视频| 羞羞视频网站免费入口| 中文字幕亚洲综合久久男男| 蜜桃成人无码区免费视频网站| 亚洲精华国产精华精华液| 亚洲真人无码永久在线| 2021免费日韩视频网| 一级人做人a爰免费视频 | 亚洲毛片一级带毛片基地| 免费鲁丝片一级在线观看| 日本高清不卡aⅴ免费网站| 亚洲精品欧美综合四区| 亚洲国产精彩中文乱码AV| 日韩高清免费观看| 永久免费A∨片在线观看| 亚洲av日韩专区在线观看| 久久精品国产亚洲av四虎| 免费一级国产生活片| 色片在线免费观看| 亚洲阿v天堂在线2017免费| 国产午夜亚洲精品国产| 亚洲国产精品一区二区久久| avtt亚洲天堂| 国产又黄又爽又猛免费app| 免费看黄的成人APP| 美女被暴羞羞免费视频| 亚洲国产成a人v在线观看| 国产亚洲成av片在线观看 | 久久精品国产亚洲αv忘忧草| 国产亚洲精午夜久久久久久| 免费看的黄色大片| 亚州免费一级毛片| 青柠影视在线观看免费| 美女被免费网站在线视频免费 | 一级毛片**不卡免费播| eeuss免费天堂影院| 美女露100%胸无遮挡免费观看| 亚洲中文字幕人成乱码| 麻豆亚洲AV永久无码精品久久| 亚洲午夜久久久久久久久电影网|