﻿<?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>IT博客-D盘</title><link>http://www.cnitblog.com/wufajiaru/</link><description>workspace</description><language>zh-cn</language><lastBuildDate>Mon, 04 May 2026 16:14:29 GMT</lastBuildDate><pubDate>Mon, 04 May 2026 16:14:29 GMT</pubDate><ttl>60</ttl><item><title>对文件名加前缀的批处理文件</title><link>http://www.cnitblog.com/wufajiaru/archive/2010/10/19/70310.html</link><dc:creator>巴西木</dc:creator><author>巴西木</author><pubDate>Tue, 19 Oct 2010 14:57:00 GMT</pubDate><guid>http://www.cnitblog.com/wufajiaru/archive/2010/10/19/70310.html</guid><wfw:comment>http://www.cnitblog.com/wufajiaru/comments/70310.html</wfw:comment><comments>http://www.cnitblog.com/wufajiaru/archive/2010/10/19/70310.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/wufajiaru/comments/commentRss/70310.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wufajiaru/services/trackbacks/70310.html</trackback:ping><description><![CDATA[<p>今天遇到一个问题，需要把一堆文件名前加上前缀，自己用rename试了几次不得其法，只有问百度了，解答很满意：<br><br><br>一。加前缀：<br>setlocal enabledelayedexpansion<br>for /f "delims=" %%i in ('dir/a-d/b/oe') do (<br>if "%%~xi"==".bat" ren "%%i" "批处理_%%i"<br>if "%%~xi"==".ini" ren "%%i" "配置文件_%%i"<br>if "%%~xi"==".rmvb" ren "%%i" "视频_%%i"<br>if "%%~xi"==".jpg" ren "%%i" "图片_%%i"<br>if "%%~xi"==".txt" ren "%%i" "文本文件_%%i"<br>ren "%%i" "其它类_%%i"<br>)<br>pause&gt;nul <br><br>二。去前缀：<br>setlocal enabledelayedexpansion<br>for /f "delims=" %%i in ('dir/a-d/b/oe') do (<br>for /f "tokens=1,2 delims=_" %%a in ('echo %%i') do (<br>ren "%%i" "%%b"<br>)<br>)<br>pause&gt;nul <br><br>参考：<a href="http://zhidao.baidu.com/question/176501338.html">http://zhidao.baidu.com/question/176501338.html</a></p>
<img src ="http://www.cnitblog.com/wufajiaru/aggbug/70310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wufajiaru/" target="_blank">巴西木</a> 2010-10-19 22:57 <a href="http://www.cnitblog.com/wufajiaru/archive/2010/10/19/70310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]嵌入式数据库选型：FireBird</title><link>http://www.cnitblog.com/wufajiaru/archive/2010/04/16/65338.html</link><dc:creator>巴西木</dc:creator><author>巴西木</author><pubDate>Fri, 16 Apr 2010 02:17:00 GMT</pubDate><guid>http://www.cnitblog.com/wufajiaru/archive/2010/04/16/65338.html</guid><wfw:comment>http://www.cnitblog.com/wufajiaru/comments/65338.html</wfw:comment><comments>http://www.cnitblog.com/wufajiaru/archive/2010/04/16/65338.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/wufajiaru/comments/commentRss/65338.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wufajiaru/services/trackbacks/65338.html</trackback:ping><description><![CDATA[做了n多年的J2EE应用以后，如何做客户端的BI确实让我一下子摸不到门路。近期的一个客户要求我们给他做基于客户端的BI分析，客户是对外提供重要数据的单位，有很多的客户每年购买他的数据。可以说人家的数据库，每行每列都是钱。在这种情况下，他们非常害怕入侵，甚至数据都不会放在网上。之前提过很多的方案，从标准的BI平台到客户端采用Web service方式连接服务器获得数据，但是最终都因为&#8220;要让数据放在网上&#8221;而被枪毙了。
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最终确定的设计是采用客户端，也就是说，将客户端的BI工具分发给客户的客户，每月再由客户通过邮件、光盘等方式将付费的数据采用加密的方式传递给数据使用单位。这些单位收到数据后，在客户端打开，客户端负责解密和展示。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BI部分我轻车熟路，由于要&#8220;分发&#8221;，所以只能选择Opne Source的，我比较看好Jasper Report，可以培训他们使用Ireport做报表，然后将做好的定义文件打包一起分发；客户端程序也不复杂，只需要修改Jasper的viewer就可以了。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 除了担心Ireport太次，容易让客户使着使着抓狂（这就是后话了，实在逼得不行，只能围绕IReport再作开发了，好在都有源码）之外，近期最让我烦恼的就是如何选性数据库。要说BI平台数据库的选型，参加革命一两年的同志就可以说出一大堆各种数据库的对比，但是那些都是大型的，反而小型的这次把我难住了。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 研究了一圈以后，获得提名的数据库是他们几个：</p>
<p>&nbsp;</p>
<ul>
    <li>access：数据类型有些另类，而且密码太容易被攻破，最大的问题在于要为此付费；
    <li>hsqldb：这是最可能成为胜利者之一的数据库，支持csv，配置分发容易，但是最终败北在性能上，当单表数据量在100万以上的时候，csv文件达到40兆，执行group by的sql语句用了300秒！这和sql执行效率无关，性能瓶颈在硬盘文件上，毕竟由于hsqldb没有在数据文件存储上花时间，只是挂个csv；
    <li>firebird：看标题就明白，这是胜利者，下面我会说说它的好处。
    <li>sybase asa：数据能加密，性能不错，但是败在&#8220;需要付费&#8221;上；
    <li>derby：它和fb有一拼，不管在性能上还是在易用性上，但是最终有两点不如fb，第一、embedded版本完全没有数据认证，导致谁都可以打开数据库执行sql语句；第二、数据库是以一个目录存储的，而fb只有一个文件；
    <li>sqllite：不支持数据加密，另外，对中文，尤其是用中文order by的时候时常错误；还有就是完全没有用户认证；不过据说执行效率不错；
    <li>mysql：要说最像样的就是这个了，但是严格说起来，虽然mysql也可以不通过安装，直接拷贝就能使用，但是距离embedded还差一块，所以不考虑了。 </li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 行了，言归正传，最后firebird胜出，很荣幸的成为这个项目的数据库。原因有这么几个：</p>
