快乐彩12选5走势图:BlogJava - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/苟有恒,何必三更起五更眠;<br/>最无益,只怕一日曝十日寒.zh-cnMon, 15 Oct 2018 08:12:29 GMTMon, 15 Oct 2018 08:12:29 GMT60Nginx 配置文件详解 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2017/12/22/432971.htmlxcpxcpFri, 22 Dec 2017 13:04:00 GMT//www.ot7t.com.cn/xcp/archive/2017/12/22/432971.html、ip_hash(访问ip):每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 #upstream favresin{ # ip_hash; # server 10.0.0.11:8080; #} &、fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。 #upstream favresin{ # server 10.0.0.10:8080; # fair; #} *、url_hash(第三方): 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 # 注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。 #upstream resinserver{ # server 10.0.0.10:7777; # shash $request_uri; # hash_method crc32; #} # #upstream还可以为每个设备设置状态值,这些状态值的含义分别如下: #down 表示单前的server暂时不参与负载. #weight 默认为1.weight越大,负载的权重就越大。 #max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream ??槎ㄒ宓拇砦? #fail_timeout : max_fails次失败后,暂停的时间。 #backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。 #upstream bakend{ #定义负载均衡设备的Ip及设备状态 # ip_hash; # server 10.0.0.11:9090 down; # server 10.0.0.11:8080 weight=2; # server 10.0.0.11:6060; # server 10.0.0.11:7070 backup; # server 10.0.0.11:5050 weight=10 max_fails=3 fail_timeout=30s; #} upstream supxx.com { server 127.0.0.1:8080 weight=1; server 127.0.0.1:9090 weight=2; fair; } #当前的Nginx的配置 server { #监听端口,nginx 会根据请求的 HOST 来决定使用哪个 SERVER 段的配置。如果没有匹配的 server_name,则默认使用配置文件中第一个。加上 default_server 则可以以指定没有匹配时的默认规则。 #listen 80; listen 80 default_server; #域名可以有多个,用空格隔开 server_name www.supxx.com www.supxx.cn; #charset koi8-r; Eccess_log logs/host.access.log main; #配置 ssl,有需要时开启。 #ssl on; #ssl_certificate /etc/nginx/ssl/server.crt; #ssl_certificate_key /etc/nginx/ssl/server.key; #服务映射 #//blog.csdn.net/heiyueya/article/details/70149270 #location的匹配种类有哪些? #格式[空格|=|~|~*|^~|!~|!~*]/uri/{}] #=开头表示精确匹配 #~开头表示区分大小写的正则匹配 #~*开头表示不区分大小写的正则匹配 #^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。 #!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则 #/通用匹配, 如果没有其它匹配,任何请求都会匹配到 # #location搜索顺序 #no优先级:(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/) <.首先匹配= >.其次匹配^~ &.再其次按照配置文件的顺序进行正则匹配、 *.最后是交给/进行通用匹配 # #注意: #当有匹配成功时,立刻停止匹配,按照当前匹配规则处理请求 #特别注意: 字符串匹配优先搜索,但是只是记录下最长的匹配 ( 如果 ^~ 是最长的匹配,则会直接命中,停止搜索正则 ),然后继续搜索正则匹配,如果有正则匹配,则命中正则匹配,如果没有正则匹配,则命中最长的字符串匹配. # # # #实际使用建议 #所以实际使用中,个人觉得至少有三个匹配规则定义,如下: #直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。 #这里是直接转发给后端应用服务器了,也可以是一个静态首页 # 第一个必选规则 #location = / { # proxy_pass //tomcat:8080/index #} # 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项 # 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用 #location ^~ /static/ { # root /webroot/static/; #} #location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { # root /webroot/res/; #} #第三个规则就是通用规则,用来转发动态请求到后端应用服务器 #非静态文件请求就默认是动态请求,自己根据实际把握 #毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了 #location / { # proxy_pass //tomcat:8080/ #} # # # # # # # # # location / { proxy_pass //supxx.com; proxy_redirect default; } #图片缓存时间设置 location ~* .*.(gif|jpg|jpeg|png|bmp|swf)$ { expires 10d; } #JS和CSS缓存时间设置 location ~* .*.(js|css)?$ { expires 1h; } *04页面配置 #error_page 404 /404.html; o00页面设置 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass //127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }

xcp 2017-12-22 21:04 发表评论
]]>
解决ajax跨域访问问题 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2016/05/06/430376.htmlxcpxcpFri, 06 May 2016 04:39:00 GMT//www.ot7t.com.cn/xcp/archive/2016/05/06/430376.html前端js:
$.ajax({
       url:'//localhost/xxxx/test', //后台处理程序
          async:true,
          type:'get',         //数据发送方式
          dataType:'jsonp',     //接受数据格式
          jsonp: "callbackparam",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的接受 的参数名(默认为callback)
    /*jsonpCallback:"jsonpCallback",*///可选项,写上表示返回函数的函数名用“ jsonpCallback”,不写 默认为jQuery自动生成的随机函数
          success:function(result){
        var eTime = new Date(); //结束时间
        
        //设置在线人数
        $("#server_count_1").html(result+"人"); 
       },
       error:function(){
        alert("服务器1连接失败");
       }
   });




后端处理类:
@Override
 public String execute() throws Exception {
  int zxrs = SessionCounter.getRealCount();
  response.setContentType("text/plain");
     response.setCharacterEncoding("utf-8");
     String callbackparam=request.getParameter("callbackparam");
     //System.out.println("callbackparam:"+callbackparam);
     PrintWriter writer=response.getWriter();
    
     //如果ajax请求写了 jsonpCallback:"jsonpCallback",
     //writer.write("jsonpCallback("+zxrs+")");
    
     //如果ajax请求没有写 jsonpCallback:"jsonpCallback",
     writer.write(callbackparam+"("+zxrs+")");//需要callbackparam参数接收随机函数名
  return null;
 }


xcp 2016-05-06 12:39 发表评论
]]>
同一服务器 应用的Session冲突 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2016/05/06/430375.htmlxcpxcpFri, 06 May 2016 04:33:00 GMT//www.ot7t.com.cn/xcp/archive/2016/05/06/430375.html使用apache反向代理解决在应用A使用Iframe嵌入应用B的功能而产生的跨域问题后,应用B的功能能正常使用了。但也产生了另外一个问题:打开应用A的任何页面都会跳转主页,问题原因是:session丢失。

具体分析:

session是通过在客户端生成一个cookie,所有请求会带上这个cookie。一个cookie的NAME、Domain和Path属性值均相同,则会覆盖,若未设置Domain域,则域为ip(不包括端口),因此应用A的session被应用B的session覆盖了。


 

经测试:tomcat、weblogic、websphere的session默认都是JSESSIONID 为key来识别的,因此在没有特别设置下,同一个域下的多个应用session会互相覆盖。 

解决办法:

设置各个应用使用不同的cookie-name,或者将JSESSIONID的path路径设置为不同。

1)WebLogic的Cookie相关配置:weblogic.xml

 

属性名

默认值
cookie-name JSESSIONID 如未设置,默认为“JSESSIONID”
cookie-path NULL 如未设置,默认为“/”
cookie-domain NULL 如未设置,默认为发放cookie的服务器的域

 

示例代码:  
1.  <session-descriptor2.  <session-param3.  <param-name>CookieName</param-name4.  <param-value>HADFCookie</param-value5.  </session-param6.  </session-descriptor>

 
延伸阅读:1.  关于WebLogic的Session丢失的问题  //blog.csdn.net/DesignLife/article/details/2552186
          2. WebLogic如何设置session超时时间  //tonyaction.blog.51cto.com/227462/201900
 
 

2)websphere的设置(设置不同JSESSIONID的path)

应用程序->企业应用程序-> [Application Server] ->
会话管理->1.覆盖会话管理(需打钩).
会话管理->2.启用 cookie(需打钩)->修改'Cookie路径' 

 

3)Tomcat的设置(设置不同JSESSIONID的path)

修改tomcat/conf/server.xml: 

 

1.tomcat5修改方法

在启动项中增加org.apache.catalina.SESSION_COOKIE_NAME参数

linux
JAVA_OPTS=’-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname‘

win
set JAVA_OPTS=”-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname“

2.tomcat6和tomcat7修改方法相同

在Context容器标签上增加sessionCookieName参数

<Context path=”/” docBase=”webapp” reloadable=”false” sessionCookieName=”yoursessionname”></Context>

还可以加上sessionCookiePath

<Context ... sessionCookiePath="/" > ... </Context>

延伸阅读:tomcat修改jsessionid在cookie中的名称 //blog.shilimin.com/338.htm



xcp 2016-05-06 12:33 发表评论
]]>
jms activemq完整实例 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2014/09/11/417837.htmlxcpxcpThu, 11 Sep 2014 05:53:00 GMT//www.ot7t.com.cn/xcp/archive/2014/09/11/417837.html

xcp 2014-09-11 13:53 发表评论
]]>
Jfinal实例-北京丰帆佳宇运输有限公司 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2014/09/07/417749.htmlxcpxcpSun, 07 Sep 2014 12:43:00 GMT//www.ot7t.com.cn/xcp/archive/2014/09/07/417749.html//www.ot7t.com.cn/xcp/comments/417749.html//www.ot7t.com.cn/xcp/archive/2014/09/07/417749.html#Feedback0//www.ot7t.com.cn/xcp/comments/commentRss/417749.html//www.ot7t.com.cn/xcp/services/trackbacks/417749.html阅读全文

xcp 2014-09-07 20:43 发表评论
]]>
2014 年中国开源优秀项目获奖-Jfinal - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2014/09/07/417748.htmlxcpxcpSun, 07 Sep 2014 12:14:00 GMT//www.ot7t.com.cn/xcp/archive/2014/09/07/417748.html//www.ot7t.com.cn/xcp/comments/417748.html//www.ot7t.com.cn/xcp/archive/2014/09/07/417748.html#Feedback1//www.ot7t.com.cn/xcp/comments/commentRss/417748.html//www.ot7t.com.cn/xcp/services/trackbacks/417748.html   开源中国开源世界"高峰论坛(简称"论坛")每年6月由中国开源软件推进联盟(COPU)主办自2006年起,已成功举办八届,是我国开源界一年一度的盛 会,影响 深远,受到国内外开源组织、人士的高度关注,是开源爱好者获取最新开源讯息的有效平台,有力地促进了开源领域国际与国内、企业与 政府、企业与社区组织之间的合作与发展,已为国内开源界对外交流合作的一个重要窗口。今年第九届论坛已于2014年6月27-28日(周五至 周六)在北京隆重召开。(//www.oschina.net/news/53265/2014-good-opensource-projects?from=20140706
     居然开源项目Jfinal排在第一位,于是下定决心研究下。JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。 在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!为您节约更多时间,去陪恋人、家人和朋友 :)
     然后花费了3天时间研究下框架,正好帮朋友做一个公司网站,感觉框架不错。附实例网站(后面的文章将贴上源代码)

  公司名称:北京丰帆佳宇运输有限公司
    公司简介:渣土消纳证办理,大型支护土方深度开挖,矿山暗挖,基坑开挖,建筑垃圾清运,渣土清运,砂石料配送,工程机械租赁业务
      公司网址:www.bjffjy.com



