﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-幸せのちから-随笔分类-Database</title><link>http://www.blogjava.net/lucky/category/35925.html</link><description>&lt;B&gt;平凡的世界&lt;/B&gt;&lt;/br&gt;

&lt;font color="blue"&gt;看似平常实崎岖&lt;/br&gt;
成如容易却艰辛&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 15 Apr 2013 20:29:48 GMT</lastBuildDate><pubDate>Mon, 15 Apr 2013 20:29:48 GMT</pubDate><ttl>60</ttl><item><title>解決EXP-00091</title><link>http://www.blogjava.net/lucky/archive/2013/04/16/397888.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Mon, 15 Apr 2013 16:44:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2013/04/16/397888.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/397888.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2013/04/16/397888.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/397888.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/397888.html</trackback:ping><description><![CDATA[<div><span style="font-family: 宋体;">原文请参照<br /><a href="http://blog.csdn.net/wangjialiang/article/details/6051817">http://blog.csdn.net/wangjialiang/article/details/6051817</a><br /><br />说明：</span><br /><span>EXP-00091: </span><br /><span style="font-family: 宋体;">出口可疑的统计。</span><br /><span>EXP-00091: Exporting questionable statistics.<br /></span><span style="font-family: 宋体;">产生：</span><br /><span style="font-family: 宋体;">在数据库的服务器端和客户端字符集不同的情况下，导出</span><br />(dump)<br /><span style="font-family: 宋体;">数据库表时，会产生这个错误。虽然产生这个错误，但好像对导入没有影响。</span><br /><span style="font-family: 宋体;">解决：</span><br /><span style="font-family: 宋体;">服务器端数据的字符集查看方法：</span><br /><span>1</span><span style="font-family: 宋体;">、打开</span>SQLPLUS<span style="font-family: 宋体;">，用</span>sys<span style="font-family: 宋体;">用户登录。</span><br /><span>2</span><span style="font-family: 宋体;">、执行<br /></span><span>SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';</span><br /><span style="font-family: 宋体;">其中</span><br />'NLS_CHARACTERSET'<br /><span style="font-family: 宋体;">必须为大写。</span><br /><span>PARAMETER<br />-------------------<br />VALUE<br />--------------------<br />NLS_CHARACTERSET<br />ZHS16GBK<br /></span><span style="font-family: 宋体;">（</span><span>Linux)<br /></span><span style="font-family: 宋体;">在</span>oracle<span style="font-family: 宋体;">用户的</span>.bash_profile<span style="font-family: 宋体;">文件加入</span><span><br />export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK</span><br /><span style="font-family: 宋体;">（</span>Windows<span style="font-family: 宋体;">）</span><span><br />1</span><span style="font-family: 宋体;">、打开注册表，依次进入</span><br />HKEY_LOCAL_MACHINE&#8594;SOFTWARE&#8594;ORACLE&#8594;HOME0<br /><span style="font-family: 宋体;">目录。</span><br /><span>2</span><span style="font-family: 宋体;">、察看</span>NLS_LANG<span style="font-family: 宋体;">的值。</span><br /><span>3</span><span style="font-family: 宋体;">、将其修改为数据库服务器端字符集相同的字符。</span><br /><span style="font-family: 宋体;">或</span><br /><span style="font-family: 宋体;">临时设定环境变量</span><span><br />set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK</span><br /></div><br /><img src ="http://www.blogjava.net/lucky/aggbug/397888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2013-04-16 00:44 <a href="http://www.blogjava.net/lucky/archive/2013/04/16/397888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Oracle 11G在用EXP 导出时，空表不能导出解决 </title><link>http://www.blogjava.net/lucky/archive/2013/04/15/397887.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Mon, 15 Apr 2013 15:39:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2013/04/15/397887.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/397887.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2013/04/15/397887.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/397887.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/397887.html</trackback:ping><description><![CDATA[<div lh22?=""><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原创作品，允许转载，转载时请务必以超链接形式标明文章 <a style="text-decoration: underline;" href="http://wanwentao.blog.51cto.com/2406488/545154" target="_blank">原始出处</a> 、作者信息和本声明。否则将追究法律责任。<a href="http://wanwentao.blog.51cto.com/2406488/545154">http://wanwentao.blog.51cto.com/2406488/545154</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>　　11G中有个新特性，当表无数据时，不分配segment，以节省空间<br /><div><p>　　解决方法：</p><p>　<strong>　1、insert一行，再rollback就产生segment了。</strong></p><p>　　该方法是在在空表中插入数据，再删除，则产生segment。导出时则可导出空表。</p><p>　<strong>　2、设置deferred_segment_creation 参数 </strong></p><p><strong><span>show parameter deferred_segment_creation <br />NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE <br />------------------------------------ ----------- ------------------------------ <br />deferred_segment_creation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean&nbsp;&nbsp;&nbsp;&nbsp; TRUE <br />SQL&gt; alter system set deferred_segment_creation=false; <br /></span><span style="font-family: 宋体;">系统已更改。</span><span> <br />SQL&gt; show parameter deferred_segment_creation <br />NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE <br />----------------------------------- ----------- ------------------------------ <br />deferred_segment_creation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean&nbsp;&nbsp;&nbsp;&nbsp; FALSE</span></strong></p><p>　　该参数值默认是TRUE，当改为FALSE时，无论是空表还是非空表，都分配segment。</p><p>　　需注意的是：该值设置后对以前导入的空表不产生作用，仍不能导出，只能对后面新增的表产生作用。如需导出之前的空表，只能用第一种方法。</p><p>搞了我好久，最后查到这个方法。</p><p>先查询一下当前用户下的所有空表</p><p><strong><span style="color: red; font-size: 12pt;">select table_name from user_tables where NUM_ROWS=0;</span></strong></p><p>用以下这句查找空表</p><p><strong>select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0</strong></p><p>把查询结果导出，执行导出的语句</p><p>'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'<br /><br />-----------------------------------------------------------<br />alter table AQ$_AQ$_MEM_MC_H allocate extent;<br />alter table AQ$_AQ$_MEM_MC_G allocate extent;<br />alter table AQ$_AQ$_MEM_MC_I allocate extent;<br />alter table AQ$_AQ_PROP_TABLE_T allocate extent;<br />alter table AQ$_AQ_PROP_TABLE_H allocate extent;<br />alter table AQ$_AQ_PROP_TABLE_G allocate extent;<br />alter table AQ$_AQ_PROP_TABLE_I allocate extent;<br />alter table AQ$_KUPC$DATAPUMP_QUETAB_T allocate extent;<br />alter table AQ$_KUPC$DATAPUMP_QUETAB_H allocate extent;<br />alter table AQ$_KUPC$DATAPUMP_QUETAB_G allocate extent;<br />alter table AQ$_KUPC$DATAPUMP_QUETAB_I allocate extent;</p><p>'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'<br />-----------------------------------------------------------<br />alter table AQ$_SYS$SERVICE_METRICS_TAB_T allocate extent;<br />alter table AQ$_SYS$SERVICE_METRICS_TAB_H allocate extent;<br />alter table AQ$_SYS$SERVICE_METRICS_TAB_G allocate extent;<br />alter table AQ$_SYS$SERVICE_METRICS_TAB_I allocate extent;</p><p>然后再执行</p><p>exp 用户名/密码@数据库名 file=/home/oracle/exp.dmp log=/home/oracle/exp_smsrun.log</p><br /><p>　　成功！</p></div><img src ="http://www.blogjava.net/lucky/aggbug/397887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2013-04-15 23:39 <a href="http://www.blogjava.net/lucky/archive/2013/04/15/397887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle死锁调查</title><link>http://www.blogjava.net/lucky/archive/2010/10/22/335870.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Fri, 22 Oct 2010 04:04:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2010/10/22/335870.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/335870.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2010/10/22/335870.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/335870.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/335870.html</trackback:ping><description><![CDATA[1.what.sql <br />
SELECT S.SID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,S.USERNAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,S.OSUSER<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,NVL(S.MACHINE,'?') MACHINE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,NVL(S.PROGRAM,'?') PROGRAM<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,S.PROCESS F_GROUND<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,P.SPID B_GROUND<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,X.SQL_TEXT<br />
&nbsp; FROM SYS.V_$SESSION S<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,SYS.V_$PROCESS P<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,SYS.V_$SQLAREA X<br />
&nbsp;WHERE<br />
&nbsp;&nbsp; S.SID&nbsp; = '505' <br />
&nbsp;&nbsp; AND S.PADDR = P.ADDR<br />
&nbsp;&nbsp; AND S.TYPE != 'BACKGROUND'<br />
&nbsp;&nbsp; AND S.SQL_ADDRESS = X.ADDRESS<br />
&nbsp;&nbsp; AND S.SQL_HASH_VALUE = X.HASH_VALUE<br />
&nbsp;ORDER BY S.SID<br />
<br />
2.引起死锁的SQL语句<br />
SELECT SQL_TEXT<br />
&nbsp; FROM V$SQL<br />
&nbsp;WHERE HASH_VALUE IN (SELECT SQL_HASH_VALUE FROM V$SESSION WHERE SID IN<br />
(SELECT SESSION_ID FROM V$LOCKED_OBJECT))<br />
3.<a href="http://yanggx.javaeye.com/blog/702761">Oracle数据库死锁查询语句</a><br />
SELECT T2.USERNAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,T2.SID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,T2.SERIAL#<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,T3.OBJECT_NAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,T2.OSUSER<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,T2.MACHINE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,T2.PROGRAM<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,T2.LOGON_TIME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,T2.COMMAND<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,T2.LOCKWAIT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,T2.SADDR<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,T2.PADDR<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,T2.TADDR<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,T2.SQL_ADDRESS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,T1.LOCKED_MODE<br />
&nbsp; FROM V$LOCKED_OBJECT T1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,V$SESSION T2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,DBA_OBJECTS T3<br />
&nbsp;WHERE T1.SESSION_ID = T2.SID<br />
&nbsp;&nbsp; AND T1.OBJECT_ID = T3.OBJECT_ID<br />
&nbsp;ORDER BY T2.LOGON_TIME DESC<br />
<img src ="http://www.blogjava.net/lucky/aggbug/335870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2010-10-22 12:04 <a href="http://www.blogjava.net/lucky/archive/2010/10/22/335870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中查看死锁表信息语句</title><link>http://www.blogjava.net/lucky/archive/2010/10/21/335812.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Thu, 21 Oct 2010 11:01:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2010/10/21/335812.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/335812.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2010/10/21/335812.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/335812.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/335812.html</trackback:ping><description><![CDATA[<div class="bct fc05 fc11 nbw-blog ztag js-fs2">
<p>SELECT&nbsp;&nbsp; bs.username
"Blocking User", bs.username "DB User",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ws.username "Waiting
User", bs.SID "SID", ws.SID "WSID",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bs.serial# "Serial#",
bs.sql_address "address", <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bs.sql_hash_value "Sql hash",
bs.program "Blocking App",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ws.program "Waiting App",
bs.machine "Blocking Machine",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ws.machine "Waiting Machine",
bs.osuser "Blocking OS User",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ws.osuser "Waiting OS User",
bs.serial# "Serial#",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ws.serial# "WSerial#", </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECODE (wk.TYPE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'MR', 'Media Recovery',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'RT', 'Redo Thread', <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'UN', 'USER Name',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'TX', 'Transaction',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'TM', 'DML', <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'UL', 'PL/SQL USER LOCK',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'DX', 'Distributed
Xaction',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'CF', 'Control FILE', <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'IS', 'Instance State',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'FS', 'FILE SET',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'IR', 'Instance Recovery', <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'ST', 'Disk SPACE
Transaction',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'TS', 'Temp Segment',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'IV', 'Library Cache Invalidation',&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'LS', 'LOG
START OR Switch',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'RW', 'ROW Wait',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'SQ', 'Sequence Number', <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'TE', 'Extend TABLE',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'TT', 'Temp TABLE', <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wk.TYPE ) lock_type,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
DECODE (hk.lmode,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, 'None',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1,
'NULL', <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2, 'ROW-S (SS)',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3,
'ROW-X (SX)',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4, 'SHARE',&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5,
'S/ROW-X (SSX)',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6, 'EXCLUSIVE',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
TO_CHAR (hk.lmode)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) mode_held,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECODE
(wk.request,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, 'None',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1,
'NULL',&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2, 'ROW-S (SS)',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3,
'ROW-X (SX)',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4, 'SHARE',&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5,
'S/ROW-X (SSX)',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6, 'EXCLUSIVE',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
TO_CHAR (wk.request) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) mode_requested,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
TO_CHAR (hk.id1) lock_id1, TO_CHAR (hk.id2) lock_id2,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECODE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(hk.BLOCK,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, 'NOT Blocking',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**//* Not
blocking any other processes */ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1,
'Blocking',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**//* This lock blocks other processes */ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2, 'Global',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**//* This lock is global, so we can't tell */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
TO_CHAR (hk.BLOCK)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) blocking_others<br />
&nbsp;&nbsp;&nbsp; FROM v$lock
hk, v$session bs, v$lock wk, v$session ws<br />
&nbsp;&nbsp; WHERE hk.BLOCK = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;
AND hk.lmode != 0 <br />
&nbsp;&nbsp;&nbsp;&nbsp; AND hk.lmode != 1<br />
&nbsp;&nbsp;&nbsp;&nbsp; AND wk.request != 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;
AND wk.TYPE(+) = hk.TYPE <br />
&nbsp;&nbsp;&nbsp;&nbsp; AND wk.id1(+) = hk.id1<br />
&nbsp;&nbsp;&nbsp;&nbsp; AND
wk.id2(+) = hk.id2<br />
&nbsp;&nbsp;&nbsp;&nbsp; AND hk.SID = bs.SID(+) <br />
&nbsp;&nbsp;&nbsp;&nbsp; AND wk.SID =
ws.SID(+)<br />
&nbsp;&nbsp;&nbsp;&nbsp; AND (bs.username IS NOT NULL)<br />
&nbsp;&nbsp;&nbsp;&nbsp; AND (bs.username
&lt;&gt; 'SYSTEM') <br />
&nbsp;&nbsp;&nbsp;&nbsp; AND (bs.username &lt;&gt; 'SYS')<br />
ORDER
BY 1;</p>
<p>&nbsp;</p>
<p>简化版本的：</p>
<p>SELECT&nbsp;&nbsp; SID, DECODE (BLOCK, 0, 'NO', 'YES') blocker,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
DECODE (request, 0, 'NO', 'YES') waiter <br />
&nbsp;&nbsp;&nbsp; FROM v$lock<br />
&nbsp;&nbsp; WHERE
request &gt; 0 OR BLOCK &gt; 0<br />
ORDER BY BLOCK DESC;</p>
</div>
<img src ="http://www.blogjava.net/lucky/aggbug/335812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2010-10-21 19:01 <a href="http://www.blogjava.net/lucky/archive/2010/10/21/335812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle Sesion状况查询</title><link>http://www.blogjava.net/lucky/archive/2010/03/01/314199.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Mon, 01 Mar 2010 13:24:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2010/03/01/314199.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/314199.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2010/03/01/314199.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/314199.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/314199.html</trackback:ping><description><![CDATA[1. sqlplus /nolog<br />
2. connect sys/password@orcl as sysdba<br />
3. select count(*) from v$session；<br />
&nbsp;&nbsp;&nbsp; 查看当前总会话数<br />
4.&nbsp; select count(*) from v$process；<br />
&nbsp; 查看当前总进程数<br />
5. spool d:/deadlock.txt<br />
&nbsp;&nbsp; 将死锁情况写入到文件<br />
6. select * from v$locked_object; <br />
&nbsp;&nbsp; 查询是否死锁<br />
7. spool off<br />
&nbsp;&nbsp; 只有执行这条语句,才能真正写入文件<br />
<img src ="http://www.blogjava.net/lucky/aggbug/314199.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2010-03-01 21:24 <a href="http://www.blogjava.net/lucky/archive/2010/03/01/314199.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>1z0-052j学习笔记</title><link>http://www.blogjava.net/lucky/archive/2009/04/01/263349.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Wed, 01 Apr 2009 06:05:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2009/04/01/263349.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/263349.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2009/04/01/263349.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/263349.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/263349.html</trackback:ping><description><![CDATA[写在前面的话,今天通过了1z0-052j。我把准备考试之前做的8篇笔记综合整理到一起，以方便准备考1z0-052j的人。<br />
下面的笔记是我在学习日文教材（10g）时，为了方便自己记忆和理解而作的。由于主要是为了我自己学习，所以里面有<br />
很多我已经知道的知识点，只是粗略的写了一个纲要，还有就是日文里面有比较多的片假名，开始学习的时候 我还不知道对应的<br />
中文是什么意思，所以可能记得莫名其妙。当然其中还有有不少错误疏漏。不过总体感觉对我自己帮助比较大，当时我不能理解的<br />
东西就找答案转过来的几篇文章帮助我自己理解了当时没有搞清楚的问题。如果能对大家有一点帮助的话，我将不胜荣幸。不过我的建议是：<br />
<strong><span style="color: red;">准备考试的tx对照自己手上的教材从头到尾梳理一遍，认真的做好自己的笔记，然后不懂的地方，再自己去寻找答案。</span></strong><br />
毕竟我的笔记的重点是我不理解和认为比较重要的地方。<br />
最后祝大家好运！<br />
<br />
1.session里使role有效无效<br />
&nbsp;set role r1 enable/disable;<br />
2.SYSTEM,UNDO表领域的数据文件破损，损失的情况下，在数据库进入Mount的状态下恢复，<br />
3.可以对表指定一下权限<br />
ALTER/DELETE/DEBUG/FLASHBACK/INDEX/INSERT/REFERENCES/SELECT/UPDATE<br />
EXCEUTE指定为 过程，函数，包，库<br />
READ/WRITE指定为 目录的权限<br />
4. RETENTION GUARANTEE<br />
事物commit后再undo_retention时间内，事物所使用的undo不能被重用<br />
5.使用SPFILEで管理数据库的时候，控制文件ALTER SYSTEM，scope要指定为spfile，重启<br />
后有效。控制文件可以为1-8个<br />
6.REDO Log组和REDO Log成员情报取得、V$LOG<br />
・REDO Log文件和状态的取得、V$LOGFILE<br />
・achived log file名称和状态的取得、V$ARCHIVED_LOG<br />
7.Data Pump Export<br />
&nbsp;&nbsp;&nbsp;&nbsp; ・DUMPFILE句..导出文件名(默认为expdat.dmp)<br />
&nbsp;&nbsp;&nbsp;&nbsp; ・LOGFILE句...log文件指定(默认为、export.log)<br />
&nbsp;&nbsp;&nbsp;&nbsp; ・CONTENT句...导出对象指定(ALL/DATA_ONLY/METADATA_ONLY)<br />
&nbsp;&nbsp;&nbsp;&nbsp; ・PARALLEL句..并行数(默认为、1)<br />
&nbsp;&nbsp;&nbsp;&nbsp; ・PARFILE句...参数文件<br />
8.默认的约束检查<br />
初期即時(initially immediate).各DML终了<br />
即時制約(not deferrable).......制约不延迟<br />
<br />
<br />
<br />
第一章 Oracle10g安装<br />
1.最小系统要求<br />
RAM：512M&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Swap：1G&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /tmp: 400M<br />
Oracle安装硬盘： 1.5G 事前定义：1.5G<br />
2. 取消安装前系统检测<br />
runInstaller -igonerSysPreqs<br />
3.OFA（Optimail Flexible Architecture）使用目的<br />
为了避免效率低下<br />
备份简单化<br />
多个oracle数据间切换简单<br />
数据库扩张<br />
碎片和资源整合最小化<br />
4.环境变量<br />
ORACLE_BASE： OFA用的根目录<br />
ORACLE_HOME：Oracle软件目录<br />
ORACLE_SID：Oracle实例名<br />
NLS_LANG：语言，地区设定<br />
5.数据库预安装4个用户：<br />
&nbsp;&nbsp;&nbsp;&nbsp; SYS，SYSTEM，SYSMAN，DBSNMP<br />
<br />
第二章 Oracle数据库作成<br />
1.数据库组成<br />
控制文件<br />
数据文件<br />
REDO日志文件<br />
初始化文件<br />
密码文件：SYS的密码管理文件。从远端使用数据库时<br />
archived REDO日志文件<br />
2.控制文件：记录数据库和REDO日志文件的位置和名称，记录在初始化参数文件的CONTROL_FILES参数。<br />
3.REDO日志文件：<br />
4.表领域和数据文件<br />
5.SMILLFILE表领域可以包含多个数据文件，非常大（40亿块）的单一数据文件BIGFILE表领域可以作成。<br />
6.实例：SGA和后台进程<br />
7.SGA<br />
DBCache<br />
REDO日志文件<br />
共有Pool<br />
large Pool<br />
JAVA Pool<br />
Stream Pool<br />
8.后台进程<br />
SMON<br />
PMON<br />
DBWn<br />
LGWR<br />
CKPT<br />
ARCn：REDO日志慢了以后LogSwitch ，REDO日志文件拷贝到archive领域。<br />
9.数据库启动<br />
startup [pfile=PFILE名][nomount | mount | open]<br />
如果pfile省略，这从下面开始读取初始化参数：<br />
spfileSID.ora<br />
spfile.ora<br />
initSID.ora<br />
默认是 startup 不带参数的话，按open<br />
各状态下加载的文件和可以进行的操作：<br />
NOMOUNT:读初期化参数，SGA，后台进程启动，log文件和trace文件打开。可以做成数据库和再作成控制文件<br />
MOUNT：读控制文件。可以进行的操作，文件名变更，在线REDO日志的archived的有效/无效化设定，数据库的整体回复<br />
OPEN：SMON执行<br />
10.Alert日志文件<br />
alert日志文件，BACKGROUND_DUMP_DUST初期化参数的目录，alert_SID.log文件<br />
内部错误(ORA-600),块破损错误(ORA-1578)，死锁错误(ORA-60)<br />
DDL<br />
数据库启动/停止<br />
数据库recover操作<br />
共有服务器的，dipatched进程的消息和错误<br />
11.数据库停止<br />
shutdown [normal | transactional | immediate | abort]<br />
第五章 网络环境构成<br />
1.静态服务登录：listener.ora<br />
2.动态服务登录：ORACLE服务器LOCAL_LISTENER指定的监听器，INSTANCE_NAME和SERVICE_NAME初始化参数指定的值登录。<br />
3.命名方式的使用：sqlnet.ora文件的NAMES.DIRECTORY_PATH参数指定<br />
4.默认的域名：sqlnet.ora文件的NAMES.DEFAULT_DOMAIN参数指定<br />
5.接线时的FAIL OVER<br />
load balance<br />
fail over<br />
6.TNSPing 服务名 [回数]<br />
<br />
第六章 共有服务器构成<br />
1.SGA，PGA，UGA（cursor领域，session领域）<br />
2.UGA领域，如果是在专用服务器模式下 从PGA里得到，如果是共有则从SGA中得到<br />
3.共有服务器初始化参数<br />
DISPATCHERS：dispatch数<br />
MAX_DISPATCHERS：最大dispatch数<br />
SHARED_SERVERS:共有服务器数<br />
MAX_SHARED_SERVERS:最大共有服务器数<br />
LOCAL_LISTENER:<br />
4.共有服务器确认：<br />
lsnrctl services<br />
5.共有服务器接线确认：<br />
V$SESSION视图专用[DEDICATED]共有是[NONE]或者[SHARED]<br />
V$CIRCUIT视图只显示共有服务器接线相关的情报<br />
6.共有服务器的监视视图<br />
v$session<br />
v$circuit<br />
v$shared_server<br />
v$shared_server_monitor<br />
v$dispatcher<br />
v$QUEUE<br />
<br />
<br />
第七章 用户管理<br />
1.创建用户<br />
<br />
CREATE USER 用户名<br />
IDENTIFIED {BY 用户名&nbsp; |&nbsp; EXTERNALLY&nbsp; | GLOBALLY AS '外部名'}<br />
[PASSWORD EXPIRE]<br />
[DEFAULT TABLESPACE 表领域名]<br />
[TEMPORARY TABLESPACE 临时表名]<br />
[QUOTA {大小 | UNLIMITED} ON 表领域名]<br />
[ACCOUNT {LOCK | UNLOCK}]<br />
[PROFILE profile名]<br />
<br />
1)认证方式<br />
密码认证<br />
EXTERNALLY(OS 认证)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用户名 OS_AUTHENT_PREFIX初始化参数指定前缀，比如 OS_AUTHENT_PREFIX=OPS$,创建用户<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create user ops$oracle ideneified EXTERNALLy;<br />
&nbsp;&nbsp; 3)GLOBALLY<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Oracle Advanced Security可选认证方式，指纹认证，X.509证明书...<br />
如果没有指定表领域，则使用默认的表领域。<br />
临时表领域：用于SQL相关的ORDER BY和GROUP BY指定，内部sort用。<br />
&nbsp;&nbsp;&nbsp; 数据库表级别定义内容，可以从 DATABASE_PROPERTIES数据字典视图检索。<br />
<br />
PROFILE<br />
数据库使用率<br />
对于实例的使用限制<br />
密码管理<br />
&nbsp; 参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说明<br />
SESSIONS_PER_USER&nbsp; 用户使用同时session数<br />
CPU_PER_SESSION&nbsp;&nbsp; 1个session的CPU时间<br />
CPU_PER_CALL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1个call的CPU时间<br />
CONNECT_TIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每session的连接时间<br />
IDLE_TIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session连接最长闲置时间<br />
LOGICAL_READS_PER_SECOND <br />
LOGICAL_READS_PER_CALL<br />
PRIVATE_SGA<br />
COMPOSITE_LIMIT<br />
2.权限<br />
系统权限<br />
&nbsp;&nbsp;&nbsp; GRANT 系统权限 TO 用户名 | PUBLIC [,] [WITH ADMIN OPTION];<br />
&nbsp;&nbsp; UNLIMITED TABLESPACE 用户可以使用所有的表领域 包括SYSTEM和SYSAUX。 <br />
&nbsp;&nbsp; 2)对象权限<br />
&nbsp;&nbsp;&nbsp; GRANT 对象权限名 | ALL ON 对象名 TO 用户名 |&nbsp; [WITH GRANT OPTION];<br />
3.角色 ROLE<br />
&nbsp;&nbsp; 事前定义的角色中，可以访问数据字典视图的 SELECT_CATALOG_ROLE，包含了 SELECT ANY DICTIONARY的系统权限<br />
4. 角色作成<br />
CREATE ROLE角色名<br />
&nbsp; IDENTIFIED {BY 用户名&nbsp; |&nbsp; EXTERNALLY&nbsp; | GLOBALLY AS '外部名'}<br />
5. 默认角色的定义 设置用户的默认角色<br />
&nbsp; ALTER USER 用户名 DEFAULT ROLE 角色名<br />
6.激活角色<br />
&nbsp;&nbsp; SET ROLE 角色名 IDENTIFIED BU 密码<br />
7.应用角色，只适用于特定的PL/SQL<br />
CREATE ROLE 角色名 IDENTIFIED USING 存储过程名<br />
<br />
<br />
第八章 数据库的安全<br />
数据库安全<br />
1.权限最小化原则实践<br />
默认用户帐号管理<br />
管理权限的限制<br />
权限(系统权限和对象权限)的赋予权限<br />
DROP ANY TABLE权限以及其他的管理员权限<br />
DBA权限<br />
SYSDBA，SYSOPER权限<br />
具有DBA权限的用户<br />
SQL&gt; select grantee from dba_role_privs&nbsp; where granted_role='DBA';<br />
具有SYSDBA，SYSOPER权限的用户<br />
SQL&gt;select * from v$pwfile_users;<br />
2.数据字典的保护<br />
07_DICTIONARY_ACCESSIBILITY=FALSE<br />
使用GRANT命令，只赋予必须的用户具有访问数据字典的权限<br />
SELECT ANY DICTIONARY系统权限，可以访问所有的数据字典<br />
3.PUBLIC 用户的权限<br />
UTL_SMTP :使用数据库SMTP邮件服务器，可以发送任意信件<br />
UTL_TCP:<br />
UTL_HTTP:<br />
UTL_FILE:<br />
DBMS_OBFUSCATION_TOOLKIT: 数据加密<br />
4.OS目录访问的权限<br />
使用UTL_FILE_DIR初始化参数，PL/SQL对于操作系统目录能进行设定。默认，能够访问目录。<br />
5.操作系统认证的无效化<br />
REMOTE_OS_AUTHENT=FALSE<br />
6.标准密码安全技能的实现<br />
FAILED_LOGIN_ATTEMPTS: 最多登录失败次数<br />
PASSWORD_LOCK_TIME:超过失败次数后，账户锁定的天数(日)<br />
PASSWORD_LIFE_TIME:密码的有效期间<br />
PASSWORD_GRACE_TIME:密码变更的期间<br />
PASSWORD_REUSE_TIME:密码可再使用的天数(日)<br />
PASSWORD_REUSE_MAX:最多可重用的回数<br />
PASSWORD_VERIFY_FUNCTION:密码复杂性评价的PL/SQL函数。$ORACLE_HOME/rdbms/admin/utlpwdmg.sql脚本来作成<br />
7.数据库活动的审查<br />
8.数据库审查<br />
初始化参数 AUDIT_TRAIL：审查结果的保存的位置<br />
NONE： 审查无效<br />
DB:&nbsp; 审查结果保存到数据库<br />
OS： 审查结果保存到系统文件上<br />
AUDIT_FILE_DEST：目录指定<br />
审查： SQL审查，系统权限，对象权限，session审查。<br />
首先，SQL审查，CREATE TABLE，DROP TABLE，TRUNCATE TABLE。<br />
SESSION审查：用户名成功，失败，连接到实例。保存<br />
&nbsp; 连接的时刻<br />
切断的时刻<br />
处理理论 I/O<br />
处理的物理I/O<br />
审查option的表示<br />
ALL_DEF_AUDIT_OPTS:默认审查<br />
DBA_STMT_AUDIT_OPTS:sql审查<br />
DBA_PRIV_AUDIT_OPTS:权限审查<br />
DBA_OBJ_AUDIT_OPTS:schema对象权限审查<br />
-: 不审查<br />
S: session别的审查<br />
A:Access类的审查<br />
9.审查结果的表示<br />
DBA_AUDIT_TRAIL:所有审查实体的确认<br />
DBA_AUDIT_EXISTS:AUDIT EXISTS/AUDIT NOEXISTS记录的确认<br />
DBA_AUDIT_OBJECT:对象相关的确认<br />
DBA_AUDIT_SESSION:Session相关记录的确认<br />
DBA_AUDIT_STATEMENT:SQL相关的确认<br />
10.基于值的审查：使用trig<br />
11.FGA<br />
DBMS_FGA审查策略<br />
FGA策略：DBMS_FGA.ADD_POLICY<br />
DBMS_FGA.ENABLE_POLICY,DBMS_FGA.DISABLE_POLICY<br />
已经存在的策略再追加，就会发生错误<br />
SQL审查<br />
所有的SQL审查，使用NULL条件<br />
审查条件没有效的情况下，访问审查对象会发生错误<br />
事件处理不存在的情况下，只做成记录<br />
FGA审查实体<br />
DBA_FGA_AUDIT_TRAIL:所有FGA事件确认<br />
ALL_AUDIT_POLICIES:现在用户能够访问的所有FGA策略<br />
DBA_AUDIT_POLICIES:数据库内的所有FGA策略<br />
USER_AUDIT_POLICIES:用户对象的所有FGA策略<br />
AUDIT_SYS_OPERATIONS<br />
第九章 SCHEMA对象管理<br />
1.同一SHCEMA内不能同名<br />
表<br />
视图<br />
顺序<br />
private别名<br />
存储过程<br />
存储函数<br />
包<br />
用户定义类型<br />
做成主键时，默认生成和主键同名的索引。<br />
2.PL/SQL<br />
build-in Package<br />
DBMS_STATS: 优化统计的收集，表示和变更<br />
DBMS_TTS:transport表领域的检查<br />
DBMS_WORKLOAD_REPOSITORY:ADDM的<br />
DBMS_SESSION:使用PL/SQL来只能够ALTER SESSION或者SET<br />
DBMS_RESOURCE_MANAGER:资源的管理<br />
3.PL/SQL性能控制的初始化函数<br />
PLSQL_CODE_TYPE:是编译好的二进制文件还是原始文件<br />
PLSQL_DEBUG:是否可以调试，默认是否<br />
PLSQL_OPTIMIZE_LEVEL:[1]编译优化，代码量大 [2]运行时优化，代码量小 默认为2<br />
PLSQL_WARNINGS:有两个参数 第一个是是否产生警告，第二个是警告的范围<br />
ALL:所有<br />
SERVER:重大<br />
INFORMATIONAL:情报<br />
PERFORMANCE:performance<br />
第十章 数据管理<br />
1.Data Dump<br />
导出的单位<br />
数据库:但是不包含SYS,ORDSYS,ORDPLUGINS，CTXSYS，MDSYS，LABCSYS和XDB等系统shecma<br />
schema:<br />
表：特定的表，区域以及关联的对想导出。<br />
数据库，自己以外的schema以及表导出，需要具有EXP_FULL_DATABASE角色。<br />
2. SQL*Loader：外部文件数据，导入数据库表中。<br />
数据文件: 固定记录形式，可变记录形式，Stream记录形式<br />
控制文件:数据检索位置，数据的解释方法，数据的插入位置，导入必须的信息保存文件<br />
日志文件:导入件数以及导入过程中发生错误的记录文件<br />
不良文件:因为错误而没有被导入数据库的数据记录<br />
废弃文件:错位以外的原因而没有被导入的记录保存文件<br />
3.Stream形式的情况<br />
INFILE &#8216;数据文件名&#8217; ["str {char文字列 | 16进文字}"]<br />
4.命令行sqlldr key=只<br />
userid:Oracle的用户名，密码<br />
control:控制文件名<br />
log:日志文件名<br />
bad:不良文件名<br />
data:数据文件名<br />
discard:废弃文件名<br />
discardmax:最大允许的废弃文件书<br />
skip:skip的理论数据数<br />
load:导入的理论数据数<br />
errors:允许的最大错误数<br />
rows:<br />
bindsize:<br />
silent:执行中不显示信息<br />
direct:directpath是哟个<br />
parfile:参数文件<br />
parallel:并行处理(默认false)<br />
file:扩展文件<br />
4.导入的方法<br />
从来型：就是按照正常的SQL INSERT 然后提交<br />
直接：通过全数据库块上写入数据库，在最高水位开始写入数据，事务并没有结束，索引也没有更新。<br />
&nbsp;&nbsp; 区别<br />
&nbsp;&nbsp;&nbsp;&nbsp; 从来型：常常是生成REDO实体，所有的制约施行，Insert trig启动，可以导入到clust表，别的用户表更新可以<br />
&nbsp;&nbsp;&nbsp; 直接：NOARCHIVELOG 模式下不生成REDO实体，只有NOT NULL，UNIQUE，主键实行，insert trig不执行，不能操作别的用户的表<br />
<br />
第11章 记忆域构造<br />
1.理论构造<br />
&nbsp; 表领域：1个数据库可以包含多个表领域，可以作为备份的管理单位<br />
segment<br />
extend<br />
data block:DB_BLOCK_SIZE初始化参数设定，可以为2，4，8，16，32kb<br />
2.LOCAL 管理表领域的优点<br />
不是再归的管理操作<br />
因为不用操作数据字典，可以不用同其他操作来竞争资源<br />
不用进行空的extend的碎片整理<br />
不用设定extend和segment的大小<br />
segment map的变更不用生成UNDO数据<br />
3.LOCAL管理表领域的extend分割方法<br />
自动(AUTOALLOCATE):ORACLE服务器自动管理extend的大小，用户不需要进行设定<br />
均一(UNIFORM) :表领域的extend大小，用户指定的大小统一使用，默认是1MB。TEMP表领域通常是，均已，UNDO则不是均一<br />
4. 自动segment领域管理，下面segment属性自动调整，行的插入可能的数据块的管理功能<br />
PCTUSED<br />
FREELISTS<br />
FREELISTS GROUP<br />
自动segment管理机能，在表领域上进行指定。<br />
5.表领域的类型<br />
PARMANENT(永续)<br />
UNDO<br />
TEMPORARY(临时)<br />
6.表领域的作成<br />
CREATE [SMALLFILE | BIGFILE] TABLESPACE 表领域名<br />
DATAFILE '数据文件名' SIZE {大小{k | M} | REUSE}<br />
[AUTOEXTEND {OFF | ON} [NEXT 大小{K | M}]]<br />
[MAXSIZE {UNLIMITED | 大小{K | M}}]<br />
[,'数据文件名' SIZE {大小{k | M} | REUSE}...]<br />
[BLOCKSIZE 大小[K]]<br />
[EXTENT MANAGEMENT {DICTIONARY | LOCAL<br />
{AUTOALLOCATE | UNIFORM [SIZE 大小[k | m]]}}]<br />
[ONLINE | OFFLINE]<br />
[SEGMENT SPACE MANAGEMENT {MANUAL | AUTO}]<br />
[LOGGING | NOLOGGING];<br />
7.表领域的变更<br />
表领域可以进行下面的变更：<br />
表领域名<br />
状态的变更（只读，读/写，offline）<br />
大小的变更(数据文件的追加，数据文件大小的自动扩张)<br />
logging无效化<br />
设定值的变更<br />
ALTER TABLESPACE 表领域名<br />
{RENAME 表领域名<br />
| READ{WRITE | ONLY}}<br />
|{ONLINE | OFFLINE [NORMAL | TEMPORARY | IMMEDIATE]}<br />
|ADD DATAFILE '数据文件' SIZE 大小[K |&nbsp; M]<br />
|{LOGGING | NOLOGGING}<br />
如果要设定正使用的数据文件自增，则使用下面的SQL<br />
ALTER DATABASE [数据库名]<br />
DATAFILE '数据文件名'<br />
{RESIZE SIZE 大小[K | M]}<br />
| AUTOEXTEND [OFF | ON[NEXT&nbsp; 大小[K | M]]]<br />
MAXSIZE 大小[K | M]]};<br />
8.OFFLINE<br />
标准：产生CKPT，如果再ONLINE的时候不需要media recovery。<br />
临时：产生CKPT ，如果再ONLINE的时候需要media recovery<br />
IMMEDIATE: 产生CKPT ，如果再ONLINE的时候需要media recovery<br />
9.表领域和数据文件信息的相关视图<br />
表领域情报： DBA_TABLESPACE，V$TABLESPACE<br />
数据文件情报：DBA_DATA_FILES，V$DATAFILE<br />
10.表领域的删除<br />
&nbsp;&nbsp; DROP TABLESPACE 表领域<br />
&nbsp; [INCLUDING CONTENTS [AND DATAFILES]<br />
&nbsp; [CASCADE CONSTRAINTS]];<br />
具有活动的segment的表领域不能删除，include句指删除表领域中包含的所有segment，如果不包含这句，这非空的表领域不能被删除，<br />
CASCADE句关联的 制约删除。<br />
SYSTEM表领域不能被删除，SYSAUX只能SYSDBA在MIGRATE模式下爱被删除。<br />
<br />
<br />
第12章 UNDO管理<br />
1.UNDO数据和UNDO Segment<br />
事务的回滚<br />
读取一致性<br />
实例的recovery<br />
falshback<br />
2.UNDO数据和事务<br />
1个UNDO Segment可以处理多个事务，INSERT的时候，保存ROWID<br />
3.UNDO管理构成<br />
自动UNDO管理的概念<br />
CREATE UNDO TABLESPACE 表领域<br />
DATAFILE '数据文件名' SIZE 大小<br />
[AUTOEXTEND ON [NEXT 增加的大小]]<br />
[MAXSIZE UNLIMITED | 最大大小]<br />
UNDO表领域，下面的特征<br />
LOCAL管理表领域<br />
自动extend管理<br />
UNDO segment 专用<br />
4.自动UNDO管理的设定<br />
自动UNDO管理相关的初期化参数<br />
UNDO_MANAGEMENT： 自动UNDO管理的时候设为[AUTO],默认为[MANUAL]，手动UNDO管理<br />
UNDO_TABLSPACE： 现在的ORACLE实例的活动UNDO表领域<br />
5.UNDO保存：UNDO数据用于事务的回滚，也可以用FLASHBACK<br />
UNDO_RETENTION： 默认900秒<br />
6.UNDO保存的保证<br />
ALTERTABLESPACE 表领域名 RETENTION GUARNTEE；<br />
DBA_TABLESPACES视图可以确认RETENTION列；<br />
如果对于非UNOD表领域实行RETENTION GUARNTEE，则会出现错误。<br />
7.UNDO数据关联的错误<br />
[ORA-01555:snapshot太旧]回避的方法<br />
UNDO保存期间的调整<br />
UNDO表领域大小的调整<br />
UNDO保存的保证使用UNDO保存期间被复写的完全防止可能<br />
8.UNDO ADVISE<br />
&nbsp;&nbsp;&nbsp; UNDO ADVISE使用确认内容<br />
UNDO数据保存必须的表领域大小<br />
扩张可能的UNDO表领域的最大大小<br />
现在的UNDO表领域可能保存的期间<br />
<br />
<br />
第13章 备份以及复原的基本知识<br />
1.数据库关联的障害<br />
文障害：数据库操作时的SQL语句失败<br />
用户进程障害：应用程序异常结束，用户session强制终了<br />
网络障害：不能连接listener，不能进行网络接线<br />
用户错误：数据库操作正常，但是系统操作不正常（表的删除/错误的数据操作）<br />
实例障害：内存障害，OS障害，Oracle实例被强制停止<br />
媒体障害：Oracle数据库文件的一部分损失（文件删除硬盘破损等）<br />
2.文障害的解决<br />
无效的数据入力（ORA-01722：数值无效） 检查SQL语句，确认 数据<br />
权限不足（ORA-01031：权限不足）：应该赋予适当的系统权限或者对象权限<br />
领域不足：赋予用户足够的表领域<br />
ORA-01653：表SCOTT.TEST不能进行扩张<br />
ORA-01658：表领域TS01的segment不能作成INITAL的extend<br />
4)应用的逻辑错误（计算结果）：确认程序逻辑正确<br />
3.用户进程障害解决：PMON对应<br />
4.网络障害<br />
listener接线错误（ORA-12541：没有listener） ： 构建多个listener，客户端的配置failover=true<br />
网络接口错误（ORA-12154：指定的接线识别子不能解决）：复数接线子配置，并确认硬件<br />
5.用户错误<br />
误删表（DROP TABLE）：从垃圾箱还原（flashback drop）<br />
误删表（truncate table）：flashbak database，执行表领域的point-in-point的恢复<br />
误提交（COMMIT）UPDATE，DELETE操作： 如果UNDO表中残留有数据的话，flashback table；如果UNDO表中不存在数据的话，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用Logminer，查找REDOLOG实体<br />
&nbsp; 事前行移动有效化必要。<br />
6.实例障害：SMON，自己恢复<br />
7.媒体错误解决：基本就是从BACKUP文件恢复，然后用REDO日志进行recover处理<br />
平均障害间隔（MTBF：Mean TIme Between Failuer）<br />
平均修复时间（MTTR：Mean Time To Repair）<br />
8.实例恢复构成<br />
CheckPoint<br />
&nbsp;SCN（System Change Number）：事务提交时的编号。Oracle用SCN来区分事务。<br />
DBWn向数据文件写变更的数据块<br />
CKPT向控制文件更新新的CheckPoint编号<br />
CKPT向数据文件更新新的CheckPoint编号<br />
&nbsp;&nbsp;&nbsp; CheckPoint的发生时机：<br />
Log Switch<br />
管理员的指定（ALTER SYSTEM CHECKPOINT）<br />
&nbsp;表领域Offline<br />
数据库停止<br />
9.实例回复：当实例重启后，SMON会比较控制文件和数据文件的SCN，来判断从什么地方开始实例回复<br />
实例回复：只能回复到最后一次事务提交的状态（最后的SCN号）<br />
实例回复：使用REDO日志文件，进行Roll Foward，然后Roll Back<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 初始化参数：FAST_START_MTTR_TARGET，Oracle服务器调整CheckPoint的频度，这个时间越短，实例回复的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 时间越短，但是平凡的写数据文件会导致数据库文件效率低下，所以应该调整为合适的值。<br />
10.要使实例回复时间越短:<br />
FAST_START_MTTR_TARGET:值越小<br />
REDO日志文件：文件大小越小<br />
11.ARCHIVELOG初始化参数<br />
LOG_ARCHIVE_DEST_1～LOG_ARCHIVE_DEST_10：Achive LOG日志文件保存的位置，最多10个，可以为本地磁盘或者是网络服务名<br />
LOG_ARCHIVE_FORMAT：Archive LOG日志文件名的格式<br />
ARCHIVELOG模式切换，ALTER DATABASE ARCHIVELOG，在MOUNT的时候进行<br />
12. LOGGING和NOLOGGING<br />
NOLOGGING，不生成REDO日志实体<br />
表领域，Segment级别指定<br />
<br />
下面的命令可以指定为NOLOGGING<br />
CREATE TABLE ... AS SELECT<br />
CREATE INDEX...<br />
ALTER INDEX...REBUILD<br />
<br />
<br />
第14章 数据库备份<br />
1.一致性备份：要点，数据库要暂时停止。使用[SHUTDOWN ABORT]以外的命令让数据库停止，在停止前产生CKPT。<br />
数据库停止<br />
所有的REDO日志适用<br />
恢复后就可以正常使用<br />
2.非一致性备份<br />
NOARCHIVELOG模式下只能进行一致性备份<br />
ARCHIVELOG可以进行一致性备份或者非一致性备份<br />
RMAN备份可以在MOUNT或者OPEN下进行。<br />
3.backup-set image-copy区别<br />
backupset可以拷贝到硬盘或者磁带，image-copy只能拷贝到硬盘中<br />
backupset可以包含复数的文件，image-copy只能拷贝1个文件<br />
backupset不包含未使用的数据块，image-copy包含未使用的数据块<br />
backupset能够只备份从最后一次备份开始的数据，image-copy则不可能<br />
backupset 进行restore时需要抽出需要的文件，image-copy则不需要<br />
4.整体备份和增量备份<br />
5.flashrecover领域管理<br />
DB_RECOVERY_FILE_DEST:flash Recove领域场所的指定<br />
DB_RECOVERY_FILE_DEST_SIZE:flash RECOVEY领域最大的大小<br />
flash Recovery领域，archiveRDDO日志文件，备份文件，flashback日志保存的领域<br />
Flash Recovery领域大小，推荐能够保存备份文件（包含增分备份文件），ArchiveREDO日志，2个数据库文件（flashback日志）的大小<br />
6.控制文件的trace的备份<br />
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;这个命令的结果，保存到初始化参数USER_DUMP_DEST指定的文件目录。保存生成控制文件的SQL语句。<br />
7.RMAN 基本命令<br />
CATALOG：用户管理的备份信息，登录到RMANrepository。<br />
DELETE:RMANrepository里备份信息和OS管理的备份文件都被删除<br />
CROSSCHECK:RMAN保存的信息和OS管理的备份文件进行整合确认<br />
CHANGE：切换UNAVAILABLE和AVAILABLE状态，只改变RMAN的情报<br />
<br />
第15章 数据库恢复<br />
1.发生下面的情况下数据库会停止<br />
控制文件的损失<br />
SYSTEM表领域，活动的UNDO表领域数据文件被破坏<br />
REDO日志Group里的所有REDO日志成员被破坏<br />
2.数据文件offline的方法（ALTERDATABASE DATAFILE... OFFLINE），ARCHIVELOG模式。<br />
NOARCHIVELOG模式，（ALTER DATABASE DATAFILE... OFFLINE DROP）<br />
临时表领域的临时文件有故障的话，表领域的数据文件offline的情况下数据库可以OPEN<br />
SYSTEM表领域，活动的UNDO表领域不能OFFLINE<br />
3.从控制文件故障恢复<br />
&nbsp;所有控制文件都损坏的情况下的恢复：<br />
从备份控制文件复原，然后使用recover命令&nbsp; 使用RESETLOGS语句来OPEN<br />
控制文件的再作成<br />
4.从控制文件开始恢复，控制文件再作成是只有在NOMOUNT进行<br />
5.REDO日志文件故障开始恢复<br />
如果只是一部分REDO日志成员发生障害的，数据库OPEN可以进行<br />
如果所有的REDO日志发生障害的话，数据库不能OPEN<br />
6.ArchiveLOG日志文件作成后，不需要回复，直接使用下面的命令再作成<br />
&nbsp;&nbsp;&nbsp; ALTER DATABASE CLEAR LOGFILEGROUP 组号<br />
&nbsp;&nbsp;&nbsp; ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 组号<br />
REDO日志组消去<br />
CHECKPOINT和ARCHIVEREDO日志作成完之后，REDO日志组使用<br />
不作成ARCHIVEREDO日志文件的话[UNARCHIVED]句需要<br />
7.数据文件故障开始恢复<br />
NOARCHIVELOG模式时的recovery的手顺<br />
停止ORACLE服务器<br />
从数据库全体备份中恢复<br />
数据库OPEN<br />
ARCHIVELOG模式<br />
第16章 锁竞合的检出以及解决方案<br />
1.DML锁<br />
行锁（排他）<br />
表锁（共有）<br />
2.DML共有表所，竞合DDL防止<br />
3.手动行锁<br />
SELECT ... FOR UPDATE NOWAIT | WAIT 数秒<br />
4.手动表锁<br />
LOCK TABLE 表名 IN 锁定模式名 MODE [NOWAIT]<br />
ROW SHARE：SELECT...FOR UPDATE；<br />
ROW EXCLUSIVE:DML（INSERT,UPDATE，DELETE）<br />
EXCLUSIVE：DDL<br />
エンキューメカニズム<br />
5.锁竞合发生的场合：<br />
变更没有提交<br />
事务长时间的场合<br />
不必要的高锁级别<br />
6.死锁<br />
如果检出死锁，Oracle服务器会自动回滚解决死锁。<br />
死锁发生的时候，警告日志（BACKGROUND_DUMP_DEST初始化参数），警告日志记录的<br />
用户trece文件（USER_DUMP_DEST初期化参数指定）<br />
7.死锁的详细情报，USER_DUMP_DEST初始化参数指定的目录文件里确认。<br />
8.V$LOCK视图，V$LOCKED_OBJECT视图<br />
9.ALTER SYSTEM KILL SESSION 'SID列值，SERIAL#列值'<br />
<br />
第17章 性能监视<br />
1.性能问题对应<br />
数据字典视图：领域相关<br />
动态性能视图（V$DATABASE，V$INSTANCE）：内存使用量，待机时间按，实例的活动<br />
2.个别的matric情报页面包含<br />
&nbsp; 最新已知值<br />
平均值<br />
上限值，下限值<br />
3.EM中性能页的内容<br />
host<br />
session：待机和实行中<br />
实例<br />
4.如果REDO日志buffer待机时间多发的情况下<br />
把REDO日志文件配置在能够高速操作的硬盘上<br />
REDO日志buffer小的话，增加 大小<br />
5.数据文件的硬盘I/O集中的话可以考虑下面的方法<br />
RAID<br />
ASM<br />
6.表优化统计DBA_TABLES<br />
NUM_ROWS：表保存的行数<br />
BLOCKS;行保存的block数<br />
AVG_ROW_LEN:平均行长度<br />
LAST_ANALYZED：最后分析的日时<br />
NUM_FREELIST_BLOCKS：空list里面的块数<br />
CHAIN_CNT：移行连锁的行数<br />
7.索引的统计<br />
BLEVEL:<br />
LEAF_BLOCKS:<br />
DISTINCT_KEYS:<br />
AVG_LEAF_BLOCKS_PER_KEY:<br />
AVG_DATA_BLOCKS_PER_KEYS:<br />
CLUSTERING_FACTOR<br />
NuM_ROWS<br />
8.优化统计相关<br />
优化统计在收集时也是变化的<br />
Oracle服务器再启动也不变化<br />
&nbsp;&nbsp; 表中行数据频繁更新的话，应该考虑手动来进行统计分析<br />
&nbsp;&nbsp;&nbsp; 对于大规模表，进行预算的统计收集更适合<br />
&nbsp;&nbsp;&nbsp;&nbsp; 使用DBMS_STATS包进行统计收集<br />
9. 无效对象的troubleshooting<br />
&nbsp; PL/SQL对象的有效性可以通过数据字典DBA_OBJECT视图的STATUS列来确认<br />
无效的PL/SQL再编译<br />
下回需要运行PL/SQL时自动编译<br />
使用ALTER .. COMPILE来手动编译<br />
ALTER FUNCTION 函数名 COMPILE<br />
ALTER PROCEDURE 存储过程名COMPILE<br />
9.索引的再构筑<br />
如果使用ALTER TABLE...MOVE命令，索引将无效，这是因为ROWID发生改变。可以查看数据字典的DBA_INDEXES视图的STATUS列<br />
来确认。<br />
再构筑<br />
ALTER INDEX 索引名 REBUILD [ONLINE] [TABLESPACE 表领域名]<br />
如果使用ONLINE再构筑中DML可能。<br />
再构筑中需要2倍的领域。<br />
第18章 预防性维护<br />
1.服务器生成的警告分两个阶段<br />
警告<br />
危机<br />
2.为了将来进行性能比较，需要指定一个基线<br />
3.自动workloasrepository（AWR）：性能相关的情报保存的地方<br />
快照（snapshot）保存<br />
MMON（Manageability Monitor）默认60分钟1次，保存7天<br />
SYSAUX表领域保存<br />
SYS schema<br />
SYSAUX表领域<br />
4.AWR管理<br />
为了进行快照手机，初始化参数STATISTICS_LEVEL可以设置为[TYPICAL]或者[ALL],如果这个参数<br />
为[BASIC]的话，不能进行快照收集<br />
5.删除快照的方法<br />
手动page<br />
调整snapshot的保存期间<br />
6.为了进行对比需要作成[保存snapshot set]<br />
7.诊断advise，advise的种类<br />
ADDM：对于数据库整体进行分析建议<br />
SQL tuning advise:对SQL语句进行优化<br />
SQL Access advise：对workload进行分析，索引的追加<br />
memory advise:<br />
segment advise:<br />
undo advise:<br />
MTTR advise:现在预计的平均回复时间，<br />
8.segment缩小<br />
ALTER TABLE ... SHRINK SPACE<br />
local管理表领域<br />
行管理有效（ALTER TABLE ... ENABLE ROW MOVEMENT）<br />
9.SQL Tunning Set<br />
Snapshot<br />
保存snapshot set<br />
10.自动共有内存管理<br />
&nbsp;1）SGA_TARGET，最大SGA大小SGA_MAX_SIZE指定。<br />
11.ADDM 在两个snapshot之间进行分析，分析结果，保存在AWR中。<br />
<img src ="http://www.blogjava.net/lucky/aggbug/263349.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2009-04-01 14:05 <a href="http://www.blogjava.net/lucky/archive/2009/04/01/263349.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>创建表空间</title><link>http://www.blogjava.net/lucky/archive/2008/11/12/240067.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Wed, 12 Nov 2008 05:15:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2008/11/12/240067.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/240067.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2008/11/12/240067.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/240067.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/240067.html</trackback:ping><description><![CDATA[sqlplus /nolog<br />
connect system/password@orcl as sysdba<br />
<br />
①テーブルスペースの作成<br />
CREATE TABLESPACE "USR_DB"<br />
LOGGING<br />
DATAFILE 'C:\oracle\oradata\orcl\USR_DB.ora' SIZE 100M REUSE<br />
AUTOEXTEND<br />
ON NEXT 10M MAXSIZE UNLIMITED DEFAULT<br />
STORAGE ( INITIAL 128K NEXT 128K MINEXTENTS 1 MAXEXTENTS<br />
UNLIMITED PCTINCREASE 0 );<br />
<br />
②一時表領域の作成<br />
CREATE TEMPORARY TABLESPACE USR_DB_TEMP<br />
TEMPFILE 'C:\oracle\oradata\orcl\USR_DB_TEMP.ora' SIZE 100M<br />
AUTOEXTEND ON<br />
;<br />
<br />
③ユーザの作成<br />
CREATE USER "USR_DB" PROFILE "DEFAULT" IDENTIFIED BY "PASSWORD"<br />
DEFAULT<br />
TABLESPACE "USR_DB" TEMPORARY<br />
TABLESPACE "USR_DB_TEMP" ACCOUNT UNLOCK;<br />
GRANT UNLIMITED TABLESPACE TO "USR_DB";<br />
GRANT SELECT ON "SYS"."V_$SESSION" TO "USR_DB";<br />
GRANT "CONNECT" TO "USR_DB";<br />
GRANT "RESOURCE" TO "USR_DB";<br />
<br />
④データベースのエクスポート(バッチファイル)<br />
@echo OFF<br />
for /F "tokens=1-3 delims=/ " %%a in ('date /t') do SET DT=%%a%%b%%c<br />
for /F "tokens=1-2 delims=: " %%a in ('time /t') do SET TM=%%a%%b<br />
<br />
exp system/password@orcl owner=matrix_dev buffer=1000000 file=usr\%DT%%TM%_usr_dev.dmp log=usr\%DT%%TM%_usr_devlog<br />
<br />
⑤データベースのインポート<br />
imp system/password@orcl fromuser=usr_dev touser=USR_DB buffer=10000000 file=C:\TLT\DB\200908170115_usr_dev.dmp
<img src ="http://www.blogjava.net/lucky/aggbug/240067.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2008-11-12 13:15 <a href="http://www.blogjava.net/lucky/archive/2008/11/12/240067.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle DDL</title><link>http://www.blogjava.net/lucky/archive/2008/11/12/240066.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Wed, 12 Nov 2008 05:14:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2008/11/12/240066.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/240066.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2008/11/12/240066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/240066.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/240066.html</trackback:ping><description><![CDATA[<h3 class="post-title entry-title">
<a href="http://xplucky.blogspot.com/2007/10/oracle-ddl.html"><br />
</a>
</h3>
-- ================================================================================<br />
--   oracle SQL DDL Script File<br />
-- ================================================================================<br />
<br />
<br />
-- ===============================================================================<br />
-- <br />
--   Generated by:      tedia2sql -- v1.2.13b2<br />
--                      See http://tedia2sql.tigris.org/AUTHORS.html for tedia2sql author information<br />
-- <br />
--   Target Database:   oracle<br />
--   Generated at:      Sat Dec 18 19:48:40 2004<br />
--   Input Files:       TestERD.dia<br />
-- <br />
-- ================================================================================<br />
<br />
<br />
<br />
-- Generated SQL Constraints Drop statements<br />
-- --------------------------------------------------------------------<br />
--     Target Database:   oracle<br />
--     SQL Generator:     tedia2sql -- v1.2.13b2<br />
--     Generated at:      Sat Dec 18 19:48:32 2004<br />
--     Input Files:       TestERD.dia<br />
<br />
drop index idx_iimd5;<br />
drop index idx_iiid;<br />
drop index idx_siiid;<br />
drop index idx_siips;<br />
drop index idx_iclidnm;<br />
drop index idx_uinm;<br />
drop index idx_uiid;<br />
drop index idx_uauiid;<br />
drop index idx_uiruid;<br />
drop index idx_acid;<br />
drop index idx_usmd5;<br />
alter table subImageInfo drop constraint fk_iisii ;<br />
alter table imageCategoryList drop constraint fk_iiicl ;<br />
alter table imageAttribute drop constraint fk_iiia ;<br />
alter table userImageRating drop constraint fk_uiuir ;<br />
alter table userAttribute drop constraint fk_uiua ;<br />
alter table userSession drop constraint fk_uius ;<br />
alter table imageAttribute drop constraint fk_iaac ;<br />
alter table userAttribute drop constraint fk_acua ;<br />
<br />
<br />
-- Generated Permissions Drops<br />
-- --------------------------------------------------------------------<br />
--     Target Database:   oracle<br />
--     SQL Generator:     tedia2sql -- v1.2.13b2<br />
--     Generated at:      Sat Dec 18 19:48:32 2004<br />
--     Input Files:       TestERD.dia<br />
<br />
revoke all on imageInfo from fmorg ;<br />
revoke select on imageInfo from public ;<br />
revoke all on subImageInfo from fmorg ;<br />
revoke all on imageCategoryList from fmorg ;<br />
revoke select on categoryNames from public ;<br />
revoke all on categoryNames from fmorg ;<br />
revoke all on imageAttribute from fmorg ;<br />
revoke all on userInfo from fmorg ;<br />
revoke all on userAttribute from fmorg ;<br />
revoke all on userImageRating from fmorg ;<br />
revoke all on attributeCategory from fmorg ;<br />
revoke all on userSession from fmorg ;<br />
revoke select on extremes from public ;<br />
revoke all on extremes from fmorg ;<br />
<br />
<br />
-- Special statements for oracle,postgres,db2:pre databases<br />
-- statements to do BEFORE creating<br />
-- the tables (schema)<br />
drop sequence imageInfo_id;<br />
create sequence imageInfo_id;<br />
<br />
<br />
-- Generated SQL View Drop Statements<br />
-- --------------------------------------------------------------------<br />
--     Target Database:   oracle<br />
--     SQL Generator:     tedia2sql -- v1.2.13b2<br />
--     Generated at:      Sat Dec 18 19:48:32 2004<br />
--     Input Files:       TestERD.dia<br />
<br />
drop view ratings_view cascade constraints ;<br />
drop view whorated_view cascade constraints ;<br />
drop view users_view cascade constraints ;<br />
<br />
<br />
-- Generated SQL Schema Drop statements<br />
-- --------------------------------------------------------------------<br />
--     Target Database:   oracle<br />
--     SQL Generator:     tedia2sql -- v1.2.13b2<br />
--     Generated at:      Sat Dec 18 19:48:32 2004<br />
--     Input Files:       TestERD.dia<br />
<br />
drop table imageInfo cascade constraints ;<br />
drop table subImageInfo cascade constraints ;<br />
drop table imageCategoryList cascade constraints ;<br />
drop table categoryNames cascade constraints ;<br />
drop table imageAttribute cascade constraints ;<br />
drop table userInfo cascade constraints ;<br />
drop table userAttribute cascade constraints ;<br />
drop table userImageRating cascade constraints ;<br />
drop table attributeCategory cascade constraints ;<br />
drop table userSession cascade constraints ;<br />
drop table extremes cascade constraints ;<br />
<br />
<br />
-- Generated SQL Schema<br />
-- --------------------------------------------------------------------<br />
--     Target Database:   oracle<br />
--     SQL Generator:     tedia2sql -- v1.2.13b2<br />
--     Generated at:      Sat Dec 18 19:48:32 2004<br />
--     Input Files:       TestERD.dia<br />
<br />
<br />
-- imageInfo<br />
create table imageInfo (<br />
id                        numeric (18) not null,<br />
insertionDate             date default now() not null,<br />
md5sum                    char (32) not null,<br />
binaryType                varchar (16) default 'jpg' null,<br />
name                      varchar (64) not null,<br />
locationList              varchar (128) default '//imgserver.org',<br />
description               varchar (128) null,<br />
constraint pk_ImageInfo primary key (id)<br />
) ;<br />
<br />
-- subImageInfo<br />
create table subImageInfo (<br />
imageInfo_id              numeric (18) not null,<br />
pixSize                   integer not null,<br />
constraint pk_SubImageInfo primary key (imageInfo_id,pixSize)<br />
) ;<br />
<br />
-- imageCategoryList<br />
create table imageCategoryList (<br />
imageInfo_id              numeric (18) not null,<br />
name                      varchar (32) not null,<br />
constraint pk_ImageCategoryList primary key (imageInfo_id,name)<br />
) ;<br />
<br />
-- categoryNames<br />
create table categoryNames (<br />
name                      varchar (32) not null,<br />
constraint pk_CategoryNames primary key (name)<br />
) ;<br />
<br />
-- imageAttribute<br />
create table imageAttribute (<br />
imageInfo_id              numeric (18) not null,<br />
attributeCategory_id      numeric (18) not null,<br />
numValue                  numeric (8),<br />
category                  numeric (4),<br />
constraint pk_ImageAttribute primary key (imageInfo_id,attributeCategory_id)<br />
) ;<br />
<br />
-- userInfo<br />
create table userInfo (<br />
id                        numeric (18) not null,<br />
insertionDate             date,<br />
md5sum                    char (32),<br />
birthDate                 date,<br />
gender                    char (1),<br />
name                      varchar (32),<br />
email                     varchar (96),<br />
currentCategory           varchar (32),<br />
lastDebitDate             date,<br />
acctBalance               numeric (10,2),<br />
active                    integer,<br />
constraint pk_UserInfo primary key (id)<br />
) ;<br />
<br />
-- userAttribute<br />
create table userAttribute (<br />
userInfo_id               numeric (18) not null,<br />
attributeCategory_id      numeric (18) not null,<br />
numValue                  numeric (5,4),<br />
constraint pk_UserAttribute primary key (userInfo_id,attributeCategory_id)<br />
) ;<br />
<br />
-- userImageRating<br />
create table userImageRating (<br />
userInfo_id               numeric (18) not null,<br />
imageInfo_id              numeric (15) not null,<br />
rating                    integer,<br />
constraint pk_UserImageRating primary key (userInfo_id,imageInfo_id)<br />
) ;<br />
<br />
-- attributeCategory<br />
create table attributeCategory (<br />
id                        numeric (18) not null,<br />
attributeDesc             varchar (128),<br />
constraint pk_AttributeCategory primary key (id)<br />
) ;<br />
<br />
-- userSession<br />
create table userSession (<br />
userInfo_id               numeric (18) not null,<br />
md5sum                    char (32) not null,<br />
insertionDate             date,<br />
expireDate                date,<br />
ipAddress                 varchar (24),<br />
constraint pk_UserSession primary key (userInfo_id,md5sum)<br />
) ;<br />
<br />
-- extremes<br />
create table extremes (<br />
name                      varchar (32) not null,<br />
colName                   varchar (64),<br />
minVal                    numeric (15),<br />
maxVal                    numeric (15),<br />
constraint pk_Extremes primary key (name)<br />
) ;<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
-- Generated SQL Views<br />
-- --------------------------------------------------------------------<br />
--     Target Database:   oracle<br />
--     SQL Generator:     tedia2sql -- v1.2.13b2<br />
--     Generated at:      Sat Dec 18 19:48:32 2004<br />
--     Input Files:       TestERD.dia<br />
<br />
<br />
-- ratings_view<br />
create view ratings_view as<br />
select b.name, c.md5sum, a.rating<br />
from userImageRating a,<br />
userImageRating z,<br />
userInfo b,<br />
imageInfo c<br />
where (((a.userInfo_id = b.id)<br />
and (a.imageInfo_id = c.id)<br />
and (a.userInfo_id = z.userInfo_id))<br />
and (a.userInfo_id &lt;&gt; z.userInfo_id))<br />
order by c.md5sum,b.name,a.rating<br />
;<br />
<br />
-- whorated_view<br />
create view whorated_view as<br />
select a.name, count (*) as numRatings<br />
from userInfo a,<br />
userImageRating b<br />
where (a.id = b.userInfo_id)<br />
group by a.name<br />
;<br />
<br />
-- users_view<br />
create view users_view as<br />
select id, birthDate, name ||'&lt;'|| email ||'&gt;' as whoIsThis, currentCategory, acctBalance, active<br />
from userInfo<br />
order by userInfo.name<br />
;<br />
<br />
<br />
-- Special statements for oracle,postgres,db2:post databases<br />
-- statements to do AFTER creating<br />
-- the tables (schema)<br />
--drop trigger . . . .<br />
--create trigger . . . .<br />
<br />
<br />
-- Generated Permissions<br />
-- --------------------------------------------------------------------<br />
--     Target Database:   oracle<br />
--     SQL Generator:     tedia2sql -- v1.2.13b2<br />
--     Generated at:      Sat Dec 18 19:48:32 2004<br />
--     Input Files:       TestERD.dia<br />
<br />
grant all on imageInfo to fmorg ;<br />
grant select on imageInfo to public ;<br />
grant all on subImageInfo to fmorg ;<br />
grant all on imageCategoryList to fmorg ;<br />
grant select on categoryNames to public ;<br />
grant all on categoryNames to fmorg ;<br />
grant all on imageAttribute to fmorg ;<br />
grant all on userInfo to fmorg ;<br />
grant all on userAttribute to fmorg ;<br />
grant all on userImageRating to fmorg ;<br />
grant all on attributeCategory to fmorg ;<br />
grant all on userSession to fmorg ;<br />
grant select on extremes to public ;<br />
grant all on extremes to fmorg ;<br />
<br />
<br />
-- Generated SQL Insert statements<br />
-- --------------------------------------------------------------------<br />
--     Target Database:   oracle<br />
--     SQL Generator:     tedia2sql -- v1.2.13b2<br />
--     Generated at:      Sat Dec 18 19:48:32 2004<br />
--     Input Files:       TestERD.dia<br />
<br />
<br />
-- inserts for categoryNames<br />
insert into categoryNames values ( 'Buildings' ) ;<br />
insert into categoryNames values ( 'Landscapes' ) ;<br />
insert into categoryNames values ( 'Nudes' ) ;<br />
insert into categoryNames values ( 'Life Studies' ) ;<br />
insert into categoryNames values ( 'Portraits' ) ;<br />
insert into categoryNames values ( 'Abstracts' ) ;<br />
<br />
-- inserts for attributeCategory<br />
insert into attributeCategory values ( 1,'Blurriness' ) ;<br />
insert into attributeCategory values ( 2,'Contrastiness' ) ;<br />
insert into attributeCategory values ( 3,'Saturation' ) ;<br />
insert into attributeCategory values ( 4,'Size' ) ;<br />
insert into attributeCategory values ( 5,'Relevence' ) ;<br />
<br />
<br />
-- Generated SQL Constraints<br />
-- --------------------------------------------------------------------<br />
--     Target Database:   oracle<br />
--     SQL Generator:     tedia2sql -- v1.2.13b2<br />
--     Generated at:      Sat Dec 18 19:48:32 2004<br />
--     Input Files:       TestERD.dia<br />
<br />
create unique index idx_iimd5 on imageInfo  (md5sum) ;<br />
create index idx_iiid on imageInfo  (id) ;<br />
create index idx_siiid on subImageInfo  (imageInfo_id) ;<br />
create index idx_siips on subImageInfo  (pixSize) ;<br />
create index idx_iclidnm on imageCategoryList  (imageInfo_id,name) ;<br />
create unique index idx_uinm on userInfo  (name,md5sum) ;<br />
create index idx_uiid on userInfo  (id) ;<br />
create index idx_uauiid on userAttribute  (userInfo_id) ;<br />
create index idx_uiruid on userImageRating  (userInfo_id) ;<br />
create index idx_acid on attributeCategory  (id) ;<br />
create index idx_usmd5 on userSession  (md5sum) ;<br />
alter table subImageInfo add constraint fk_iisii<br />
foreign key (imageInfo_id)<br />
references imageInfo (id)  ;<br />
alter table imageCategoryList add constraint fk_iiicl<br />
foreign key (imageinfo_id)<br />
references imageInfo (id)  ;<br />
alter table imageAttribute add constraint fk_iiia<br />
foreign key (imageInfo_id)<br />
references imageInfo (id)  ;<br />
alter table userImageRating add constraint fk_uiuir<br />
foreign key (userInfo_id)<br />
references userInfo (id) on delete cascade ;<br />
alter table userAttribute add constraint fk_uiua<br />
foreign key (userInfo_id)<br />
references userInfo (id) on delete cascade ;<br />
alter table userSession add constraint fk_uius<br />
foreign key (userInfo_id)<br />
references userInfo (id) on delete cascade ;<br />
alter table imageAttribute add constraint fk_iaac<br />
foreign key (attributeCategory_id)<br />
references attributeCategory (id)  ;<br />
alter table userAttribute add constraint fk_acua<br />
foreign key (attributeCategory_id)<br />
references attributeCategory (id)  ;<br />
<br />
-- oracle requires a special 'quit' command<br />
quit
<img src ="http://www.blogjava.net/lucky/aggbug/240066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2008-11-12 13:14 <a href="http://www.blogjava.net/lucky/archive/2008/11/12/240066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL*PLUS命令的使用大全(转)</title><link>http://www.blogjava.net/lucky/archive/2008/11/12/240064.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Wed, 12 Nov 2008 05:12:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2008/11/12/240064.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/240064.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2008/11/12/240064.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/240064.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/240064.html</trackback:ping><description><![CDATA[<h3 class="post-title entry-title">
<a href="http://xplucky.blogspot.com/2007/10/sqlplus.html"><br />
</a>
</h3>
在中国ORACLE用户讨论组（http://www.cnoug.org）中发现了这篇文章，很不错，转过来，与大家共享，也方便自己查看。<br />
<br />
oracle的sql*plus是与oracle进行交互的客户端工具。在sql*plus中，可以运行sql*plus命令与sql*plus语句。 <br />
我们通常所说的DML、DDL、DCL语句都是sql*plus语句，它们执行完后，都可以保存在一个被称为sql
buffer的内存区域中，并且只能保存一条最近执行的sql语句，我们可以对保存在sql buffer中的sql
语句进行修改，然后再次执行，sql*plus一般都与数据库打交道。 <br />
除了sql*plus语句，在sql*plus中执行的其它语句我们称之为sql*plus命令。它们执行完后，不保存在sql buffer的内存区域中，它们一般用来对输出的结果进行格式化显示，以便于制作报表。 <br />
下面就介绍一下一些常用的sql*plus命令： <br />
<br />
1. 执行一个SQL脚本文件 <br />
SQL&gt;start file_name <br />
SQL&gt;@ file_name <br />
我们可以将多条sql语句保存在一个文本文件中，这样当要执行这个文件中的所有的sql语句时，用上面的任一命令即可，这类似于dos中的批处理。 <br />
<br />
@与@@的区别是什么？<br />
@等于start命令，用来运行一个sql脚本文件。<br />
@命令调用当前目录下的，或指定全路径，或可以通过SQLPATH环境变量搜寻到的脚本文件。该命令使用是一般要指定要执行的文件的全路径，否则从缺省路径(可用SQLPATH变量指定)下读取指定的文件。<br />
@@用在sql脚本文件中，用来说明用@@执行的sql脚本文件与@@所在的文件在同一目录下，而不用指定要执行sql脚本文件的全路径，也不是从SQLPATH环境变量指定的路径中寻找sql脚本文件，该命令一般用在脚本文件中。<br />
如：在c:\temp目录下有文件start.sql和nest_start.sql，start.sql脚本文件的内容为：<br />
@@nest_start.sql     - - 相当于@ c:\temp\nest_start.sql<br />
则我们在sql*plus中，这样执行：<br />
SQL&gt; @ c:\temp\start.sql <br />
<br />
<br />
2. 对当前的输入进行编辑 <br />
SQL&gt;edit <br />
<br />
3. 重新运行上一次运行的sql语句 <br />
SQL&gt;/ <br />
<br />
4. 将显示的内容输出到指定文件 <br />
SQL&gt; SPOOL file_name <br />
在屏幕上的所有内容都包含在该文件中，包括你输入的sql语句。 <br />
<br />
5. 关闭spool输出 <br />
SQL&gt; SPOOL OFF <br />
只有关闭spool输出，才会在输出文件中看到输出的内容。 <br />
<br />
6．显示一个表的结构 <br />
SQL&gt; desc table_name <br />
<br />
7. COL命令： <br />
主要格式化列的显示形式。 <br />
该命令有许多选项，具体如下： <br />
COL[UMN] [{ column|expr} [ option ...]] <br />
Option选项可以是如下的子句: <br />
ALI[AS] alias <br />
CLE[AR] <br />
FOLD_A[FTER] <br />
FOLD_B[EFORE] <br />
FOR[MAT] format <br />
HEA[DING] text <br />
JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]} <br />
LIKE { expr|alias} <br />
NEWL[INE] <br />
NEW_V[ALUE] variable <br />
NOPRI[NT]|PRI[NT] <br />
NUL[L] text <br />
OLD_V[ALUE] variable <br />
ON|OFF <br />
WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED] <br />
<br />
1). 改变缺省的列标题 <br />
COLUMN column_name HEADING column_heading <br />
For example: <br />
Sql&gt;select * from dept; <br />
DEPTNO DNAME                        LOC <br />
---------- ---------------------------- --------- <br />
10 ACCOUNTING                   NEW YORK <br />
sql&gt;col  LOC heading location <br />
sql&gt;select * from dept; <br />
DEPTNO DNAME                        location <br />
--------- ---------------------------- ----------- <br />
10 ACCOUNTING                   NEW YORK <br />
<br />
2). 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上： <br />
Sql&gt;select * from emp <br />
Department  name           Salary <br />
---------- ---------- ---------- <br />
10 aaa                11         <br />
SQL&gt; COLUMN ENAME HEADING &#8217;Employee|Name&#8217; <br />
Sql&gt;select * from emp <br />
Employee <br />
Department  name           Salary <br />
---------- ---------- ----------  <br />
10 aaa                11 <br />
note: the col heading turn into two lines from one line. <br />
<br />
3). 改变列的显示长度： <br />
FOR[MAT] format <br />
Sql&gt;select empno,ename,job from emp; <br />
EMPNO ENAME      JOB        <br />
---------- ----------     --------- <br />
7369 SMITH      CLERK      <br />
7499 ALLEN      SALESMAN   <br />
7521 WARD       SALESMAN   <br />
Sql&gt; col ename format a40 <br />
EMPNO ENAME                                    JOB <br />
----------   ----------------------------------------         --------- <br />
7369 SMITH                                    CLERK <br />
7499 ALLEN                                    SALESMAN <br />
7521 WARD                                    SALESMAN <br />
<br />
4). 设置列标题的对齐方式 <br />
JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]} <br />
SQL&gt; col ename justify center <br />
SQL&gt; / <br />
EMPNO           ENAME                   JOB <br />
----------   ----------------------------------------       --------- <br />
7369 SMITH                                    CLERK <br />
7499 ALLEN                                    SALESMAN <br />
7521 WARD                                     SALESMAN <br />
对于NUMBER型的列，列标题缺省在右边，其它类型的列标题缺省在左边 <br />
<br />
5). 不让一个列显示在屏幕上 <br />
NOPRI[NT]|PRI[NT] <br />
SQL&gt; col job noprint <br />
SQL&gt; / <br />
EMPNO           ENAME <br />
----------     ---------------------------------------- <br />
7369 SMITH <br />
7499 ALLEN <br />
7521 WARD <br />
<br />
6). 格式化NUMBER类型列的显示： <br />
SQL&gt; COLUMN SAL FORMAT $99,990 <br />
SQL&gt; / <br />
Employee <br />
Department Name        Salary    Commission <br />
---------- ---------- --------- ---------- <br />
30          ALLEN        $1,600    300 <br />
<br />
7). 显示列值时，如果列值为NULL值，用text值代替NULL值 <br />
COMM NUL[L] text <br />
SQL&gt;COL COMM NUL[L] text <br />
<br />
8). 设置一个列的回绕方式 <br />
WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED] <br />
COL1 <br />
-------------------- <br />
HOW ARE YOU? <br />
<br />
SQL&gt;COL COL1 FORMAT A5 <br />
SQL&gt;COL COL1 WRAPPED <br />
COL1 <br />
----- <br />
HOW A <br />
RE YO <br />
U? <br />
<br />
SQL&gt; COL COL1 WORD_WRAPPED <br />
COL1 <br />
----- <br />
HOW <br />
ARE <br />
YOU? <br />
<br />
SQL&gt; COL COL1 WORD_WRAPPED <br />
COL1 <br />
----- <br />
HOW A <br />
<br />
9). 显示列的当前的显示属性值 <br />
SQL&gt; COLUMN column_name <br />
<br />
10). 将所有列的显示属性设为缺省值 <br />
SQL&gt; CLEAR COLUMNS <br />
<br />
8. 屏蔽掉一个列中显示的相同的值 <br />
BREAK ON break_column <br />
SQL&gt; BREAK ON DEPTNO <br />
SQL&gt; Select DEPTNO, ENAME, SAL <br />
FROM EMP <br />
Where SAL &lt; 2500 <br />
orDER BY DEPTNO; <br />
DEPTNO      ENAME         SAL <br />
---------- ----------- --------- <br />
10           CLARK        2450 <br />
MILLER      1300 <br />
20            SMITH       800 <br />
ADAMS       1100 <br />
<br />
9. 在上面屏蔽掉一个列中显示的相同的值的显示中，每当列值变化时在值变化之前插入n个空行。 <br />
BREAK ON break_column SKIP n <br />
<br />
SQL&gt; BREAK ON DEPTNO SKIP 1 <br />
SQL&gt; / <br />
DEPTNO ENAME SAL <br />
---------- ----------- --------- <br />
10 CLARK 2450 <br />
MILLER 1300 <br />
<br />
20 SMITH 800 <br />
ADAMS 1100 <br />
<br />
10. 显示对BREAK的设置 <br />
SQL&gt; BREAK <br />
<br />
11. 删除6、7的设置 <br />
SQL&gt; CLEAR BREAKS <br />
<br />
12. Set 命令： <br />
该命令包含许多子命令： <br />
SET system_variable value <br />
system_variable value 可以是如下的子句之一： <br />
APPI[NFO]{ON|OFF|text} <br />
ARRAY[SIZE] {15|n} <br />
AUTO[COMMIT]{ON|OFF|IMM[EDIATE]|n} <br />
AUTOP[RINT] {ON|OFF} <br />
AUTORECOVERY [ON|OFF] <br />
AUTOT[RACE] {ON|OFF|TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]] <br />
BLO[CKTERMINATOR] {.|c} <br />
CMDS[EP] {;|c|ON|OFF} <br />
COLSEP {_|text} <br />
COM[PATIBILITY]{V7|V8|NATIVE} <br />
CON[CAT] {.|c|ON|OFF} <br />
COPYC[OMMIT] {0|n} <br />
COPYTYPECHECK {ON|OFF} <br />
DEF[INE] {&amp;|c|ON|OFF} <br />
DESCRIBE [DEPTH {1|n|ALL}][LINENUM {ON|OFF}][INDENT {ON|OFF}] <br />
ECHO {ON|OFF} <br />
EDITF[ILE] file_name[.ext] <br />
EMB[EDDED] {ON|OFF} <br />
ESC[APE] {\|c|ON|OFF} <br />
FEED[BACK] {6|n|ON|OFF} <br />
FLAGGER {OFF|ENTRY |INTERMED[IATE]|FULL} <br />
FLU[SH] {ON|OFF} <br />
HEA[DING] {ON|OFF} <br />
HEADS[EP] {||c|ON|OFF} <br />
INSTANCE [instance_path|LOCAL] <br />
LIN[ESIZE] {80|n} <br />
LOBOF[FSET] {n|1} <br />
LOGSOURCE [pathname] <br />
LONG {80|n} <br />
LONGC[HUNKSIZE] {80|n} <br />
MARK[UP] HTML [ON|OFF] [HEAD text] [BODY text] [ENTMAP {ON|OFF}] [SPOOL <br />
{ON|OFF}] [PRE[FORMAT] {ON|OFF}] <br />
NEWP[AGE] {1|n|NONE} <br />
NULL text <br />
NUMF[ORMAT] format <br />
NUM[WIDTH] {10|n} <br />
PAGES[IZE] {24|n} <br />
PAU[SE] {ON|OFF|text} <br />
RECSEP {WR[APPED]|EA[CH]|OFF} <br />
RECSEPCHAR {_|c} <br />
SERVEROUT[PUT] {ON|OFF} [SIZE n] [FOR[MAT] {WRA[PPED]|WOR[D_ <br />
WRAPPED]|TRU[NCATED]}] <br />
SHIFT[INOUT] {VIS[IBLE]|INV[ISIBLE]} <br />
SHOW[MODE] {ON|OFF} <br />
SQLBL[ANKLINES] {ON|OFF} <br />
SQLC[ASE] {MIX[ED]|LO[WER]|UP[PER]} <br />
SQLCO[NTINUE] {&gt; |text} <br />
SQLN[UMBER] {ON|OFF} <br />
SQLPRE[FIX] {#|c} <br />
SQLP[ROMPT] {SQL&gt;|text} <br />
SQLT[ERMINATOR] {;|c|ON|OFF} <br />
SUF[FIX] {SQL|text} <br />
TAB {ON|OFF} <br />
TERM[OUT] {ON|OFF} <br />
TI[ME] {ON|OFF} <br />
TIMI[NG] {ON|OFF} <br />
TRIM[OUT] {ON|OFF} <br />
TRIMS[POOL] {ON|OFF} <br />
UND[ERLINE] {-|c|ON|OFF} <br />
VER[IFY] {ON|OFF} <br />
WRA[P] {ON|OFF} <br />
<br />
1). 设置当前session是否对修改的数据进行自动提交 <br />
SQL&gt;SET AUTO[COMMIT] {ON|OFF|IMM[EDIATE]| n} <br />
<br />
2)．在用start命令执行一个sql脚本时，是否显示脚本中正在执行的SQL语句 <br />
SQL&gt; SET ECHO {ON|OFF} <br />
<br />
3).是否显示当前sql语句查询或修改的行数 <br />
SQL&gt; SET FEED[BACK] {6|n|ON|OFF} <br />
默认只有结果大于6行时才显示结果的行数。如果set feedback 1 ，则不管查询到多少行都返回。当为off 时，一律不显示查询的行数 <br />
<br />
4).是否显示列标题 <br />
SQL&gt; SET HEA[DING] {ON|OFF} <br />
当set heading off 时，在每页的上面不显示列标题，而是以空白行代替 <br />
<br />
5).设置一行可以容纳的字符数 <br />
SQL&gt; SET LIN[ESIZE] {80|n} <br />
如果一行的输出内容大于设置的一行可容纳的字符数，则折行显示。 <br />
<br />
6).设置页与页之间的分隔 <br />
SQL&gt; SET NEWP[AGE] {1|n|NONE} <br />
当set newpage 0 时，会在每页的开头有一个小的黑方框。 <br />
当set newpage n 时，会在页和页之间隔着n个空行。 <br />
当set newpage none 时，会在页和页之间没有任何间隔。 <br />
<br />
7).显示时，用text值代替NULL值 <br />
SQL&gt; SET NULL text <br />
<br />
8).设置一页有多少行数 <br />
SQL&gt; SET PAGES[IZE] {24|n} <br />
如果设为0，则所有的输出内容为一页并且不显示列标题 <br />
<br />
9).是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息。 <br />
SQL&gt; SET SERVEROUT[PUT] {ON|OFF}  <br />
在编写存储过程时，我们有时会用dbms_output.put_line将必要的信息输出，以便对存储过程进行调试，只有将serveroutput变量设为on后，信息才能显示在屏幕上。 <br />
<br />
10).当SQL语句的长度大于LINESIZE时，是否在显示时截取SQL语句。 <br />
SQL&gt; SET WRA[P] {ON|OFF} <br />
当输出的行的长度大于设置的行的长度时（用set linesize n命令设置），当set wrap on时，输出行的多于的字符会另起一行显示，否则，会将输出行的多于字符切除，不予显示。 <br />
<br />
11).是否在屏幕上显示输出的内容，主要用与SPOOL结合使用。 <br />
SQL&gt; SET TERM[OUT] {ON|OFF} <br />
在用spool命令将一个大表中的内容输出到一个文件中时，将内容输出在屏幕上会耗费大量的时间，设置set termspool off后，则输出的内容只会保存在输出文件中，不会显示在屏幕上，极大的提高了spool的速度。 <br />
<br />
12).将SPOOL输出中每行后面多余的空格去掉 <br />
SQL&gt; SET TRIMS[OUT] {ON|OFF}  <br />
<br />
13)显示每个sql语句花费的执行时间 <br />
set TIMING  {ON|OFF} <br />
<br />
14). 遇到空行时不认为语句已经结束，从后续行接着读入。<br />
SET SQLBLANKLINES ON<br />
Sql*plus中, 不允许sql语句中间有空行, 这在从其它地方拷贝脚本到sql*plus中执行时很麻烦. 比如下面的脚本:<br />
select deptno, empno, ename<br />
from emp<br />
<br />
where empno = '7788';<br />
如果拷贝到sql*plus中执行, 就会出现错误。这个命令可以解决该问题<br />
<br />
15).设置DBMS_OUTPUT的输出<br />
SET SERVEROUTPUT ON BUFFER 20000<br />
用dbms_output.put_line('strin_content');可以在存储过程中输出信息，对存储过程进行调试<br />
如果想让dbms_output.put_line('     abc');的输出显示为：<br />
SQL&gt;     abc，而不是SQL&gt;abc，则在SET SERVEROUTPUT ON后加format wrapped参数。<br />
<br />
16). 输出的数据为html格式<br />
set markup html<br />
在8.1.7版本(也许是816? 不太确定)以后, sql*plus中有一个set markup html的命令, 可以将sql*plus的输出以html格式展现.<br />
注意其中的spool on, 当在屏幕上输出的时候, 我们看不出与不加spool on有什么区别, 但是当我们使用spool filename 输出到文件的时候, 会看到spool文件中出现了等tag.<br />
<br />
<br />
14．修改sql buffer中的当前行中，第一个出现的字符串 <br />
C[HANGE] /old_value/new_value <br />
SQL&gt; l <br />
1* select * from dept <br />
SQL&gt; c/dept/emp <br />
1* select * from emp <br />
<br />
15．编辑sql buffer中的sql语句 <br />
EDI[T] <br />
<br />
16．显示sql buffer中的sql语句，list n显示sql buffer中的第n行，并使第n行成为当前行 <br />
L[IST] [n] <br />
<br />
17．在sql buffer的当前行下面加一行或多行 <br />
I[NPUT] <br />
<br />
18．将指定的文本加到sql buffer的当前行后面 <br />
A[PPEND] <br />
SQL&gt; select deptno, <br />
2  dname <br />
3  from dept; <br />
DEPTNO DNAME <br />
---------- -------------- <br />
10 ACCOUNTING <br />
20 RESEARCH <br />
30 SALES <br />
40 OPERATIONS <br />
<br />
SQL&gt; L 2 <br />
2* dname <br />
SQL&gt; a ,loc <br />
2* dname,loc <br />
SQL&gt; L <br />
1  select deptno, <br />
2  dname,loc <br />
3* from dept <br />
SQL&gt; / <br />
<br />
DEPTNO DNAME          LOC <br />
---------- -------------- ------------- <br />
10 ACCOUNTING     NEW YORK <br />
20 RESEARCH       DALLAS <br />
30 SALES          CHICAGO <br />
40 OPERATIONS     BOSTON <br />
<br />
19．将sql buffer中的sql语句保存到一个文件中 <br />
SAVE file_name <br />
<br />
20．将一个文件中的sql语句导入到sql buffer中 <br />
GET file_name <br />
<br />
21．再次执行刚才已经执行的sql语句 <br />
RUN <br />
or <br />
/ <br />
<br />
22．执行一个存储过程 <br />
EXECUTE procedure_name <br />
<br />
23．在sql*plus中连接到指定的数据库 <br />
CONNECT user_name/passwd@db_alias <br />
<br />
24．设置每个报表的顶部标题 <br />
TTITLE <br />
<br />
25．设置每个报表的尾部标题 <br />
BTITLE <br />
<br />
26．写一个注释 <br />
REMARK [text] <br />
<br />
27．将指定的信息或一个空行输出到屏幕上 <br />
PROMPT [text] <br />
<br />
28．将执行的过程暂停，等待用户响应后继续执行 <br />
PAUSE [text] <br />
<br />
Sql&gt;PAUSE Adjust paper and press RETURN to continue. <br />
<br />
29．将一个数据库中的一些数据拷贝到另外一个数据库（如将一个表的数据拷贝到另一个数据库） <br />
COPY {FROM database | TO database | FROM database TO database} <br />
{APPEND|Create|Insert|REPLACE} destination_table <br />
[(column, column, column, ...)] USING query <br />
<br />
sql&gt;COPY FROM SCOTT/TIGER@HQ TO JOHN/CHROME@WEST  <br />
create emp_temp <br />
USING Select * FROM EMP <br />
<br />
30．不退出sql*plus，在sql*plus中执行一个操作系统命令： <br />
HOST <br />
<br />
Sql&gt; host hostname <br />
该命令在windows下可能被支持。 <br />
<br />
31．在sql*plus中，切换到操作系统命令提示符下，运行操作系统命令后，可以再次切换回sql*plus： <br />
! <br />
<br />
sql&gt;! <br />
$hostname <br />
$exit <br />
sql&gt; <br />
<br />
该命令在windows下不被支持。 <br />
<br />
32．显示sql*plus命令的帮助 <br />
HELP <br />
如何安装帮助文件： <br />
Sql&gt;@ ?\sqlplus\admin\help\hlpbld.sql ?\sqlplus\admin\help\helpus.sql <br />
Sql&gt;help index <br />
<br />
33．显示sql*plus系统变量的值或sql*plus环境变量的值 <br />
Syntax <br />
SHO[W] option <br />
where option represents one of the following terms or clauses: <br />
system_variable <br />
ALL <br />
BTI[TLE] <br />
ERR[ORS] [{FUNCTION|PROCEDURE|PACKAGE|PACKAGE BODY| <br />
TRIGGER|VIEW|TYPE|TYPE BODY} [schema.]name] <br />
LNO <br />
PARAMETERS [parameter_name] <br />
PNO <br />
REL[EASE] <br />
REPF[OOTER] <br />
REPH[EADER] <br />
SGA <br />
SPOO[L] <br />
SQLCODE <br />
TTI[TLE] <br />
USER <br />
<br />
1) . 显示当前环境变量的值： <br />
Show all <br />
<br />
2) . 显示当前在创建函数、存储过程、触发器、包等对象的错误信息 <br />
Show error <br />
当创建一个函数、存储过程等出错时，变可以用该命令查看在那个地方出错及相应的出错信息，进行修改后再次进行编译。 <br />
<br />
3) . 显示初始化参数的值： <br />
show PARAMETERS [parameter_name] <br />
<br />
4) . 显示数据库的版本： <br />
show REL[EASE] <br />
<br />
5) . 显示SGA的大小 <br />
show SGA <br />
<br />
6). 显示当前的用户名 <br />
show user<br />
<br />
34.查询一个用户下的对象<br />
SQL&gt;select * from tab;<br />
SQL&gt;select * from user_objects;<br />
<br />
35.查询一个用户下的所有的表<br />
SQL&gt;select * from user_tables;<br />
<br />
36.查询一个用户下的所有的索引<br />
SQL&gt;select * from user_indexes;<br />
<br />
<br />
37. 定义一个用户变量<br />
方法有两个：<br />
a. define<br />
b. COL[UMN] [{column|expr} NEW_V[ALUE] variable [NOPRI[NT]|PRI[NT]]<br />
OLD_V[ALUE] variable  [NOPRI[NT]|PRI[NT]]<br />
<br />
下面对每种方式给予解释：<br />
a. Syntax<br />
DEF[INE] [variable]|[variable = text]<br />
定义一个用户变量并且可以分配给它一个CHAR值。<br />
<br />
assign the value MANAGER to the variable POS, type:<br />
SQL&gt; DEFINE POS = MANAGER<br />
<br />
assign the CHAR value 20 to the variable DEPTNO, type:<br />
SQL&gt; DEFINE DEPTNO = 20<br />
<br />
list the definition of DEPTNO, enter<br />
SQL&gt; DEFINE DEPTNO<br />
―――――――――――――――<br />
DEFINE DEPTNO = &#8221;20&#8221; (CHAR)<br />
<br />
定义了用户变量POS后，就可以在sql*plus中用&amp;POS或&amp;&amp;POS来引用该变量的值，sql*plus不会再提示你给变量输入值。<br />
<br />
b. COL[UMN] [{column|expr} NEW_V[ALUE] variable [NOPRI[NT]|PRI[NT]]<br />
NEW_V[ALUE] variable<br />
指定一个变量容纳查询出的列值。<br />
例:column col_name new_value var_name noprint<br />
select col_name from table_name where &#8230;&#8230;..<br />
将下面查询出的col_name列的值赋给var_name变量.<br />
<br />
一个综合的例子:<br />
得到一个列值的两次查询之差(此例为10秒之内共提交了多少事务):<br />
column redo_writes new_value commit_count<br />
<br />
select sum(stat.value) redo_writes<br />
from v$sesstat stat, v$statname sn<br />
where stat.statistic# = sn.statistic#<br />
and sn.name = 'user commits';<br />
<br />
-- 等待一会儿(此处为10秒);<br />
execute dbms_lock.sleep(10);<br />
<br />
set veri off<br />
select sum(stat.value) - &amp;commit_count commits_added<br />
from v$sesstat stat, v$statname sn<br />
where stat.statistic# = sn.statistic#<br />
and sn.name = 'user commits';<br />
<br />
<br />
38. 定义一个绑定变量<br />
VAR[IABLE] [variable [NUMBER|CHAR|CHAR (n)|NCHAR|NCHAR (n) |VARCHAR2 (n)|NVARCHAR2 (n)|CLOB|NCLOB|REFCURSOR]]<br />
定义一个绑定变量，该变量可以在pl/sql中引用。<br />
可以用print命令显示该绑定变量的信息。<br />
如：<br />
column inst_num  heading "Inst Num"  new_value inst_num  format 99999;<br />
column inst_name heading "Instance"  new_value inst_name format a12;<br />
column db_name   heading "DB Name"   new_value db_name   format a12;<br />
column dbid      heading "DB Id"     new_value dbid      format 9999999999 just c;<br />
<br />
prompt<br />
prompt Current Instance<br />
prompt ~~~~~~~~~~~~~~~~<br />
<br />
select d.dbid            dbid<br />
, d.name            db_name<br />
, i.instance_number inst_num<br />
, i.instance_name   inst_name<br />
from v$database d,<br />
v$instance i;<br />
<br />
variable dbid       number;<br />
variable inst_num   number;<br />
begin<br />
:dbid      :=  &amp;dbid;<br />
:inst_num  :=  &amp;inst_num;<br />
end;<br />
/<br />
说明：<br />
在sql*plus中，该绑定变量可以作为一个存储过程的参数，也可以在匿名PL/SQL块中直接引用。为了显示用VARIABLE命令创建的绑定变量的值，可以用print命令<br />
<br />
注意：<br />
绑定变量不同于变量：<br />
1．        定义方法不同<br />
2．        引用方法不同<br />
绑定变量：:variable_name<br />
变量：&amp;variable_name or &amp;&amp;variable_name<br />
3.在sql*plus中，可以定义同名的绑定变量与用户变量，但是引用的方法不同。<br />
<br />
39. &amp;与&amp;&amp;的区别<br />
&amp;用来创建一个临时变量，每当遇到这个临时变量时，都会提示你输入一个值。<br />
&amp;&amp;用来创建一个持久变量，就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样。当用&amp;&amp;命令引用这个变量时，不会每次遇到该变量就提示用户键入值，而只是在第一次遇到时提示一次。<br />
<br />
如，将下面三行语句存为一个脚本文件，运行该脚本文件，会提示三次，让输入deptnoval的值：<br />
select count(*) from emp where deptno = &amp;deptnoval;<br />
select count(*) from emp where deptno = &amp;deptnoval;<br />
select count(*) from emp where deptno = &amp;deptnoval;<br />
<br />
将下面三行语句存为一个脚本文件，运行该脚本文件，则只会提示一次，让输入deptnoval的值：<br />
select count(*) from emp where deptno = &amp;&amp;deptnoval;<br />
select count(*) from emp where deptno = &amp;&amp;deptnoval;<br />
select count(*) from emp where deptno = &amp;&amp;deptnoval;<br />
<br />
40．在输入sql语句的过程中临时先运行一个sql*plus命令(摘自www.itpub.com)<br />
#<br />
有没有过这样的经历? 在sql*plus中敲了很长的命令后, 突然发现想不起某个列的名字了, 如果取消当前的命令,待查询后再重敲, 那太痛苦了. 当然你可以另开一个sql*plus窗口进行查询, 但这里提供的方法更简单.<br />
<br />
比如说, 你想查工资大于4000的员工的信息, 输入了下面的语句:<br />
<br />
SQL&gt; select deptno, empno, ename<br />
2 from emp<br />
3 where<br />
这时, 你发现你想不起来工资的列名是什么了.<br />
<br />
这种情况下, 只要在下一行以#开头, 就可以执行一条sql*plus命令, 执行完后, 刚才的语句可以继续输入<br />
<br />
SQL&gt;&gt; select deptno, empno, ename<br />
2 from emp<br />
3 where<br />
6 #desc emp<br />
Name Null? Type<br />
----------------------------------------- -------- --------------<br />
EMPNO NOT NULL NUMBER(4)<br />
ENAME VARCHAR2(10)<br />
JOB VARCHAR2(9)<br />
MGR NUMBER(4)<br />
HIREDATE DATE<br />
SAL NUMBER(7,2)<br />
COMM NUMBER(7,2)<br />
DEPTNO NUMBER(2)<br />
<br />
6 sal &gt; 4000;<br />
<br />
DEPTNO EMPNO ENAME<br />
---------- ---------- ----------<br />
10 7839 KING<br />
<br />
41. SQLPlus中的快速复制和粘贴技巧(摘自www.cnoug.org)<br />
1) 鼠标移至想要复制内容的开始 <br />
2) 用右手食指按下鼠标左键 <br />
3) 向想要复制内容的另一角拖动鼠标，与Word中选取内容的方法一样 <br />
4) 内容选取完毕后（所选内容全部反显），鼠标左键按住不动，用右手中指按鼠标右键 <br />
5) 这时，所选内容会自动复制到SQL*Plus环境的最后一行
<img src ="http://www.blogjava.net/lucky/aggbug/240064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2008-11-12 13:12 <a href="http://www.blogjava.net/lucky/archive/2008/11/12/240064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>