<p>&nbsp;</p>
<ol>
    <li>数据文件是单一，部署、分发相对简单；
    <li>用户不需要安装，像这个项目，只是用embedded方式，只需要把icudt30.dll、icuin30.dll、icuuc30.dll、jaybird21.dll、fbembed.dll五个文件和目录intl（里面有两个文件，是处理字符集的）放在程序启动目录就行了；
    <li>DBC配置、引用比较简单，driver就是一个jaybird-full-2.1.6.jar，看了其他的一些资料，都搞不清他的lib目录里面的其他的jar是做什么的，仔细看说明以后终于明白，原来这个full版本就是其他几个的集成，为了调用方便，人家不但提供了集成，又给你拆开了，你爱用哪个用哪个。有点像Spring的2.5兆的jar和无数个几十k的小文件的关系。
    <li>中文支持的不错，但是要在建库的时候使用GB_2312字符集；
    <li>一个叫FlameRobin的工具也不错，起初有些别扭，窗口和窗口都分着，典型的Linux风格，后来习惯了； </li>
</ol>
<p>&nbsp;</p>
<p>最后附上embedded的连接例子吧：</p>
<p>&nbsp;</p>
<div class=dp-highlighter>
<div class=bar>
<div class=tools>Java代码 <a title=复制代码 onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://s0o0e.javaeye.com/blog/251636#"><img alt=复制代码 src="http://s0o0e.javaeye.com/images/icon_copy.gif"></a></div>
</div>
<ol class=dp-j>
    <li><span><span class=keyword><strong><font color=#7f0055>long</font></strong></span><span>&nbsp;start&nbsp;=&nbsp;Calendar.getInstance().getTimeInMillis(); &nbsp;&nbsp;</span></span></li>
    <li><span>org.firebirdsql.pool.FBWrappingDataSource&nbsp;dataSource&nbsp;=&nbsp;</span><span class=keyword><strong><font color=#7f0055>new</font></strong></span><span>&nbsp;org.firebirdsql.pool.FBWrappingDataSource(); &nbsp;&nbsp;</span></span></li>
    <li><span></span><span class=comment><font color=#008200>//&nbsp;设定数据库文件 </font></span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>dataSource.setDatabase(</span><span class=string><font color=#0000ff>"TEST.FDB"</font></span><span>); &nbsp;&nbsp;</span></span></li>
    <li><span></span><span class=comment><font color=#008200>//&nbsp;可以不设 </font></span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>dataSource.setDescription(</span><span class=string><font color=#0000ff>"An&nbsp;example&nbsp;database&nbsp;of&nbsp;test"</font></span><span>); &nbsp;&nbsp;</span></span></li>
    <li><span></span><span class=comment><font color=#008200>//&nbsp;设定EMBEDDED就行了，说明上写着另外两种type是TYPE2和type4，干什么用的没研究，谁知道回一个阿 </font></span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>dataSource.setType(</span><span class=string><font color=#0000ff>"EMBEDDED"</font></span><span>); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span></span><span class=keyword><strong><font color=#7f0055>try</font></strong></span><span>&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setLoginTimeout(</span><span class=number><font color=#c00000>10</font></span><span>); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class=comment><font color=#008200>//&nbsp;这个地方是最让我痛苦的，设定了密码没用！下面会说。 </font></span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;java.sql.Connection&nbsp;c&nbsp;=&nbsp;dataSource.getConnection(</span><span class=string><font color=#0000ff>"user_1"</font></span><span>,&nbsp;</span><span class=string><font color=#0000ff>""</font></span><span>); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;java.sql.Statement&nbsp;stmt&nbsp;=&nbsp;c.createStatement(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class=comment><font color=#008200>//&nbsp;100万的大数据量 </font></span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;java.sql.ResultSet&nbsp;rs&nbsp;=&nbsp;stmt.executeQuery(</span><span class=string><font color=#0000ff>"SELECT&nbsp;count(id)&nbsp;FROM&nbsp;largedata"</font></span><span>); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class=keyword><strong><font color=#7f0055>if</font></strong></span><span>(rs.next())&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class=string><font color=#0000ff>"count:&nbsp;"</font></span><span>&nbsp;+&nbsp;rs.getString(</span><span class=number><font color=#c00000>1</font></span><span>)); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;stmt.close(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;c.close&nbsp;(); &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;</span><span class=keyword><strong><font color=#7f0055>catch</font></strong></span><span>&nbsp;(java.sql.SQLException&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class=string><font color=#0000ff>"sql&nbsp;exception:&nbsp;"</font></span><span>&nbsp;+&nbsp;e.getMessage()); &nbsp;&nbsp;</span></span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li><span>System.out.println(</span><span class=string><font color=#0000ff>"==&gt;"</font></span><span>&nbsp;+&nbsp;(Calendar.getInstance().getTimeInMillis()&nbsp;-&nbsp;start)/</span><span class=number><font color=#c00000>1000</font></span><span>); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span></span><span class=comment><font color=#008200>//&nbsp;在对id作了索引的情况下，你猜多久？1秒钟！同时做一个count和sum的group&nbsp;by，在没有索引的情况下40秒</font></span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class=java style="DISPLAY: none" name="code">long start = Calendar.getInstance().getTimeInMillis();