xcp 2014-09-07 20:14 发表评论
]]>
微博返回顶部 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2013/05/02/398682.htmlxcpxcpThu, 02 May 2013 08:49:00 GMT//www.ot7t.com.cn/xcp/archive/2013/05/02/398682.html<style>
  a.W_gotop {
   display: none;
   position: fixed;
   _position: absolute;
   width: 22px;
   height: 85px;
   line-height: 12px;
   left: 50%;
   bottom: 100px;
   margin-left: 500px;
     margin-bottom: 5px;
     background-color: #F2F2F2;
     border: 1px solid #CCCCCC;
     border-radius:2px;
     text-align: center;
     text-decoration: none;
 }
 a.W_gotop span {
   cursor: pointer;
     display: block;
     height: 73px;
     padding-top: 10px;
     border: 1px solid #FFFFFF;
     text-decoration: none;
 }
 a.W_gotop em {
     cursor: pointer;
     text-decoration: none;
     font-style: normal;
     font-weight: normal;
 }
 .icon_gotop{
    background: url(images/gotop.png) no-repeat;
 }
 .W_gotop:hover .icon_gotop {
   background: url(images/gotop_focus.png) no-repeat;
 }
 .W_ico {
  display: inline-block;
    height: 12px;
    width: 12px;
    margin-bottom: 5px;
 }
 .W_txt{
    color: #808080;
 }
</style>
<a id="base_scrollToTop" class="W_gotop" style="visibility: visible;">
<span>
 <em class="W_ico icon_gotop"></em>
 <em class="W_txt">返回顶部</em>
</span>
</a>

<script type="text/javascript">
$(function(){
 var gotop = $(".W_gotop")
 gotop.click(function(){
  $("html,body").animate({scrollTop:0},500)
 });
 
 $(window).scroll(function(){
  if($.browser.msie && ($.browser.version == "6.0") && !$.support.style){//如果IE6
   gotop.css({"top":($(window).scrollTop()+$(window).height()-100)+"px","position":"absolute"});
  }
  if($(window).scrollTop()<=50){
   gotop.fadeOut();
  }else{
   gotop.fadeIn();
  }
 });
});

xcp 2013-05-02 16:49 发表评论
]]>
oracle 反向索引 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2013/04/27/398512.htmlxcpxcpSat, 27 Apr 2013 09:05:00 GMT//www.ot7t.com.cn/xcp/archive/2013/04/27/398512.htmlcreate index I_INFO_CLASSID_REVERSE on b_info(reverse(CLASSID));
analyze table b_info compute statistics for table for all indexes;
--都使用索引
select * from b_info where classid like '1E92C5409E99484%';
--都使用索引
select * from b_info where reverse(classid) like reverse('%33B27');

xcp 2013-04-27 17:05 发表评论
]]>
IE6 list-style-type li的第一条不显示设置的列表类型 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2013/04/12/397756.htmlxcpxcpFri, 12 Apr 2013 08:25:00 GMT//www.ot7t.com.cn/xcp/archive/2013/04/12/397756.html//www.ot7t.com.cn/xcp/comments/397756.html//www.ot7t.com.cn/xcp/archive/2013/04/12/397756.html#Feedback0//www.ot7t.com.cn/xcp/comments/commentRss/397756.html//www.ot7t.com.cn/xcp/services/trackbacks/397756.html今天,在做毕业设计的时候,做到一个新闻列表的时候,被垃圾IE6样式卡住了!先上一张对比图片。

chrome-IE6效果对比

chrome-IE6效果对比

正如,图片上的说明:在IE6(没有测试IE7或更高版本)li标签的第一条“联系我们”,没有前面的:点??匆幌挛业膁emo代码啊吧~

<body>
<style type="text/css">
.news-list
{
    width
:200px;
    background
:#0f0;
}
.news-list ol
{
    padding
:10px 10px 10px 10px;
}
.news-list li
{
    height
:20px;
    list-style
:disc inside;
}
</style>
<div class="news-list">
 
    
<ol><li>联系我们</li>
        
<li>关于我们</li>
        
<li>哈哈</li>
    
</ol>
</div>
</body>

要触发这个BUG有不少“要点”??!第一 、.news-list ol{ padding:10px 10px 10px 10px;} 这条样式必须要有,更确切的说是第一个“10px”必须有,当然你可以换成其他像素值,零除外!当改成0之后这个bug就没有了~,这也就是我为什么把这个分开写,没直接写成:.news-list ol{ padding:10px ;},这样的原因。
第二点、 .news-list li{ height:20pxlist-style:disc inside;},这个里面也有一个必要的:高度。当你把这个高度去掉的时候,你会发现这个bug也会消失。

有上面这两个“苛刻”的条件,估计也就是为什么很少有人碰到的原因吧!知道了原因解决当然不是问题。从上面的两点就可以很好的解决这bug了。
方法一、当然就是准对第一个条件的,如果可以去掉padding。
方法二、当然也是在不影响布局的情况下:去掉 height
方法三、任然还是去掉:.news-list ol{ padding:10px 10px 10px 10px;} 这条样式,同时在ol标签的父标签(这里的父标签就是<div class=”news-list”>了,当然你还可以在这个中间加入一个div)中加入这条样式。这样既不会影响布局,又能很好的解决这个bug,下面是我的第三种解决方法代码:

<body>
<style type="text/css">
.news-list
{
    width
:200px;
    background
:#0f0;
    padding
:10px 10px 10px 10px;
}
.news-list li
{
    height
:20px;
    list-style
:disc inside;
}
</style>
<div class="news-list">
    
<ol><li>联系我们</li>
        
<li>关于我们</li>
        
<li>哈哈</li>
    
</ol>
</div>
</body>



xcp 2013-04-12 16:25 发表评论
]]>
暂放过去、着手现在、放眼未来 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2013/04/03/397336.htmlxcpxcpWed, 03 Apr 2013 02:31:00 GMT//www.ot7t.com.cn/xcp/archive/2013/04/03/397336.html//www.ot7t.com.cn/xcp/comments/397336.html//www.ot7t.com.cn/xcp/archive/2013/04/03/397336.html#Feedback2//www.ot7t.com.cn/xcp/comments/commentRss/397336.html//www.ot7t.com.cn/xcp/services/trackbacks/397336.html      这么多年以来,我们无休止的争论一直停留在过去的事情上。总是对过去的事情不停地进行争辩、辩驳。面对现实的问题,只是碰到什么讲什么,没有一点系统性,没有一点完整性。对于过去已经发生的事情,不管过去是对,还是错,该发生的都已经发生,并且已经给予了“定论”。对这个定论是满意、还是不满意都可以暂时放在心里、或是暂时不做考虑。当人的认识提高以后,返回来重新认识这些问题,重新思考这些问题,也许就能有比较清晰的思路,得出比较正确的、公正的评论。但现在必须要暂且有停顿的时间。因为不面对现在的事情,现在的又将会成为过去,这样循环往复,一直处于一种对过去的争论是毫无意义的,至少是对现在的发展没有什么必要性。
      着手现在的必要性是因为我们现在面对的现实是很严峻的。因此具有有能力的人、有良知的人、有正义的人,应该对现在的现象进行认真的分析与研究,并对现行的现象进行深入细致的剖析,通过这些现象看到这些现象的本质。使人们能认识到现象后的东西,能根据有理有据的分析推出未来的发展。使我们不至于面对未来还是茫然不知,措手不及。
      
面对现实的现在,我们不能采取怄气、激愤的态度。谩骂、讥讽都不能解决实际的问题。面对实际的问题我们应该有深刻的剖析,要有理性的分析。找到这些问题的实质,找到这些问题的根本。我们要寻找事物的本质,抓住本质的问题进行总结规律,使我们能认识到现在事物发展的规律,并进行传播这种认识,使得更多的人能认识到规律,并尽可能的掌握规律,以此来改变我们的生活。
      
放眼未来。不剖析现在,不总结现在发展的规律,就不能有正确的未来发展。我们不能时时处于一种盲目的状态之中。我们总是毫无准备的应付生活,总是面对生活中一切处于一种茫然的状态,一种措手不及的状态。因此,我们时时处于一种被动的地位,总是比事情逼迫的往前走,总是无奈的往前行,或是被人牵着鼻子前行。总是这样的处境,总是这样的不利,皆是因为我们没有对现在的分析,没有认识现在发展的本质规律,以至于才使得我们处于被动。因此,我们要有好的未来,就要抓住现在,要抓住现在,就要对现在进行认真的分析与总结。
     
 总之,我们应该对过去发成的事情即便心怀不满,也要尽可能能使自己有一种“胸怀”,把过去暂放起来。不要沉迷于过去,而丢失现在,使得现在变成过去,时时走不出过去,而耽误现在的认识。没有现在的深刻认识,我们必将没有好的未来。现在不进行认真的分析,最终把将来又变成现在。我们不能一直处于被动之中,要解脱这种处境。所以我们需要:暂放过去、着手现在、放眼未来!

xcp 2013-04-03 10:31 发表评论
]]>
Oracle中的动态SQL - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2013/04/02/397279.htmlxcpxcpTue, 02 Apr 2013 05:20:00 GMT//www.ot7t.com.cn/xcp/archive/2013/04/02/397279.html//www.cnblogs.com/gaolonglong/archive/2011/05/31/2064790.html
//www.ot7t.com.cn/cheneyfree/archive/2007/12/17/168272.html


记?。簊elect的时候就不需要returning 
例:
 execute immediate T_SQL into T_COUNT;


xcp 2013-04-02 13:20 发表评论
]]>
oracle查询所有用户表的表名、主键名称、索引、外键等 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2013/04/02/397265.htmlxcpxcpTue, 02 Apr 2013 01:53:00 GMT//www.ot7t.com.cn/xcp/archive/2013/04/02/397265.html//www.ot7t.com.cn/xcp/comments/397265.html//www.ot7t.com.cn/xcp/archive/2013/04/02/397265.html#Feedback0//www.ot7t.com.cn/xcp/comments/commentRss/397265.html//www.ot7t.com.cn/xcp/services/trackbacks/397265.html
select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 要查询的表 
2、查找表的主键(包括名称,构成列):
select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' and au.table_name = 要查询的表 
3、查找表的唯一性约束(包括名称,构成列): 
select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'U' and au.table_name = 要查询的表 
4、查找表的外键(包括名称,引用表的表名和对应的键名,下面是分成多步查询): 
select * from user_constraints c where c.constraint_type = 'R' and c.table_name = 要查询的表 
5、查询外键约束的列名:
select * from user_cons_columns cl where cl.constraint_name = 外键名称 
6、查询引用表的键的列名:
select * from user_cons_columns cl where cl.constraint_name = 外键引用表的键名      

实例:
7、查询没有建立主键的表 
select u.table_name, u.num_rows
  from user_tables u
 where not exists (select cu.table_name
          from user_cons_columns cu, user_constraints au
         where cu.constraint_name = au.constraint_name
           and au.constraint_type = 'P'
           and au.table_name = u.table_name)
   and u.num_rows is not null
 order by u.num_rows desc;
8、查询表记录中有空值的索引字段
-- Create table
create table TEMP_INDEX
(
  ID          VARCHAR2(32),
  TABLE_NAME  VARCHAR2(100),
  COLUMN_NAME VARCHAR2(100),
  INDEX_NAME  VARCHAR2(100),
  SCSJ        DATE
)
tablespace JG_ZFGFH
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 16
    minextents 1
    maxextents unlimited
  );
-- Add comments to the table 
comment on table TEMP_INDEX
  is '放入索引值有空的表和列';
-- Add comments to the columns 
comment on column TEMP_INDEX.ID
  is '自动生成';
comment on column TEMP_INDEX.TABLE_NAME
  is '表名';
comment on column TEMP_INDEX.COLUMN_NAME
  is '字段名称';
comment on column TEMP_INDEX.INDEX_NAME
  is '索引名称';
comment on column TEMP_INDEX.SCSJ
  is '生成时间';

create or replace procedure P_PROCESS_INDEX
/*********************************************************************************
         -----------功能:得到表索引字段中有空值字段
         -----------作者: Xcp
         -----------创建日期:2013-02-20
         -----------版本 v1.0
  ******************************************************************************
*/
 is
  cursor T_INDEX_CURSOR is
    select i.table_name, t.column_name, t.index_name
      from user_ind_columns t, user_indexes i, user_tab_cols c
     where t.index_name = i.index_name
       and t.column_name = c.column_name
       and t.table_name = i.table_name
       and c.table_name = i.table_name
     order by c.column_id;
  T_COUNT number:=0;
  T_SQL   varchar2(1000);
  T_PRE_TABLE_NAME varchar2(100);
begin
  --清空记录保存表
  delete from TEMP_INDEX;
  commit;
  
  --重新清理
  for T_INDEX in T_INDEX_CURSOR loop
     --事务控制,每个表提交一次
     if T_PRE_TABLE_NAME is null then
       T_PRE_TABLE_NAME:=T_INDEX.Table_Name;
     elsif T_PRE_TABLE_NAME<>T_INDEX.Table_Name then
       commit
     end if;
     
     --求是该索引字段是否有空
     begin
       T_SQL:='select count(1)  from '||T_INDEX.TABLE_NAME||' where '||T_INDEX.Column_Name||' is null ' ;
       --dbms_output.put_line(T_SQL);
       execute immediate T_SQL into T_COUNT;
       --dbms_output.put_line(T_COUNT) ;  
       if T_COUNT>0 then
         insert into TEMP_INDEX values(sys_guid(),T_INDEX.Table_Name,T_INDEX.COLUMN_NAME,T_INDEX.Index_Name,sysdate);
       end if;
     exception
       when others then dbms_output.put_line('NO DATA FOUND!');
     end;
  end loop;  
  
  --事务控制,最后一个表的事务
  if T_INDEX_CURSOR%NOTFOUND then
    commit;
  end if;
end P_PROCESS_INDEX;


xcp 2013-04-02 09:53 发表评论
]]>
log4j 获取动态参数 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2012/11/06/390894.htmlxcpxcpTue, 06 Nov 2012 08:34:00 GMT//www.ot7t.com.cn/xcp/archive/2012/11/06/390894.html//www.ot7t.com.cn/xcp/comments/390894.html//www.ot7t.com.cn/xcp/archive/2012/11/06/390894.html#Feedback1//www.ot7t.com.cn/xcp/comments/commentRss/390894.html//www.ot7t.com.cn/xcp/services/trackbacks/390894.html在log中必须先了解log4j自带的两个类MDC和NDC

NDC和MDC是log4j用于存储应用程序的上下文信息(context infomation),从而便于在log中使用这些上下文信息。
NDC采用了一个类似栈的机制来push存储上下文信息,每一个线程都独立地储存上下文信息。比如说一个servlet就可以针对每一个request创建对应的NDC,储存客户端地址等等信息。相关的信息使用NDC.push(message);
在log的时候将信息输出。在相应的PatternLayout中使用”%x”来输出存储的上下文信息

例如:String remoteAddr = request.getRemoteAddr();
NDC.push(remoteAddr);
在log4j.properties文件中作如下的配置即可
log4j.appender.console.layout.ConversionPattern=%-d{yyyy/MM/dd HH:mm:ss,SSS} [%X] -[%c]-[%p] %m%n


 


MDC内部使用了类似map的机制来存储信息,相对应的方法,MDC.put(key,value);在配置PatternLayout的时候使用:%x{key}来输出对应的value
例如:String remoteAddr = request.getRemoteAddr();
MDC.put("ip", remoteAddr);
在log4j.properties文件中作如下的配置即可
log4j.appender.console.layout.ConversionPattern=%-d{yyyy/MM/dd HH:mm:ss,SSS} [%X{ip}] -[%c]-[%p] %m%n

总:如果在项目中有过滤器或者模板Action,你可以把获取公共的属性方法直接定义在里面,然后在配置文件中配置获取显示



xcp 2012-11-06 16:34 发表评论
]]>
ehcache实例 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2012/08/30/386562.htmlxcpxcpThu, 30 Aug 2012 01:33:00 GMT//www.ot7t.com.cn/xcp/archive/2012/08/30/386562.html//www.ot7t.com.cn/xcp/comments/386562.html//www.ot7t.com.cn/xcp/archive/2012/08/30/386562.html#Feedback0//www.ot7t.com.cn/xcp/comments/commentRss/386562.html//www.ot7t.com.cn/xcp/services/trackbacks/386562.html01.<?xml version="1.0" encoding="UTF-8"?>  02.  03.&...  阅读全文

xcp 2012-08-30 09:33 发表评论
]]>
struts2和servlet的共存问题 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2012/08/05/384824.htmlxcpxcpSun, 05 Aug 2012 09:24:00 GMT//www.ot7t.com.cn/xcp/archive/2012/08/05/384824.html//www.ot7t.com.cn/xcp/comments/384824.html//www.ot7t.com.cn/xcp/archive/2012/08/05/384824.html#Feedback1//www.ot7t.com.cn/xcp/comments/commentRss/384824.html//www.ot7t.com.cn/xcp/services/trackbacks/384824.html先看一下struts2 的web.xml文件:
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在请求应用时,struts2将会截获所有请求,对于servlet请求将不能够正常相应,是struts2把servlet当成action了,因为servlet和action都是没有后缀的


解决方法目前有四种:

方法1:统一在servlet后面加上.servlet(包括web.xml配置文件中和页面上使用servlet的地方)

方法2:继承StrutsPrepareAndExecuteFilter,实现以下两个方法。