org.firebirdsql.pool.FBWrappingDataSource dataSource = new org.firebirdsql.pool.FBWrappingDataSource();
// 设定数据库文件
dataSource.setDatabase("TEST.FDB");
// 可以不设
dataSource.setDescription("An example database of test");
// 设定EMBEDDED就行了，说明上写着另外两种type是TYPE2和type4，干什么用的没研究，谁知道回一个阿
dataSource.setType("EMBEDDED");
try {
dataSource.setLoginTimeout(10);
// 这个地方是最让我痛苦的，设定了密码没用！下面会说。
java.sql.Connection c = dataSource.getConnection("user_1", "");
java.sql.Statement stmt = c.createStatement();
&nbsp; &nbsp; &nbsp; // 100万的大数据量
java.sql.ResultSet rs = stmt.executeQuery("SELECT count(id) FROM largedata");
if(rs.next()) {
System.out.println("count: " + rs.getString(1));
}
stmt.close();
c.close ();
} catch (java.sql.SQLException e) {
e.printStackTrace();
System.out.println("sql exception: " + e.getMessage());
}
System.out.println("==&gt;" + (Calendar.getInstance().getTimeInMillis() - start)/1000);
// 在对id作了索引的情况下，你猜多久？1秒钟！同时做一个count和sum的group by，在没有索引的情况下40秒</pre>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 补充一把：嵌入式数据库的让我最痛苦的是没有办法做安全设定，一位仁兄说得好：数据文件都给人家了，做什么也没用。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我觉得太有道理了，就拿Derby来说，完全没有安全性设定，谁都可以打开，FB呢，稍微好一点儿，不知道用户名就打不开（这是授权的事，说白了还是没认证），上面的例子，明明数据库的用户是user_1，密码123，但是不论你用什么密码，都能访问数据，但是如果你不知道用户名，就没戏了。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 算是瘸子里拔将军吧。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 后来，我还煞有介事的google了一把&#8220;firebird破解&#8221;，你猜怎么着，有高人出的高招：不知道用户名也能照样打开。怎么弄我不说了，万一让&#8220;客户的客户们&#8221;谁看到了，又要逼着换方案，这谁受得了。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不过说真的，要是谁知道embedded FB怎么保证安全，赶紧给我支两招，我都快疯了。<br><br>转自：<a href="http://s0o0e.javaeye.com/blog/251636">http://s0o0e.javaeye.com/blog/251636</a><br></p>
<img src ="http://www.cnitblog.com/wufajiaru/aggbug/65338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wufajiaru/" target="_blank">巴西木</a> 2010-04-16 10:17 <a href="http://www.cnitblog.com/wufajiaru/archive/2010/04/16/65338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>市场与销售的区别</title><link>http://www.cnitblog.com/wufajiaru/archive/2010/04/03/65016.html</link><dc:creator>巴西木</dc:creator><author>巴西木</author><pubDate>Sat, 03 Apr 2010 05:56:00 GMT</pubDate><guid>http://www.cnitblog.com/wufajiaru/archive/2010/04/03/65016.html</guid><wfw:comment>http://www.cnitblog.com/wufajiaru/comments/65016.html</wfw:comment><comments>http://www.cnitblog.com/wufajiaru/archive/2010/04/03/65016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/wufajiaru/comments/commentRss/65016.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wufajiaru/services/trackbacks/65016.html</trackback:ping><description><![CDATA[<h2 class=title_entry>市场与销售的区别</h2>
<p class=p_entry1><span>字体大小：<a title="Font Size: Large" href="javascript:setFontSize(16)"><u><font color=#0000ff>大</font></u></a> | <a title="Font Size: Medium" href="javascript:setFontSize(14)"><u><font color=#0000ff>中</font></u></a> | <a title="Font Size: Small" href="javascript:setFontSize(12)"><u><font color=#0000ff>小</font></u></a></span> 2007-11-14 14:37 - 阅读：551 - <a href="http://www.bokee.net/bloggermodule/blog_viewblog.do?id=1176894#note"><u><font color=#800080>评论</font></u></a>：0 </p>
<div class=p_entry2 id=textboxContent>
<div>1 从目标人群的数量来讲，市场是要影响所有的目标受众，人群庞大，而销售是影响几个人。因此，市场千万不要做成项目制的。</div>
<div>2 从业绩衡量来讲，市场的业绩是市场占有率，是以数字来衡量的；而销售是以销售额，即钱来衡量的。</div>
<div>3 从目的来讲，市场是通过提高产品或者服务的引起人的购买需求知名度和美誉度，从而引起人的购买需求，而不管这个人有没有购买能力；而销售的前提是目标受众有购买力。如果你是销售，有一个人告诉你，他对你的产品非常感兴趣，但是没钱，这个应该不是你的目标用户。</div>
<div>4 从手段来讲，媒体、宣传品、展会等等是市场常用的媒介和手段；而和关键人员的关系（比如，和采购部门负责人）应该是销售最重要的资源。</div>
</div>
<img src ="http://www.cnitblog.com/wufajiaru/aggbug/65016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wufajiaru/" target="_blank">巴西木</a> 2010-04-03 13:56 <a href="http://www.cnitblog.com/wufajiaru/archive/2010/04/03/65016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle DBA职责及日常工作分析</title><link>http://www.cnitblog.com/wufajiaru/archive/2010/01/29/64056.html</link><dc:creator>巴西木</dc:creator><author>巴西木</author><pubDate>Fri, 29 Jan 2010 10:17:00 GMT</pubDate><guid>http://www.cnitblog.com/wufajiaru/archive/2010/01/29/64056.html</guid><wfw:comment>http://www.cnitblog.com/wufajiaru/comments/64056.html</wfw:comment><comments>http://www.cnitblog.com/wufajiaru/archive/2010/01/29/64056.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/wufajiaru/comments/commentRss/64056.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wufajiaru/services/trackbacks/64056.html</trackback:ping><description><![CDATA[<p>DBA 职责及日常工作职责:</p>
<p>1.安装和升级数据库服务器,以及应用程序工具构建和配置网络环境.</p>
<p>2.熟悉数据库系统的存储结构预测未来的存储需求,制订数据库的存储方案.</p>
<p>3.根据开发人员设计的应用系统需求创建数据库存储结构.</p>
<p>4.根据开发人员设计的应用系统需求创建数据库对象</p>
<p>5.根据开发人员的反馈信息,在必要的时候修改数据库的结构</p>
<p>6.管理数据库的用户维护数据库的安全性</p>
<p>7.控制和监控用户对数据库的存取访问</p>
<p>8.监控和优化数据库的性能</p>
<p>9.制定数据库备份计划,灾难出现时对数据库信息进行恢复</p>
<p>10.备份和恢复数据库</p>
<p>11.联系数据库系统生产厂商,跟踪技术信息</p>
<p>12.解决客户端中间层和服务器的链接问题</p>
<p>13.保证安全连接 </p>
<p>每日工作:</p>
<p>1 确保服务器工作状态正常,各类数据库状态正常</p>
<p>2 检查硬盘空间是否够用</p>
<p>3 查看数据库日志,查看跟踪文件,检查是否有错误信息</p>
<p>4 检查备份的有效性</p>
<p>5 通过系统的性能监视器对服务器的性能参数监控发现数据库的性能是否下降,寻找原因并解决</p>
<p>6 填写dba日志</p>
<p>每周工作:</p>
<p>1 监控数据库对象的空间扩展情况</p>
<p>2 决定是否调整存储参数</p>
<p>3 对系统健康检查</p>
<p>4 检查删除没有任何意义的数据对象</p>
<p>5 检查删除没有意义的约束和触发器</p>
<p>6 对每周的备份检查处理</p>
<p>每月工作:</p>
<p>1 根据上面的检查情况,分析数据库中是否有影响性能的存储碎片存在</p>
<p>2 根据数据库性能的历史数据,决定如何优化性能</p>
<p>3 处理每日每周每月的备份</p>
<p>4 总结工作,提出下一步的管理计划</p>
<p>Oracle DBA日常工作总结</p>
<p>Oracle管理员应按如下方式对Oracle数据库系统做定期监控：</p>
<p>1、每天对Oracle数据库的运行状态、日志文件、备份情况、数据库空间使用情况、系统资源使用情况进行检查，发现并解决问题。</p>
<p>2、每周对数据库对象的空间扩展情况、数据的增长情况进行监控、对数据库做健康检查、对数据库对象的状态做检查。</p>
<p>3、每月对表和索引等进行analyze、检查表空间碎片、寻找数据库性能调整的机会、进行数据库性能调整、提出下一步空间管理计划。对Oracle数据库状态进行一次全面检查。</p>
<p>每天工作</p>
<p>1、确认所有的instance状态正常登录到所有数据库或实例，检测Oracle后台进程：#ps -ef | grep ora</p>
<p>2、检查文件系统的使用（剩余空间）。如果文件系统的剩余空间小于20%，需删除不用的文件以释放空间。#df -k</p>
<p>3、检查日志文件和trace文件记录alert和trace文件中的错误。 cd $Oracle_BASE/oradata/&lt;sid&gt;/bdumptail -f alert_&lt;sid&gt;.log </p>
<p><br>发现任何新的ORA_错误，记录并解决</p>
<p>4、检查数据库当日备份的有效性</p>
<p>对RMAN备份方式，检查第三方备份工具的备份日志以确定备份是否成功</p>
<p>对EXPORT备份方式，检查exp日志文件以确定备份是否成功</p>
<p>对其它备份方式，检查相应的日志文件</p>
<p>5、检查数据文件的状态记录状态不是&#8220;online"的数据文件，并做恢复。</p>
<p>select file_name from dba_data_files where status="OFFLINE" </p>
<p><br>6、检查表空间的使用情况<br>select a.tablespace_name,round((total-free)/total,3)*100 pecentfrom (select tablespace_name,sum(bytes) free from dba_free_space group by tablespace_name) a,(select tablespace_name,sum(bytes) total from dba_data_files group by tablespace_name) bwhere a.tablespace_name=b.tablespace_name </p>
<p><br>7、检查剩余表空间<br>select tablespace_name,sum(blocks) as free_blk,trunc(sum(bytes)/(1024*1024)) as free_m,max(bytes)/(1024) as big_chunk_k,count(*) as num_chunksfrom dba_free_space group by tablespace_name; </p>
<p><br>8、监控数据库性能</p>
<p>运行utlbstat.sql/utlestat.sql生成系统报告，或者使用statspace收集统计数据</p>
<p>9、检查数据库性能，记录数据库的CPU使用、IO、Buffer命中率等等，使用vmstat,iostat,glance,top</p>
<p>10、日常出现问题的处理</p>
<p>每周的工作</p>
<p>1、控制数据库对象的空间扩展情况，根据本周每天的检查情况找到空间扩展很快的数据库对象，并采取相应的措施。</p>
<p>删除历史数据、扩展表空间<br>alter tablespace &lt;name&gt; add datafile '&lt;file&gt;' size &lt;size&gt; </p>
<p><br>调整数据对象的存储参数　next extent pct_increase</p>
<p>2、监控数据量的增长情况</p>
<p>根据本周每天的检查情况找到记录数据数量增长很快的数据库对象，并采取相应的措施</p>
<p>删除历史数据、扩表空间</p>
<p>alter tablespace &lt;name&gt; add datafile '&lt;file&gt;' size &lt;size&gt; </p>
<p><br>3、系统健康检查</p>
<p>检查以下内容：<br>init&lt;sid&gt;.oracontrolfileredo log filearchiveingsort area sizetablespace(system,temporary,tablespace fragment)datafiles(autoextend,location)object(number of extent,next extent,index)rollback segmentlogging &amp; tracing(alert.log,max_dump_file_size,sqlnet) </p>
<p><br>4、检查无效的数据库对象</p>
<p>select owner,object_name,object_type from dba_objects where status='INVALID' </p>
<p><br>5、检查不起作用的约束</p>
<p>select owner,constraint_name,table_name,constraint_type,status from dba_constraintswhere status='DISABLED' and constraint_type='p' </p>
<p><br>6、检查无效的trigger<br>select owner,trigger_name,table_name,status from dba_triggerswhere status='DISABLED' </p>
<p><br>每月的工作</p>
<p>1、Analyze tables/indexes/cluster</p>
<p>analyze table &lt;name&gt; estimate statistics sample 50 percent;</p>
<p>2、检查表空间碎片</p>
<p>根据本月每周的检查分析数据库碎片，找到相应的解决方法</p>
<p>3、寻找数据库性能调整机会</p>
<p>比较每天对数据库性能的监控报告，确定是否有必要对数据库性能进行调整</p>
<p>4、数据库性能调整，如有必要进行性能调整</p>
<p>5、提出下一步空间管理计划，根据每周的监控，提出空间管理的改进方法</p>
<br><br>原文：<a href="http://edu.cnzz.cn/NewsInfo/23379.aspx">http://edu.cnzz.cn/NewsInfo/23379.aspx</a>
<img src ="http://www.cnitblog.com/wufajiaru/aggbug/64056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wufajiaru/" target="_blank">巴西木</a> 2010-01-29 18:17 <a href="http://www.cnitblog.com/wufajiaru/archive/2010/01/29/64056.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle系统权限的分类</title><link>http://www.cnitblog.com/wufajiaru/archive/2010/01/28/64031.html</link><dc:creator>巴西木</dc:creator><author>巴西木</author><pubDate>Thu, 28 Jan 2010 07:45:00 GMT</pubDate><guid>http://www.cnitblog.com/wufajiaru/archive/2010/01/28/64031.html</guid><wfw:comment>http://www.cnitblog.com/wufajiaru/comments/64031.html</wfw:comment><comments>http://www.cnitblog.com/wufajiaru/archive/2010/01/28/64031.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/wufajiaru/comments/commentRss/64031.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wufajiaru/services/trackbacks/64031.html</trackback:ping><description><![CDATA[群集权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>CREATE CLUSTER <br>在自己的方案中创建、更改和删除群集 <br>CREATE ANY CLUSTER <br>在任何方案中创建群集 <br>ALTER ANY CLUSTER <br>在任何方案中更改群集 <br>DROP ANY CLUSTER <br>在任何方案中删除群集 </div>
<br><br>数据库权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>ALTER DATABASE <br>运行ALTER DATABASE语句，更改数据库的配置 <br>ALTER SYSTEM <br>运行ALTER SYSTEM语句，更改系统的初始化参数 <br>AUDIT SYSTEM <br>运行AUDIT SYSTEM和NOAUDIT SYSTEM语句，审计SQL <br>AUDIT ANY <br>运行AUDIT和NOAUDIT语句，对任何方案的对象进行审计 </div>
<br><br>索引权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>CREATE ANY INDEX <br>在任何方案中创建索引 <br>注意：没有CREATE INDEX权限，CREATE TABLE权限包含了CREATE INDEX权限 <br>ALTER ANY INDEX <br>在任何方案中更改索引 <br>DROP ANY INDEX <br>任何方案中删除索引</div>
<br><br>过程权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>CREATE PROCEDURE <br>在自己的方案中创建、更改或删除过程、函数和包 <br>CREATE ANY PROCEDURE <br>在任何方案中创建过程、函数和包 <br>ALTER ANY PROCEDURE <br>在任何方案中更改过程、函数和包 <br>DROP ANY PROCEDURE <br>在任何方案中删除过程、函数或包 <br>EXECUTE ANY PROCEDURE <br>在任何方案中执行或者引用过程 </div>
<br><br>概要文件权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>CREATE PROFILE <br>创建概要文件 <br>ALTER PROFILE <br>更改概要文件 <br>DROP PROFILE <br>删除概要文件 </div>
<br><br>角色权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>CREATE ROLE <br>创建角色 <br>ALTER ANY ROLE <br>更改任何角色 <br>DROP ANY ROLE <br>删除任何角色 <br>GRANT ANY ROLE <br>向其他角色或用户授予任何角色 <br>注意：没有对应的REVOKE ANY ROLE权限 </div>
<br><br>回退段权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>CREATE ROLLBACK SEGMENT <br>创建回退段 <br>注意：没有对撤销段的权限 <br>ALTER ROLLBACK SEGMENT <br>更改回退段 <br>DROP ROLLBACK SEGMENT <br>删除回退段 </div>
<br><br><br>序列权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>CREATE SEQLENCE <br>在自己的方案中创建、更改、删除和选择序列 <br>CREATE ANY SEQUENCE <br>在任何方案中创建序列 <br>ALTER ANY SEQUENCE <br>在任何方案中更改序列 <br>DROP ANY SEQUENCE <br>在任何方案中删除序列 <br>SELECT ANY SEQUENCE <br>在任何方案中从任何序列中进行选择 </div>
<br><br>会话权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>CREATE SESSION <br>创建会话，登录进入（连接到）数据库 <br>ALTER SESSION <br>运行ALTER SESSION语句，更改会话的属性 <br>ALTER RESOURCE COST <br>更改概要文件中的计算资源消耗的方式 <br>RESTRICTED SESSION <br>在数据库处于受限会话模式下连接到数据 </div>
<br><br><br>同义词权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>CREATE SYNONYM <br>在自己的方案中创建、删除同义词 <br>CREATE ANY SYNONYM <br>在任何方案中创建专用同义词 <br>CREATE PUBLIC SYNONYM <br>创建公共同义词 <br>DROP ANY SYNONYM <br>在任何方案中删除同义词 <br>DROP PUBLIC SYNONYM <br>删除公共同义词 </div>
<br><br>表权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>CREATE TABLE <br>在自己的方案中创建、更改和删除表 <br>CREATE ANY TABLE <br>在任何方案中创建表 <br>ALTER ANY-TABLE <br>在任何方案中更改表 <br>DROP ANY TABLE <br>在任何方案中删除表 <br>COMMENT ANY TABLE <br>在任何方案中为任何表、视图或者列添加注释 <br>SELECT ANY TABLE <br>在任何方案中选择任何表中的记录 <br>INSERT ANY TABLE <br>在任何方案中向任何表插入新记录 <br>UPDATE ANY TABLE <br>在任何方案中更改任何表中的记录 <br>DELETE ANY TABLE <br>在任何方案中删除任何表中的记录 <br>LOCK ANY TABLE <br>在任何方案中锁定任何表 <br>FLASHBACK ANY TABLE <br>允许使用AS OF子句对任何方案中的表、视图执行一个SQL语句的闪回查询 </div>
<br><br>表空间权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>CREATE TABLESPACE <br>创建表空间 <br>ALTER TABLESPACE <br>更改表空间 <br>DROP TABLESPACE <br>删除表空间，包括表、索引和表空间的群集 <br>MANAGE TABLESPACE <br>管理表空间，使表空间处于ONLINE（联机）、OFFLINE（脱机）、BEGIN BACKUP（开始备份）、END BACKUP（结束备份）状态 <br>UNLIMITED TABLESPACE <br>不受配额限制地使用表空间 <br>注意：只能将UNLIMITED TABLESPACE授予账户而不能授予角色 </div>
<br><br>用户权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>CREATE USER <br>创建用户 <br>ALTER USER <br>更改用户 <br>BECOME USER <br>当执行完全装入时，成为另一个用户 <br>DROP USER <br>删除用户 </div>
<br><br>视图权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>CREATE VIEW <br>在自己的方案中创建、更改和删除视图 <br>CREATE ANY VIEW <br>在任何方案中创建视图 <br>DROP ANY VIEW <br>在任何方案中删除视图 <br>COMMENT ANY TABLE <br>在任何方案中为任何表、视图或者列添加注释 <br>FLASHBACK ANY TABLE <br>允许使用AS OF子句对任何方案中的表、视图执行一个SQL语句的闪回查询 </div>
<br><br><br>触发器权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>CREATE TRIGGER <br>在自己的方案中创建、更改和删除触发器 <br>CREATE ANY TRIGGER <br>在任何方案中创建触发器 <br>ALTER ANY TRIGGER <br>在任何方案中更改触发器 <br>DROP ANY TRIGGER <br>在任何方案中删除触发器 <br>ADMINISTER DATABASE TRIGGER <br>允许创建ON DATABASE触发器。在能够创建ON DATABASE触发器之前，还必须先拥有CREATE TRIGGER或CREATE ANY TRIGGER权限 </div>
<br><br>专用权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>SYSOPER <br>（系统操作员权限） <br>STARTUP <br>SHUTDOWN <br>ALTER DATABASE MOUNT/OPEN <br>ALTER DATABASE BACKUP CONTROLFILE <br>ALTER DATABASE BEGIN/END BACKUP <br>ALTER DATABASE ARCHIVELOG <br>RECOVER DATABASE <br>RESTRICTED SESSION <br>CREATE SPFILE/PFILE <br>SYSDBA </div>
（系统管理员权限） <br>SYSOPER的所有权限，并带有WITH ADMIN OPTION子句 <br>CREATE DATABASE <br>RECOVER DATABASE UNTIL <br><br><br>其他权限 <br>
<div class=quote_title>引用</div>
<div class=quote_div>ANALYZE ANY <br>对任何方案中的任何表、群集或者索引执行ANALYZE语句 <br>GRANT ANY OBJECT PRIVILEGE <br>授予任何方案上的任何对象上的对象权限 <br>注意：没有对应的REVOKE ANY OBJECT PRIVILEGE <br>GRANT ANY PRIVILEGE <br>授予任何系统权限 <br>注意：没有对应的REVOKE ANY PRIVILEGE <br>SELECT ANY DICTIONARY <br>允许从sys用户所拥有的数据字典表中进行选择 </div>
<br><br>原文：<a href="http://weiruan85.javaeye.com/blog/284140">http://weiruan85.javaeye.com/blog/284140</a>
<img src ="http://www.cnitblog.com/wufajiaru/aggbug/64031.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wufajiaru/" target="_blank">巴西木</a> 2010-01-28 15:45 <a href="http://www.cnitblog.com/wufajiaru/archive/2010/01/28/64031.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>