public void init(FilterConfig filterConfig) throws
ServletException {
      ..............................

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws
IOException, ServletException {
...............................
if(url.contain("servlet")){
((HttpServletResponse) response).sendRedirect(redirectUrl);
}

super.doFilter(request, response, chain);


}


方法3:修改拦截页面配置
原:
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>
/* </url-pattern>
</filter-mapping>

现:

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/user/*</url-pattern>
</filter-mapping>


servlet的请求路径不必改变


方法4:在struts.xml文件中修改

struts2拦截了servlet请求的解决 

……



xcp 2012-08-05 17:24 发表评论
]]>
test - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2012/07/31/384446.htmlxcpxcpTue, 31 Jul 2012 07:39:00 GMT//www.ot7t.com.cn/xcp/archive/2012/07/31/384446.html//www.ot7t.com.cn/xcp/comments/384446.html//www.ot7t.com.cn/xcp/archive/2012/07/31/384446.html#Feedback0//www.ot7t.com.cn/xcp/comments/commentRss/384446.html//www.ot7t.com.cn/xcp/services/trackbacks/384446.html一、框架的搭建

1.         框架技术(Struts2.3.4+Srping3.2+Mybatis3.2

                         i.              添加框架Struts2.3.4

Ø 清理lib

二、框架的使用



xcp 2012-07-31 15:39 发表评论
]]>
MYEclipse启动应用服务 自动进入DEBUG视图 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2012/07/30/384344.htmlxcpxcpMon, 30 Jul 2012 09:15:00 GMT//www.ot7t.com.cn/xcp/archive/2012/07/30/384344.html//www.ot7t.com.cn/xcp/comments/384344.html//www.ot7t.com.cn/xcp/archive/2012/07/30/384344.html#Feedback0//www.ot7t.com.cn/xcp/comments/commentRss/384344.html//www.ot7t.com.cn/xcp/services/trackbacks/384344.htmlwindow-> preference-> run/debug-> perspectives   open   the   associated   perspective   .... 选never,或prompt

xcp 2012-07-30 17:15 发表评论
]]>
关于log4j的日志文件保存位置解决方案 (转) - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2012/07/24/383837.htmlxcpxcpTue, 24 Jul 2012 07:06:00 GMT//www.ot7t.com.cn/xcp/archive/2012/07/24/383837.html//www.ot7t.com.cn/xcp/comments/383837.html//www.ot7t.com.cn/xcp/archive/2012/07/24/383837.html#Feedback0//www.ot7t.com.cn/xcp/comments/commentRss/383837.html//www.ot7t.com.cn/xcp/services/trackbacks/383837.html有以下设置:

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=app.log
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d %5p - %c -%-4r [%t]    - %m%n

此时生成日志文件将位于tomcat的bin目录下,如要将日志文件保存在 :根目录/web-info/logs/下,个人有以下4种解决方案:
1 绝对路径
log4j.appender.A1.File=D:\apache-tomcat-6.0.18/webapps/项目/WEB-INF/logs/app.log
但这种写法灵活性很差

以下3中使用相同的设置原理: jvm的环境变量
2:spring的Log4jConfigListener
通过以下配置:
<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>webApp.root</param-value>
  </context-param>
<context-param>
  <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
</context-param>
< listener> 
     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
...
log4j.appender.logfile.File=${webApp.root}/WEB-INF/logs/app.log
...
来解决
2:使用已有jvm变量:
例如:
    log4j.appender.logfile.File=${user.home}/logs/app.log
  日志将位于:例如windows:C:\Documents and Settings\joe\logs\app.log

3 自己设置目录,也就是在项目启动时通过System.setProperty设置
通过实现ServletContextListener来解决:例如

public class log4jlistener implements ServletContextListener {

public static final String log4jdirkey = "log4jdir";
public void contextDestroyed(ServletContextEvent servletcontextevent) {
  System.getProperties().remove(log4jdirkey);

}

public void contextInitialized(ServletContextEvent servletcontextevent) {
  String log4jdir = servletcontextevent.getServletContext().getRealPath("/");
  //System.out.println("log4jdir:"+log4jdir);
  System.setProperty(log4jdirkey, log4jdir);

}

}
web.xml配置:

<listener>
  <listener-class>com.log4j.log4jlistener</listener-class>
</listener>

log4j.prtperties 配置:
log4j.appender.A1.File=${log4jdir}/WEB-INF/logs/app1.log来解决。

参数配置:
//hi.baidu.com/zhy65991/blog/item/4af01d090e4353dc63d98635.html


xcp 2012-07-24 15:06 发表评论
]]>
Myeclipse 安装Aptana3.2 插件 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2012/07/23/383753.htmlxcpxcpMon, 23 Jul 2012 04:00:00 GMT//www.ot7t.com.cn/xcp/archive/2012/07/23/383753.html//www.ot7t.com.cn/xcp/comments/383753.html//www.ot7t.com.cn/xcp/archive/2012/07/23/383753.html#Feedback0//www.ot7t.com.cn/xcp/comments/commentRss/383753.html//www.ot7t.com.cn/xcp/services/trackbacks/383753.html

安装步骤:

1、下载aptana3.2 Eclipse Plugin插件.

下载地址://update1.aptana.org/studio/3.2/024747/index.html


2、解压出features与plugins文件夹,COPY到

D:\Program Files\MyEclipse Blue Edition\MyPlugins\aptana3.2

 

3、在D:\Program Files\MyEclipse Blue Edition\MyEclipse Blue Edition 9.0 M2\dropins在新建文件aptana.link, 内容是

path=D:\\Program Files\\MyEclipse Blue Edition\\MyPlugins\\aptana3.2  (注意斜线的方向,反了不行!Myeclipse会找不到路径?。?/p>


4、删除D:\Program Files\MyEclipse Blue Edition\MyEclipse Blue Edition 9.0 M2\configuration文件夹中org.eclipse.update文件夹

 

5、重启 Myeclipse,看到了界面

09

 

2. 配置:

配置 Code Assist,对我来说很重要,Javascript学的不咋地啊

07

 

配置 File Association,文件关联,主要有 htm,html,xml,javascript,css(这个没找到)   【貌似不支持使用Aptana Editor 来打开JSP文件】

08

 

再配置一些设置之后,重启Myeclipse,试试看,打开一个 html,呵呵,js有代码提示帮助,Enjoy it!

010



xcp 2012-07-23 12:00 发表评论
]]>
thinkpad t420i优化 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2012/07/12/382954.htmlxcpxcpThu, 12 Jul 2012 15:34:00 GMT//www.ot7t.com.cn/xcp/archive/2012/07/12/382954.html//www.ot7t.com.cn/xcp/comments/382954.html//www.ot7t.com.cn/xcp/archive/2012/07/12/382954.html#Feedback0//www.ot7t.com.cn/xcp/comments/commentRss/382954.html//www.ot7t.com.cn/xcp/services/trackbacks/382954.html阅读全文

xcp 2012-07-12 23:34 发表评论
]]>
谈谈如何通过网站域名访问weblogic中的应用 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2012/03/21/372361.htmlxcpxcpWed, 21 Mar 2012 06:02:00 GMT//www.ot7t.com.cn/xcp/archive/2012/03/21/372361.html//www.ot7t.com.cn/xcp/comments/372361.html//www.ot7t.com.cn/xcp/archive/2012/03/21/372361.html#Feedback1//www.ot7t.com.cn/xcp/comments/commentRss/372361.html//www.ot7t.com.cn/xcp/services/trackbacks/372361.html
    让我们以潍坊电子政务项目中的一个解决办法作为例子吧。首先交代一下环境:数据库用的是是oracle。Web应用是部署在weblogic上面的,其中有两个web应用是要通过域名让外界访问的,一个是外网门户网站,web应用中名字简称为WWMH。一个是内网门户网站,web应用中的名字简称为NWMH。假设这两个应用是处于同一个目录中的,他们的文件夹就是他们web应用的名称,两个域名分别是www.weifang.gov.cn和inner.weifang.gov.cn。

    我们先看看域名访问的大体过程:
    比如外部某个机器输入域名访问www.weifang.gov.cn,这个域名会被解析成为ip地址以及一些请求的主机信息,这样找到DNS服务器。再通过DNS所设的ip指向weblogic所在主机,这样就可以访问到外网的应用,具体详细的DNS原理请参见其他资料。
    外网几个关键配置如下:在这里的前提条件是你的web应用已经部署上了。首先要把mydomain->Servers->myservers中的list port端口改为80,默认的是7001。这样你通过域名访问的时候就不需要敲入端口,因为默认的就是80。然而仅仅这样还是不够的,此时如果你通过域名访问的时候,在域名后面还得跟上WWMH的文件夹路径,否则访问不到。我们现在所要设置的是context root的路径。把WWMH的文件夹去掉,取而代之的是 ”/”,这样你默认的路径就是根目录了,做法是找到weblogic.xml文件,加上<context-root>/<context-root>,重起服务,这样通过域名就可以访问了。
     如果仅仅是部署了一个应用,通过这样的配置访问当然没有问题??墒?,一个weblogic上会部署多个应用。需要通过不同的域名来访问,此时,该怎么办?比如说这里的内网,在外网已经配置好的情况下,又不忍心去改动以前配置好的成果。特别是前面的开发人员已经配置好的情况下。我们想到了weblogic自身的一个功能,那就是设置虚拟主机。它的思想就是,把内网的应用模拟成另外一个域名,通过这个域名来达到访问内网的目的。

    具体的配置如下:在weblogic的console的左边导航栏,中选择mydomain ->Services-> VirtualHosts,然后在右面点击Configure a new Virtual Host...,在Configuration的General选项卡下面,填写:Name: NWMH 。Virtual Host Names里面填上: inner.weifang.gov.cn。然后点击“apply”,然后到Target and Deploy 选项卡,选中myserver,点击“apply”,这样名称为NWMH的虚拟主机就搭建成功了。
    接下来在weblogic的console的左边导航栏,中选择mydomain ->Deployments-> Web Application Modeules,在deploy NWMH的应用时,在 Virtual Hosts下选上NWMH,点击 Deploy按钮。这样虚拟主机的配置算是完成了。但是,想要通过域名直接访问内网还是不行。后面还得跟上讨厌的路径,比如inner.weifang.gov/NWMH,然而默认的路径已经被外网给占用了,如果你在内网的配置文件里面加上<context root>/<context root>,部署肯定是不成功的,weblogic会告诉你,context root已经被占用。怎么办?其实不要慌。解决办法如下:在内网门户的配置文件上加上 <VirtualHost Name="NWMH" Targets="myserver" DefaultWebApp="NWMH" VirtualHostNames="inner.weifang.gov.cn"/>   。

    重起服务,敲入域名inner.weifang.gov.cn。一切ok!问题解决。通过这种方法,weblogic上即使再部署几个应用都是可以解决的。



以上内容仅仅是个人在做项目中的心得。并不保证其技术的完整性和绝对正确。

本文来自CSDN博客,转载请标明出处://blog.csdn.net/nighthawk/archive/2004/07/29/55575.aspx

xcp 2012-03-21 14:02 发表评论
]]>
FORALL语句、FORALL语句自动回滚 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2011/12/31/367652.htmlxcpxcpSat, 31 Dec 2011 07:46:00 GMT//www.ot7t.com.cn/xcp/archive/2011/12/31/367652.html//www.ot7t.com.cn/xcp/comments/367652.html//www.ot7t.com.cn/xcp/archive/2011/12/31/367652.html#Feedback0//www.ot7t.com.cn/xcp/comments/commentRss/367652.html//www.ot7t.com.cn/xcp/services/trackbacks/367652.html

FORALL语句

FORALL语句的一个关键性改进,它可大大简化代码,并且对于那些要在PL/SQL程序中更新很多行数据的程序来说,它可显著提高其性能。

 

1:

FORALL来增强DML的处理能力

OracleOracle8i中的PL/SQL引入了两个新的数据操纵语言(DML)语句:BULK COLLECTFORALL。这两个语句在PL/SQL内部进行一种数组处理

 

;BULK COLLECT提供对数据的高速检索,FORALL可大大改进INSERT、UPDATEDELETE操作的性能。Oracle数据库使用这些语句大大减少了

 

PL/SQLSQL语句执行引擎的环境切换次数,从而使其性能有了显著提高。

 

 

使用BULK COLLECT,你可以将多个行引入一个或多个集合中,而不是单独变量或记录中。下面这个BULK COLLECT的实例是将标题中包含

 

"PL/SQL"的所有书籍检索出来并置于记录的一个关联数组中,它们都位于通向该数据库的单一通道中。

DECLARE

   TYPE books_aat

 

      IS TABLE OF book%ROWTYPE

      INDEX BY PLS_INTEGER;

   books books_aat;

BEGIN

   SELECT *

     BULK COLLECT INTO book

     FROM books

    WHERE title LIKE '%PL/SQL%';

   ...

END;

 

 

类似地,FORALL将数据从一个PL/SQL集合传送给指定的使用集合的表。下面的代码实例给出一个过程,即接收书籍信息的一个嵌套表,并将该

 

集合(绑定数组)的全部内容插入该书籍表中。注意,这个例子还利用了Oracle9iFORALL的增强功能,可以将一条记录直接插入到表中。

 

BULK COLLECTFORALL都非常有用,它们不仅提高了性能,而且还简化了为PL/SQL中的SQL操作所编写的代码。下面的多行FORALL INSERT相当

 

清楚地说明了为什么PL/SQL被认为是Oracle数据库的最佳编程语言。

CREATE TYPE books_nt

IS TABLE OF book%ROWTYPE;

/

CREATE OR REPLACE PROCEDURE add_books (

 

books_in IN books_nt)

IS

BEGIN

FORALL book_index

    IN books_in.FIRST .. books_in.LAST

    INSERT INTO book

       VALUES books_in(book_index);

   ...

END;

 

 

不过在Oracle数据库10g之前,以FORAll方式使用集合有一个重要的限制:该数据库从IN范围子句中的第一行到最后一行,依次读取集合的内容

 

。如果在该范围内遇到一个未定义的行,Oracle数据库将引发ORA-22160异常事件:

 

 

ORA-22160: element at index [N] does not exist

 

 

对于FORALL的简单应用,这一规则不会引起任何麻烦。但是,如果想尽可能地充分利用FORALL,那么要求任意FORALL驱动数组都要依次填充可

 

能会增加程序的复杂性并降低性能。

 

Oracle数据库10g中,PL/SQL现在在FORALL语句中提供了两个新子句:INDICES OFVALUES OF,它们使你能够仔细选择驱动数组中该由扩展

 

DML语句来处理的行。

当绑定数组为稀疏数组或者包含有间隙时,INDICES OF会非常有用。该语句的语法结构为:

FORALL indx IN INDICES

 

OF sparse_collection

INSERT INTO my_table

VALUES sparse_collection (indx);

 

VALUES OF用于一种不同的情况:绑定数组可以是稀疏数组,也可以不是,但我只想使用该数组中元素的一个子集。那么我就可以使用VALUES

 

OF来指向我希望在DML操作中使用的值。该语句的语法结构为:

FORALL indx IN VALUES OF pointer_array

INSERT INTO my_table

VALUES binding_array (indx);

 

不用FOR循环而改用FORALL

假定我需要编写一个程序,对合格员工(由comp_analysis.is_eligible函数确定)加薪,编写关于不符合加薪条件的员工的报告并写入

 

employee_history表。我在一个非常大的公司工作;我们的员工非常非常多。

 

对于一位PL/SQL开发人员来说,这并不是一项十分困难的工作。我甚至不需要使用BULK COLLECTFORALL就可以完成这项工作,如清单 1所示

 

,我使用一个CURSOR FOR循环和单独的INSERTUPDATE语句。这样的代码简洁明了;不幸地是,我花了10分钟来运行此代码,我的"老式"方法

 

要运行30分钟或更长时间。

清单 1:

CREATE OR REPLACE PROCEDURE give_raises_in_department (

        dept_in IN employee.department_id%TYPE

      , newsal IN employee.salary%TYPE

     )

     IS

        CURSOR emp_cur

        IS

           SELECT employee_id, salary, hire_date

             FROM employee

            WHERE department_id = dept_in;

     BEGIN

        FOR emp_rec IN emp_cur

        LOOP

           IF comp_analysis.is_eligible (emp_rec.employee_id)

           THEN

              UPDATE employee

                 SET salary = newsal

               WHERE employee_id = emp_rec.employee_id;

           ELSE

              INSERT INTO employee_history

                          (employee_id, salary

                         , hire_date, activity

                          )

                   VALUES (emp_rec.employee_id, emp_rec.salary

                         , emp_rec.hire_date, 'RAISE DENIED'

                          );

           END IF;

        END LOOP;

     END give_raises_in_department;

 

 

好在我公司的数据库升级到了Oracle9i,而且更幸运的是,在最近的Oracle研讨会上(以及Oracle技术网站提供的非常不错的演示中)我了解

 

到了批量处理方法。所以我决定使用集合与批量处理方法重新编写程序。写好的程序如清单 2所示。

清单 2:

1 CREATE OR REPLACE PROCEDURE give_raises_in_department (

2     dept_in IN employee.department_id%TYPE

3   , newsal IN employee.salary%TYPE

4 )

5 IS

6     TYPE employee_aat IS TABLE OF employee.employee_id%TYPE

7        INDEX BY PLS_INTEGER;

8     TYPE salary_aat IS TABLE OF employee.salary%TYPE

9        INDEX BY PLS_INTEGER;

10     TYPE hire_date_aat IS TABLE OF employee.hire_date%TYPE

11        INDEX BY PLS_INTEGER;

12

13     employee_ids employee_aat;

14     salaries salary_aat;

15     hire_dates hire_date_aat;

16

17     approved_employee_ids employee_aat;

18

19     denied_employee_ids employee_aat;

20     denied_salaries salary_aat;

21     denied_hire_dates hire_date_aat;

22

23     PROCEDURE retrieve_employee_info

24     IS

25     BEGIN

26        SELECT employee_id, salary, hire_date

27        BULK COLLECT INTO employee_ids, salaries, hire_dates

28          FROM employee

29         WHERE department_id = dept_in;

30     END;

31

32     PROCEDURE partition_by_eligibility

33     IS

34     BEGIN

35        FOR indx IN employee_ids.FIRST .. employee_ids.LAST

36        LOOP

37           IF comp_analysis.is_eligible (employee_ids (indx))

38           THEN

39              approved_employee_ids (indx) := employee_ids (indx);

40           ELSE

41              denied_employee_ids (indx) := employee_ids (indx);

42              denied_salaries (indx) := salaries (indx);

43              denied_hire_dates (indx) := hire_dates (indx);

44           END IF;

45        END LOOP;

46     END;

47

48     PROCEDURE add_to_history

49     IS

50     BEGIN

51        FORALL indx IN denied_employee_ids.FIRST .. denied_employee_ids.LAST

52           INSERT INTO employee_history

53                       (employee_id

54                      , salary

55                      , hire_date, activity

56                       )

57                VALUES (denied_employee_ids (indx)

58                      , denied_salaries (indx)

59                      , denied_hire_dates (indx), 'RAISE DENIED'

60                       );

61     END;

62

63     PROCEDURE give_the_raise

64     IS

65     BEGIN

66        FORALL indx IN approved_employee_ids.FIRST .. approved_employee_ids.LAST

67           UPDATE employee

68              SET salary = newsal

69            WHERE employee_id = approved_employee_ids (indx);

70     END;

71 BEGIN

72     retrieve_employee_info;

73     partition_by_eligibility;

74     add_to_history;

75     give_the_raise;

76 END give_raises_in_department;

 

扫一眼清单1 和清单2 就会清楚地认识到:改用集合和批量处理方法将增加代码量和复杂性。但是,如果你需要大幅度提升性能,这还是值得

 

的。下面,我们不看这些代码,我们来看一看当使用FORALL时,用什么来处理CURSOR FOR循环内的条件逻辑。

 

定义集合类型与集合

 

在清单 2中,声明段的第一部分(第6行至第11行)定义了几种不同的集合类型,与我将从员工表检索出的列相对应。我更喜欢基于employee%

 

ROWTYPE来声明一个集合类型,但是FORALL还不支持对某些记录集合的操作,在这样的记录中,我将引用个别字段。所以,我还必须为员工ID、

 

薪金和雇用日期分别声明其各自的集合。

 

接下来为每一列声明所需的集合(第13行至第21行)。首先定义与所查询列相对应的集合(第13行至第15行):

 

 

employee_ids employee_aat;

salaries salary_aat;

hire_dates hire_date_aat;

 

 

然后我需要一个新的集合,用于存放已被批准加薪的员工的ID(第17行):

 

 

approved_employee_ids employee_aat;

 

 

最后,我再为每一列声明一个集合(第19行至第21行),用于记录没有加薪资格的员工:

 

 

denied_employee_ids employee_aat;

denied_salaries salary_aat;

denied_hire_dates hire_date_aat;

 

深入了解代码

 

数据结构确定后,我们现在跳过该程序的执行部分(第72行至第75行),了解如何使用这些集合来加速进程。

 

 

retrieve_employee_info;

partition_by_eligibility;

add_to_history;

give_the_raise;

 

 

我编写此程序使用了逐步细化法(也被称为"自顶向下设计")。所以执行部分不是很长,也不难理解,只有四行,按名称对过程中的每一步进

 

行了描述。首先检索员工信息(指定部门的所有员工)。然后进行划分,将要加薪和不予加薪的员工区分出来。完成之后,我就可以将那些不

 

予加薪的员工添加至员工历史表中,对其他员工进行加薪。

 

以这种方式编写代码使最终结果的可读性大大增强。因而我可以深入到该程序中对我有意义的任何部分。

 

有了已声明的集合,我现在就可以使用BULK COLLECT来检索员工信息(第23行至第30行)。这一部分有效地替代了CURSOR FOR循环。至此,数

 

据被加载到集合中。

 

划分逻辑(第32行至第46行)要求对刚刚填充的集合中的每一行进行检查,看其是否符合加薪条件。如果符合,我就将该员工ID从查询填充的

 

集合复制到符合条件的员工的集合。如果不符合,则复制该员工ID、薪金和雇用日期,因为这些都需要插入到employee_history表中。

 

初始数据现在已被分为两个集合,可以将其分别用作两个不同的FORALL语句(分别从第51行和第66行开始)的驱动器。我将不合格员工的集合

 

中的数据批量插入到employee_historyadd_to_history)表中,并通过give_the_raise过程,在employee表中批量更新合格员工的信息。

 

最后再仔细地看一看add_to_history(第48行至第61行),以此来结束对这个重新编写的程序的分析。FORALL语句(第51行)包含一个IN子句

 

,它指定了要用于批量INSERT的行号范围。在对程序进行第二次重写的说明中,我将把用于定义范围的集合称为"驱动集合"。但在

 

add_to_history的这一版本中,我简单地假定: 使用在denied_employee_ids中定义的所有行。在INSERT自身内部,关于不合格员工的三个集

 

合都会被用到;我将把这些集合称为"数据集合"??梢钥吹?,驱动集合与数据集合无需匹配。在学习Oracle数据库10g的新特性时,这是一个关

 

键点。

 

结果,清单 2 的行数大约是清单 1行数的2倍,但是清单 2 中的代码会在要求的时间内运行。在使用Oracle数据库10g之前,在这种情况下,

 

我只会对能够在这一时间内运行代码并开始下一个任务这一点感到高兴。

 

不过,有了Oracle数据库10g中最新版的PL/SQL,现在我就可以在性能、可读性和代码量方面作出更多的改进。

VALUES OF用于此过程

 

Oracle数据库10g中,可以指定FORALL语句使用的驱动集合中的行的子集??梢允褂靡韵铝街址椒ㄖ焕炊ㄒ甯米蛹?/span>

 

 

将数据集合中的行号与驱动集合中的行号进行匹配。你需要使用INDICES OF子句。

将数据集合中的行号与驱动集合中所定义行中找到的值进行匹配。这需要使用VALUES OF子句。

在对give_raises_in_department进行第二次和最后一次改写中我将使用VALUES OF子句。清单 3 包含这个版本的全部代码。我将略过这一程序

 

中与前一版本相同的部分。

 

从声明集合开始,请注意我不再另外定义集合来存放合格的和不合格的员工信息,而是在清单 3 (第17行至第21行)中声明两个"引导"集合:

 

一个用于符合加薪要求的员工,另一个用于不符合加薪要求的员工。这两个集合的数据类型都是布尔型;不久将会看到,这些集合的数据类型

 

FORALL语句毫无关系。FORALL语句只关心定义了哪些行。 在员工表中拥有50 000行信息的give_raises_in_department的三种执行方法的占

 

用时间 执行方法 用时

CURSOR FOR循环 00:00:38.01

Oracle数据库10g之前的批量处理 00:00:06.09

Oracle数据库10g的批量处理 00:00:02.06

 

在员工表中拥有100,000行数据的give_raises_in_department的三种执行方法的占用时间 执行方法 用时

CURSOR FOR循环 00:00:58.01

Oracle数据库10g之前的批量处理 00:00:12.00

Oracle数据库10g的批量处理 00:00:05.05

 

 

1:处理50,000行和100,000行数据的用时测试结果

 

retrieve_employee_info子程序与前面的相同,但是对数据进行划分的方式完全不同(第32行至第44行)。我没有将记录从一个集合复制到另

 

一个集合(这个操作相对较慢),而只是确定与员工ID集合中的行号相匹配的相应引导集合中的行(通过为其指定一个TRUE值)。

 

现在可以在两个不同FORALL语句(由第49行和第65行开始)中,将approved_listdenied_list集合用作驱动集合。

 

为了插入到employee_history表中,我使用了如下语句:

 

 

FORALL indx IN VALUES OF denied_list

 

 

为了进行更新(给员工进行加薪),我使用这一格式:

 

 

FORALL indx IN VALUES OF approved_list

 

 

在这两个DML语句中,数据集合是在BULK COLLECT 检索步骤中填充的最初的集合;没有进行过复制。利用VALUES OF,Oracle数据库在这些数据

 

集合的行中进行筛选,仅使用行号与驱动集合中行号相匹配的行

利用本程序中的VALUES OF,可以避免复制对全部记录进行复制,而是用行号的一个简单列表来替换它们。对于大型数组,进行这些复制的开销

 

是非??晒鄣?。为了测试Oracle数据库10g的优越性,我装入employee表并对50,000行和100,000行的数据运行测试。为了模拟更多的现实情况

 

,我将Oracle数据库10g之前的批量处理的执行方法作了修改以进行集合内容的多次复制。然后我使用SQL*Plus SET TIMING ON来显示运行各个

 

不同的执行方法所用的时间。表 1 给出了结果。

 

从这些时间测定得到的结论非常清楚:由单个DML语句变为批量处理将大幅缩短耗用时间,数据为50,000行时的用时由38秒减为6秒,数据为

 

100,000行时的用时由58秒减为12秒。而且,通过使用VALUES OF来避免复制数据,我可以将用时缩短一半左右。

 

即使没有性能上的改进,VALUES OF及其同类子句--INDICES OF也提高了PL/SQL语言的灵活性,使开发人员能够更轻松地编写出更直观和更容易

 

维护的代码。

 

在产品寿命这一点上,PL/SQL是一种成熟且功能强大的语言。因而,其很多新特性都是逐渐增加和改进而成的。不过,这些新特性还是使应用

 

程序的性能和开发人员的开发效率有了重大改变。VALUES OF就是这种特性的一个很好的例子。

 



xcp 2011-12-31 15:46 发表评论
]]>
使用Bulk Collect提高Oracle查询效率 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2011/12/31/367650.htmlxcpxcpSat, 31 Dec 2011 07:03:00 GMT//www.ot7t.com.cn/xcp/archive/2011/12/31/367650.html//www.ot7t.com.cn/xcp/comments/367650.html//www.ot7t.com.cn/xcp/archive/2011/12/31/367650.html#Feedback0//www.ot7t.com.cn/xcp/comments/commentRss/367650.html//www.ot7t.com.cn/xcp/services/trackbacks/367650.html
使用Bulk Collect提高Oracle查询效率
Oracle8i中首次引入了Bulk Collect特性,该特性可以让我们在PL/SQL中能使用批查询,批查询在某些情况下能显著提高查询效率。现在,我们对该特性进行一些简单的测试和分析。
一、首先,我们创建一个表,并插入100000条记录
在SQL/Plus中执行下列脚本:
drop table empl_tbl
/
create table empl_tbl(last_name varchar2(20),
first_name varchar2(10),
salary number(10))
/
begin
for i in 30000..1029999 loop
insert into empl_tbl(last_name,first_name,salary) values('carl'||(i-3000),'wu'||(1003000-i),i);
end loop;
end;
/
commit
/
select count(*) from empl_tbl;
/
二、使用三种方法计算表中某一字段含有多少个不重复值
2.1 使用常规的Distinct来实现
SQL> select count(distinct last_name) from empl_tbl;
Distinct Last Name
------------------
            1000000
Executed in 1.531 seconds
我们可以看到,常规方法需要1.531 秒查出该表中有1000000个不重复的Last_name值。
2.2 使用游标来实现
我们执行下面语句来统计Last_name字段的不重复值个数:
CREATE OR REPLACE PROCEDURE tttt IS
  all_rows number(10);
  temp_last_name empl_tbl.last_name%type;
begin
  all_rows:=0;
  temp_last_name:=' ';
  for cur in (select last_name from empl_tbl order by last_name) loop
      if cur.last_name!=temp_last_name then
       all_rows:=all_rows+1;
      end if;
      temp_last_name:=cur.last_name;
  end loop;
  dbms_output.put_line('all_rows are '||all_rows);
end;
请注意上面代码中的黑体部分使用了一个For Loop游标,为了提高程序可读性,我们没有显示定义游标变量。
执行结果:
all_rows are 1000000
PL/SQL procedure successfully completed
Executed in 10.39 seconds
游标需要10.396秒才能查出该表中有1000000个不重复的Last_name值,所耗时间是Distinct查询的10倍多。
2.3 使用Bulk Collect批查询来实现
示例代码如下:
declare
  all_rows number(10);
  --首先,定义一个Index-by表数据类型
  type last_name_tab is table of empl_tbl.last_name%type index by binary_integer;
  last_name_arr last_name_tab;
  --定义一个Index-by表集合变量
  temp_last_name empl_tbl.last_name%type;
 
begin
  all_rows:=0;
  temp_last_name:=' ';
  --使用Bulk Collect批查询来充填集合变量
  select last_name bulk collect into last_name_arr from empl_tbl;
 
  for i in 1..last_name_arr.count loop
      if temp_last_name!=last_name_arr(i) then
       all_rows:=all_rows+1;
      end if;
      temp_last_name:=last_name_arr(i);
  end loop;
 dbms_output.put_line('all_rows are '||all_rows);
end;
请注意上面代码中,我们首先定义了一个Index-by表数据类型last_name_tab,然后定义了一个该集合数据类型的变量last_name_arr,最后我们使用Bulk Collect批查询来充填last_name_arr,请注意它
的使用语法。
执行结果:
all_rows are 1000000
PL/SQL procedure successfully completed
Executed in 2.343 seconds
从上面执行结果,我们可以看到,Bulk Collect批查询只需要2.343 秒就能查出该表中有1000000个不重复的Last_name值,所耗时间只有游标查询的1/2.5。


三. 测试结果分析
为什么会出现上面的结果呢?我们可以使用Oracle的SQL_Trace来分析一下结果。在SQL命令行中,使用alter session set sql_trace=true语句打开Oracle的Trace,然后在命令行中执行上面三种查询并使用TKPROF工具生成Trace报告。
3.1 常规Distinct查询结果分析
3.2 游标查询效率分析
3.3 Bulk Collect的查询效率分析

四. 结论
通过上面的测试和分析,我们可以看到Bulk Collect批查询在某种程度上可以提高查询效率,它首先将所需数据读入内存,然后再统计分析,这样就可以提高查询效率。但是,如果Oracle数据库的内存较小,Shared Pool Size不足以保存Bulk Collect批查询结果,那么该方法需要将Bulk Collect的集合结果保存在磁盘上,在这种情况下,Bulk Collect方法的效率反而不如其他两种方法,有兴趣的读者可以进一步测试。
另外,除了Bulk Collect批查询外,我们还可以使用FORALL语句来实现批插入、删除和更新,这在大批量数据操作时可以显著提高执行效率。


xcp 2011-12-31 15:03 发表评论
]]>
oracle_常用系统表 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2011/12/31/367624.htmlxcpxcpSat, 31 Dec 2011 03:04:00 GMT//www.ot7t.com.cn/xcp/archive/2011/12/31/367624.html//www.ot7t.com.cn/xcp/comments/367624.html//www.ot7t.com.cn/xcp/archive/2011/12/31/367624.html#Feedback0//www.ot7t.com.cn/xcp/comments/commentRss/367624.html//www.ot7t.com.cn/xcp/services/trackbacks/367624.html

dba_开头.....

 

   dba_users      数据库用户信息

 

   dba_segments 表段信息

 

   dba_extents    数据区信息

 

   dba_objects    数据库对象信息

 

   dba_tablespaces   数据库表空间信息

 

   dba_data_files    数据文件设置信息

 

   dba_temp_files   临时数据文件信息

 

   dba_rollback_segs   回滚段信息

 

   dba_ts_quotas   用户表空间配额信息

 

   dba_free_space 数据库空闲空间信息

 

   dba_profiles   数据库用户资源限制信息

 

   dba_sys_privs   用户的系统权限信息

 

   dba_tab_privs 用户具有的对象权限信息

 

   dba_col_privs 用户具有的列对象权限信息

 

   dba_role_privs 用户具有的角色信息

 

   dba_audit_trail 审计跟踪记录信息

 

   dba_stmt_audit_opts 审计设置信息

 

   dba_audit_object   对象审计结果信息

 

   dba_audit_session 会话审计结果信息

 

   dba_indexes 用户模式的索引信息

 

user_开头

 

   user_objects   用户对象信息

 

   user_source   数据库用户的所有资源对象信息

 

   user_segments   用户的表段信息

 

   user_tables    用户的表对象信息

 

   user_tab_columns   用户的表列信息

 

   user_constraints   用户的对象约束信息

 

   user_sys_privs   当前用户的系统权限信息

 

   user_tab_privs   当前用户的对象权限信息

 

   user_col_privs   当前用户的表列权限信息

 

   user_role_privs   当前用户的角色权限信息

 

   user_indexes   用户的索引信息

 

   user_ind_columns 用户的索引对应的表列信息

 

   user_cons_columns   用户的约束对应的表列信息

 

   user_clusters   用户的所有簇信息

 

   user_clu_columns 用户的簇所包含的内容信息

 

   user_cluster_hash_expressions   散列簇的信息

 

v$开头

 

   v$database    数据库信息

 

   v$datafile   数据文件信息

 

   v$controlfile 控制文件信息

 

   v$logfile   重做日志信息

 

   v$instance   数据库实例信息

 

   v$log   日志组信息

 

   v$loghist 日志历史信息

 

   v$sga   数据库SGA信息

 

   v$parameter 初始化参数信息

 

   v$process   数据库服务器进程信息

 

   v$bgprocess   数据库后台进程信息

 

   v$controlfile_record_section   控制文件记载的各部分信息

 

   v$thread   线程信息

 

   v$datafile_header   数据文件头所记载的信息

 

   v$archived_log 归档日志信息

 

   v$archive_dest   归档日志的设置信息

 

   v$logmnr_contents   归档日志分析的DML DDL结果信息

 

   v$logmnr_dictionary   日志分析的字典文件信息

 

   v$logmnr_logs   日志分析的日志列表信息

 

   v$tablespace   表空间信息

 

   v$tempfile   临时文件信息

 

   v$filestat   数据文件的I/O统计信息

 

   v$undostat   Undo数据信息

 

   v$rollname   在线回滚段信息

 

   v$session   会话信息

 

   v$transaction 事务信息

 

   v$rollstat    回滚段统计信息

 

   v$pwfile_users   特权用户信息

 

   v$sqlarea     当前查询过的sql语句访问过的资源及相关的信息

 

   v$sql           v$sqlarea基本相同的相关信息

 

   v$sysstat    数据库系统状态信息

 

all_开头

 

   all_users   数据库所有用户的信息

 

   all_objects   数据库所有的对象的信息

 

   all_def_audit_opts   所有默认的审计设置信息

 

   all_tables   所有的表对象信息

 

   all_indexes 所有的数据库对象索引的信息

 

session_开头

 

   session_roles   会话的角色信息

 

   session_privs   会话的权限信息

 

index_开头

 

   index_stats   索引的设置和存储信息

 

伪表

 

   dual   系统伪列表信息



xcp 2011-12-31 11:04 发表评论
]]>
oracle 查看用户 用户权限 用户表空间 用户默认表空间[转] - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2011/12/31/367623.htmlxcpxcpSat, 31 Dec 2011 02:42:00 GMT//www.ot7t.com.cn/xcp/archive/2011/12/31/367623.html//www.ot7t.com.cn/xcp/comments/367623.html//www.ot7t.com.cn/xcp/archive/2011/12/31/367623.html#Feedback0//www.ot7t.com.cn/xcp/comments/commentRss/367623.html//www.ot7t.com.cn/xcp/services/trackbacks/367623.html
1、查看所有用户
select * from dba_users;//dba
select * from all_users;//all
select * from user_users;//当前
2、查看当前用户连接:
select * from v$Session;
3、查看当前用户权限:
select * from session_privs;
4、查看所有用户系统权限
select * from dba_sys_privs;
select * from user_sys_privs;
5、查看所有用户对象权限
select * from dab_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
6、查看所有角色
select * from dba_roles;
select * from dba_role_privs;
select * from user_role_privs;
7、查看所有表空间、临时表空间等信息
select tablespace_name,file_name,bytes file_size,autoextensible from dba_data_files;
select tablespace_name,file_name,bytes file_size,autoextensible from dba_temp_files;
8、查看用户表空间使用情况:
select 
  a.file_id "FileNo",a.tablespace_name "Tablespace_name",
  a.bytes "Bytes",a.bytes-sum(nvl(b.bytes,0)) "Used", sum(nvl(b.bytes,0)) "Free",sum(nvl(b.bytes,0))/a.bytes*100 "%free" 
from dba_data_files a,dba_free_space b 
where a.file_id=b.file_id(+
group by a.tablespace_name , a.file_id,a.bytes 
order by a.tablespace_name; 
9、查看用户所有对象
select table_name,num_rows from user_tables;
select * from all_tables;
10、询所有函数和存储过程
select * from dba_source;
select * from user_source;


xcp 2011-12-31 10:42 发表评论
]]>
oracle数据恢复 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2011/12/23/367052.htmlxcpxcpFri, 23 Dec 2011 02:33:00 GMT//www.ot7t.com.cn/xcp/archive/2011/12/23/367052.html//www.ot7t.com.cn/xcp/comments/367052.html//www.ot7t.com.cn/xcp/archive/2011/12/23/367052.html#Feedback2//www.ot7t.com.cn/xcp/comments/commentRss/367052.html//www.ot7t.com.cn/xcp/services/trackbacks/367052.html1.
表查询闪回
create table xcp as (select * from b_za_bzdzkxx);
select * from xcp;
select count(1) from xcp;--22001
select count(1) from xcp t where t.dzbh like '510521%';--7011
delete from xcp t where t.dzbh like '510521%';
select count(1) from xcp;--14990
--查找指定时间点前的数据
select count(1) from xcp as of timestamp to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss');--22001

select * from xcp for update;--添加一条记录
select count(1) from xcp;--14991

--恢复指定时间点的前delete数据(将删除恢复时间点后面的数据)

alter table xcp enable row movement;--启动的行移动功能
flashback table xcp to timestamp to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss');
select count(1) from xcp;--22001

--恢复指定时间点的前delete数据,并保留恢复时间点后面的数据

create table xcp2 as (select * from xcp t where t.createdtime>to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss'));
select * from xcp2;--临时表
alter table xcp enable row movement;--启动的行移动功能
flashback table xcp to timestamp to_timestamp('2011-12-23 10:49:30,'yyyy-MM-dd hh24:mi:ss');
select count(1) from xcp;--22001
insert into xcp select * from xcp2 --将临时表的数据再插入到源表
select count(1) from xcp;--22002


2.删除
闪回[10g+]
    删除闪回为删除oracle 10G提供了一个数据库安全机制,当用户删除一个表时,oracle 10G会将该表放到回收站中,回收站中的对象一直会保留,直到用户决定永久删除它们或出现表空间的空间不足时才会被删除?;厥照臼且桓鲂槟馊萜?,用于存储所有被删除的对象。数据字典user_tables中的列dropped表示被删除的表,查询方法如下:
select table_name,dropped from user_tables;
--设置数据库是否启用回收站
alert session set recyclebin = off;
--查询回收站对象
select * from recyclebin;
select * from user_recyclebin;
select * from dba_recyclebin;


drop table xcp;
select count(1) from xcp;--0
--恢复drop的表
flashback table xcp to before drop;
select count(1) from xcp;--22001

如果不知道原表名,可以直接使用回收站中的名称进行闪回..
flashback table "BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop;
在回收的同时可以修改表名
flashback table "
BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop rename to xcp1;

--真正删除一个表,而不进入回收站,可以在删除表时增加purge选项
drop table xcp1 purge;
--也可以从回收站永久性删除表
purge table xcp1;
--删除当前用户回收站
purge recyclebin
--删除全体用户在回收站的资源
purge dba_resyclebin



3.数据库闪口
[10g+]
    使用数据库闪回功能,可以使数据库回到过去某一状态,语法如下:
        sql: alter database flashback on;
        sql: flashback database to scn 46963;
        sql: flashback database to timestamp to_timestamp('2007-2-12 12:00:00','yyyy-MM-dd hh24:mi:ss');



注:表结构修改后不能直接恢复
//blog.csdn.net/colin_liu2009/article/details/6906548

//www.xifenfei.com/2012/06/%E5%88%A9%E7%94%A8flashback-database%E5%AE%9E%E7%8E%B0%E9%83%A8%E5%88%86%E5%AF%B9%E8%B1%A1%E5%9B%9E%E6%BB%9A.html


xcp 2011-12-23 10:33 发表评论
]]>
如何读取本地磁盘驱动器? - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2011/12/16/366548.htmlxcpxcpFri, 16 Dec 2011 09:29:00 GMT//www.ot7t.com.cn/xcp/archive/2011/12/16/366548.html 

<html>
<head>
</head>
<body>
    
<script type="text/javascript">
        
var   fso;
        
var   drvs;    
        
var   drv; 
        
var   s; 


        fso   
= new ActiveXObject("Scripting.FileSystemObject"); 
        drvs  
= new   Enumerator(fso.Drives); 
        s     
=   " ";

        
for(;!drvs.atEnd();drvs.moveNext()){ 
            drv   
=   drvs.item(); 
            s   
=   s   +   drv.DriveLetter; 
            s   
+=   "   -   "
            
if   (drv.DriveType   ==   3
                n   
=   drv.ShareName; 
            
else   if   (drv.IsReady) 
                n   
=   drv.VolumeName   +   "   totalSize:   "   +   drv.totalSize   +   "   freeSpace:   "   +   drv.freeSpace   +   "   availableSpace:   "   +   drv.availableSpace; 
            
else 
                n   
=   "[Drive   not   ready] "

            s   
+=     n   +   "\n "
        } 
        alert(s);
    
</script>
</body>
</html>

 



xcp 2011-12-16 17:29 发表评论
]]>
常用 且 生僻的html标签(to me) - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2011/12/15/366463.htmlxcpxcpThu, 15 Dec 2011 09:59:00 GMT//www.ot7t.com.cn/xcp/archive/2011/12/15/366463.html
<noscript>:不支持脚本的显示noscript里面的内容
<noframes>:不支持框架的显示noframes里面的内容
<nobr>: 不换行显示内容
<map>定义一个图片,、<area>在图片上定点显示
<fieldset>可将表单内的元素分组,配合legend标签使用[使用title]
<optgroup>:标签定义选项组[下拉列表里面分组显示]
<sub>上标   <sup>下标  <del>文字上加删除线  <ins>文字下加划线
<ol>有序列表,前面显示下标标识  <ul>无序列表,前面显示圆点标识  <li>子项
<dl>内容块  <dd>内容标题 <dt>内容
<address>显示地址信息


xcp 2011-12-15 17:59 发表评论
]]>
简单东东---关闭占用指定端口的进程 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2011/12/13/366257.htmlxcpxcpTue, 13 Dec 2011 08:50:00 GMT//www.ot7t.com.cn/xcp/archive/2011/12/13/366257.html今天.....

8080端口被其他的应用占用
第一步,命令提示符号,执行命令:netstat -ano

可见,占用8080端口的进程的PID是1476

第二步
  方法一:
    命令提示符号,执行命令:tasklist 
    xxx.exe 1476 Console 0 6,464 K
    可见,该占用8080端口的进程是xxx.exe

    通过任务管理器,终止进程xxx.exe

 方法二:
    通过任务管理器,查看菜单,选择列,把PID显示出来
    查到对应的PID:1476,终止进程xxx.exe


xcp 2011-12-13 16:50 发表评论
]]>
11个让你代码整洁的原则 - ★四川福利彩票快乐12★快乐12开奖直播★快乐12开奖★辽宁福彩快乐12★快乐彩12选5走势图//www.ot7t.com.cn/xcp/archive/2011/12/09/366001.htmlxcpxcpFri, 09 Dec 2011 14:13:00 GMT//www.ot7t.com.cn/xcp/archive/2011/12/09/366001.html//www.ot7t.com.cn/xcp/comments/366001.html//www.ot7t.com.cn/xcp/archive/2011/12/09/366001.html#Feedback0//www.ot7t.com.cn/xcp/comments/commentRss/366001.html//www.ot7t.com.cn/xcp/services/trackbacks/366001.html

写Web页面就像我们建设房子一样,地基牢固,房子才不会倒。同样的,我们制作Web页面也一样,一个良好的HTML结构是制作一个美丽的网站的开始,同样的,良好的CSS只存在同样良好的HTML中,所以一个干净的,语义的HTML的优点很多,那么平时制作中,我们做到了这一点吗?我们一起来看一张图片:

上图展示了两段代码,我想大家都只会喜欢第一种,我们先不说其语义,至少他的结构让我们看上去清爽,而第二种呢?一看就是糟糕的代码的代码,让人讨厌的代码。那么要怎么样才能写出一个好的代码,整洁的代码呢?下面我们就从以下十二个方面一起来学习,只要大家以后在写代码的时候能坚持下面的十二个原则,保准 你的代码质量能上去,而且你写的代码会人见人爱。

一、DOCTYPE的声明

如果我们想做好一件事情,首先要知道我们有哪些权利去做,就如“DOCTYPE”的声明,我们没有必要去讨论是否使用HTML4.01或者XHTML1.0或者说现在的HTML5都提供了严格版本或者过渡版本,这些都能很好的支持我们写的代码:

由于我们现在的布局不需要table布局也能做出很好的布局,那么我们就可以考虑不使用过渡型而使用严格型的“DOCTYPE”,为了向后兼容,我建议使用HTML5的声明模式:

<!DOCTYPE HTML> 		<html lang="en-US"> 	

如果想了解更多这方面的知识,可以点击:

  1. W3C: Recommended DTDs to use in your Web document
  2. Fix Your Site With the Right DOCTYPE!
  3. No more Transitional DOCTYPEs, please

二、字符集和编码字符

在每个页面的开始中,我们都在<head>中设置了字符集,我们这里都是使用“UTF-8”

<meta charset="UTF-8" /> 	

而且我们在平时写页面中时,时?;崤龅?&"这样的符号,那么我们不应该直接在页面这样写“&”:

我们应该在代码中使用字符编码来实现,比如说“&”我们在代码中应该使用“&amp;”来代替他。

如果想了解更多这方面的知识,可以点击:

  1. Wikipedia: UTF-8
  2. A tutorial on character code issues
  3. The Extended ASCII table

三、正确的代码缩进

在页面编辑中,代码的缩进有没有正确,他不会影响你网站的任何功能,但要是你没有一个规范的缩进原则,让读你代码的人是非常的生气,所以说正确的代码缩进可以增强你的代码可读性。标准程序的缩进应该是一个制表符(或几个空格),形像一点的我们来看下文章开头那张图,或者一起来看下面展示的这张图,你看后就知道以后自己的代码要怎么样书写才让人看了爽:

不用说,大家都喜欢下面的那种代码吧。这只是一个人的习惯问题,不过建议从开始做好,利人利已。有关于这方面的介绍,大家还可以参考:Clean up your Web pages with HTML TIDY

四、外链你的CSS样式和Javascript脚本

页面中写入CSS样式有很多种方法,有些直接将样式放入页面的“<head>”中,这将是一个很不好的习惯,因为这样不仅会搞乱我们的标记,而且这些样式只适合这一个HTML页面。所以我们需要将CSS单独提出,保存在外部,这样后面的页面也可以链接到这些样式,如果你页面需要修改,我们也只需要修改样式文件就可以。正如下图所示:

上面我们所说的只是样式,其实javascript脚本也和CSS样式是同一样的道理。图文并说,我最终想表达的意思是“在制作web页面中,尽量将你的CSS样式和javascript脚本单独放在一个文件中,然后通过链接的方式引用这些文件,这样做的最大好处是,方便你的样式和脚本的管理与修改。

五、正确的标签嵌套

我们在写HTML时总是需要标签的层级嵌套来帮我们完成HTML的书写,但这些HTML的嵌套是有一定的规则的,如果要细说的话,我们可能要用几个章节来描述,那么我今天这里要说的是,我们在写HTML时不应该犯以下这样的超级错误:

上图的结构我们是常见的,比如说首页的标题,那么我们就应该注意了,不能把“<h1>”放在“<a>”标签中,换句话说,就是不能么块元素和在行内元素中。上面只是一个例子,只是希望大家在平时的制作中不应该犯这样的超级错误。

六、删除不必要的标签

首先我们一起来看一个实例的截图:

上图明显是一个导航菜单的制作,在上图的实例中:有一个“div#topNav”包住了列表“ul#bigBarNavigation”,而“div”和“ul”列表都是块元素,加上“div”此处用来包“ul”根本就没有起到任何作用。虽然“div”的出现给我们制作web页面带来了极大的好处,但我们也没有必要到处这样的乱用,不知道大家平时有没有注意这样的细节呢?我是犯这样的错误,如果你也有过这样的经历,那么从今天开始,从现在开始,我们一起努力来改正这样的错误。

有关于如何正确的使用标签,大家感兴趣的话可以点击:Divitis: what it is, and how to cure it.

七、使用更好的命名

这里所说的命名就是给你的页面中相关元素定义类名或者是ID名,很多同学都有这栗的习惯,比如说有一个元素字体是红色的,给他加上“red”,甚至布局都写“left-sidebar”等,但是你有没有想过,如果这个元素定义了“red”后,过几天客户要求使用“蓝色”呢?或者又说,那时的“left-sidebar”边栏此时不想放在左边了,而是想放在右边,那么这样一来我们前面的命名可以说是一点意义都没有了,正如下面的一个图所示:

那么定义一个好的名就很得要了,不但自己能看懂你的代码,而且别人也能轻松读懂你的代码,比如说一个好的类名和ID名“mainNav”、“subNav”、“footer”等,他能描述所包含的事情。不好的呢,比如前面所说的。

如果想了解更多这方面的知识,可以点击:

  1. Standardizing CSS class and id names
  2. CSS Tip #2: Structural Naming Convention in CSS
  3. CSS coding: semantic approach in naming convention
  4. CSS Naming Conventions and Coding Style

八、离开版本的CSS

我们在设计菜单时,有时要求所有菜单选项的文本全部大写,大家平时是不是直接在HTML标签中就将他们设置成大写状态呢?如果是的话,我觉得不好,如果为了将来具有更好的扩展性,我们不应该在HTML就将他们设置为全部大写,更好的解决方法是通过CSS来实现:

九、定义<body>的类名或ID名

大家平时制作web页面时不知道有没有碰到这样的问题,就是整站下来,使用了相同的布局和结构,换句话说,你在页面的布局上使用了相同的结构,相同的类名,但是突然你的上级主管说应客户的需求,有一个页面的布局需要边栏和主内容对换一下。此时你又不想为了改变一下布局而修改整个页面的结构,此时有一个很好的解决办法,就是在你的这个页面中的“<body>”中定义一个特殊的类名或ID名,这样来你就可以轻松的达到你所要的需求。这样的使用,不知道大家使用过没有:

给“<body>”定义独特的类和ID名称是非常强大的,不仅仅是为了像上面一样帮你改变布局,最主要的是有时他能帮你实现页面中的某一部分达到特殊效果,而又不影响其它页面的效果。为什么有这样的功能,不用我说我想大家都是知道的。因为每个页面的内容都是“<body>”的后代元素。

如果想了解更多这方面的知识,可以点击:

  1. ID Your Body For Greater CSS Control and Specificity
  2. Case study: Re-using styles with a body class

十、验证你的代码

人不免会出错,我们编写代码的时候也是一样的,你有时候总会小写或多写,比如说忘了关闭你的元素标签,不记得写上元素必须的属性,虽然有一些错误不会给你带来什么灾难性的后果,但也不免会给你带来你无法意估的错误。所以建议您写完代码的时候去验证你一下你的代码。验证后的代码总是比不验证的代码强:

为一有效的验证你的代码,我们可以使用相关的工具或者浏览器的插件来帮助我们完成。如果你的代码没有任何错误,W3C验证工具会在你们面前呈现绿色的文字,这样让你是无比的激动人心,因为再次证明了你写的代码经得起W3C的标准。

如果想了解更多这方面的知识,可以点击:

  1. The W3C Markup Validation Service
  2. XHTML-CSS Validator
  3. Free Site Validator (checks entire site, not just one page)

十一、逻辑顺序

这是一个很少见的错误情况,因为我想大家写页面都不会把逻辑顺序打乱,换句话说,如果可能的话,让你的网站具有一个先后逻辑顺序是最好的,比如说先写页头,在写页体,最后写页脚。当然有时也会碰到特殊情况,如何页脚部分在于我们代码的边栏以上,这可能是因为它最适合你的网站设计需求,这样或许是可以理解的,但是如果你有别的方式实现,我们都应该把页脚是放在一个页面的最后,然后在通过特定的技术让它达到你的设计需求:

上面我们一起讨论了多个如何让你开始写一个整洁的HTML代码。从一个项目的开始,这一切都是非常容易的,但是如果需要你去修复一个现有的代码,那多少都会有一定的难度。上面说这么多主要是告诉您将要如何学习编写一个良好的、整洁的HTML代码,并且一直坚持这样的编写。希望读完这篇文章垢,在你的下一个项目中,你能从头开始,坚持写一个整洁的HTML代码。希望大家喜欢这样的教程。最后在结束此教程之前,让我们大家一起来感谢给我们带来这么好的经验之谈——《12 Principles For Keeping Your Code Clean》如果你有什么好的经验,希望与我们一起分享。



四川福利彩票快乐12 2011-12-09 22:13 发表评论
]]>