<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Oracle &#38; Lamp</title>
	<atom:link href="http://www.cuijie.net.cn/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.cuijie.net.cn</link>
	<description>Oracle Linux Apache Php Mysql</description>
	<lastBuildDate>Tue, 22 Sep 2009 08:07:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>linux shell 技巧</title>
		<link>http://www.cuijie.net.cn/?p=240</link>
		<comments>http://www.cuijie.net.cn/?p=240#comments</comments>
		<pubDate>Mon, 03 Aug 2009 06:46:01 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://www.cuijie.net.cn/?p=240</guid>
		<description><![CDATA[1.test测试命令
test命令用于检查某个条件是否成立，它可以进行数值、字符和文件三个方面的测试，
其测试符和相应的功能分别如下：
(1)数值测试：
-eq：等于则为真
-ne：不等于则为真
-gt：大于则为真
-ge：大于等于则为真
-lt：小于则为真
-le：小于等于则为真
(2)字符串测试：
=：等于则为真
!=：不相等则为真
-z 字符串：字符串长度伪则为真
-n 字符串：字符串长度不伪则为真
(3)文件测试：
-e 文件名：如果文件存在则为真
-r 文件名：如果文件存在且可读则为真
-w 文件名：如果文件存在且可写则为真
-x 文件名：如果文件存在且可执行则为真
-s 文件名：如果文件存在且至少有一个字符则为真
-d 文件名：如果文件存在且为目录则为真
-f 文件名：如果文件存在且为普通文件则为真
-c 文件名：如果文件存在且为字符型特殊文件则为真
-b 文件名：如果文件存在且为块特殊文件则为真
另外，Linux还提供了与(“！”)、或(“-o)、非(“-a”)三个逻辑操作符用于将测试条件连接起来，
其优先级为：“！”最高，“-a”次之，“-o”最低。
同时，bash也能完成简单的算术运算，格式如下：
$[expression]
例如：var1=2
var2=$[var1*10+1]
则：var2的值为21。
2.if条件语句
if [ -x /sbin/quotaon ]; then
echo &#8220;Turning on Quota for root filesystem&#8221;
/sbin/quotaon /
elif [ -x /sbin/quotaon ]; then
/usr/bin/bash
else
echo &#8220;ok&#8221;
fi
3.for 循环
#!/bin/sh
WORD=&#8221;a b c d e f g h i j l m n o p q r s t u v w x y z&#8221;
for [...]]]></description>
			<content:encoded><![CDATA[<div class="blog_content">1.test测试命令<br />
test命令用于检查某个条件是否成立，它可以进行数值、字符和文件三个方面的测试，<br />
其测试符和相应的功能分别如下：<br />
(1)数值测试：<br />
-eq：等于则为真<br />
-ne：不等于则为真<br />
-gt：大于则为真<br />
-ge：大于等于则为真<br />
-lt：小于则为真<br />
-le：小于等于则为真<br />
(2)字符串测试：<br />
=：等于则为真<br />
!=：不相等则为真<br />
-z 字符串：字符串长度伪则为真<br />
-n 字符串：字符串长度不伪则为真<br />
(3)文件测试：<br />
-e 文件名：如果文件存在则为真<br />
-r 文件名：如果文件存在且可读则为真<br />
-w 文件名：如果文件存在且可写则为真<br />
-x 文件名：如果文件存在且可执行则为真<br />
-s 文件名：如果文件存在且至少有一个字符则为真<br />
-d 文件名：如果文件存在且为目录则为真<br />
-f 文件名：如果文件存在且为普通文件则为真<br />
-c 文件名：如果文件存在且为字符型特殊文件则为真<br />
-b 文件名：如果文件存在且为块特殊文件则为真<br />
另外，Linux还提供了与(“！”)、或(“-o)、非(“-a”)三个逻辑操作符用于将测试条件连接起来，<br />
其优先级为：“！”最高，“-a”次之，“-o”最低。<br />
同时，bash也能完成简单的算术运算，格式如下：<br />
$[expression]<br />
例如：var1=2<br />
var2=$[var1*10+1]<br />
则：var2的值为21。</div>
<p>2.if条件语句<br />
if [ -x /sbin/quotaon ]; then<br />
echo &#8220;Turning on Quota for root filesystem&#8221;<br />
/sbin/quotaon /<br />
elif [ -x /sbin/quotaon ]; then<br />
/usr/bin/bash<br />
else<br />
echo &#8220;ok&#8221;<br />
fi</p>
<p>3.for 循环<br />
#!/bin/sh<br />
WORD=&#8221;a b c d e f g h i j l m n o p q r s t u v w x y z&#8221;<br />
for i in $WORD ; do<br />
echo $i<br />
done</p>
<p>#!/bin/sh<br />
FILES=`ls /txt/*.txt`<br />
for txt in $FILES ; do<br />
doc=`echo $txt | sed &#8220;s/.txt/.doc/&#8221;`<br />
mv $txt $doc<br />
done</p>
<p>4.while和until 循环<br />
#!/bin/sh<br />
while [ -f /var/run/ppp0.pid ] ; do<br />
killall pppd<br />
done</p>
<p>#!/bin/sh<br />
until [ -f /var/run/ppp0.pid ] ; do<br />
sleep 1<br />
done</p>
<p><span class="hilite1"><span style="background-color: #ffff00;">Shell</span></span>还提供了true和false两条命令用于建立无限循环结构的需要，<br />
它们的返回状态分别是总为0或总为非0</p>
<p>5.case 条件选择<br />
#!/bin/sh<br />
case $1 in<br />
start | begin)<br />
echo &#8220;start something&#8221;<br />
;;<br />
stop | end)<br />
echo &#8220;stop something&#8221;<br />
;;<br />
*)<br />
echo &#8220;Ignorant&#8221;<br />
;;<br />
esac<br />
case表达式中也可以使用<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>的通配符(“*”、“？”、“[ ]”)。</p>
<p>6.无条件控制语句break和continue<br />
break 用于立即终止当前循环的执行，而contiune用于不执行循环中后面的语句<br />
而立即开始下一个循环的执行。这两个语句只有放在do和done之间才有效。</p>
<p>7.函数定义<br />
在<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>中还可以定义函数。函数实际上也是由若干条<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>命令组成的，<br />
因此它与<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序形式上是相似的，不同的是它不是一个单独的进程，<br />
而是<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序的一部分。函数定义的基本格式为：<br />
functionname<br />
{<br />
若干命令行<br />
}<br />
调用函数的格式为：<br />
functionname param1 param2 ……<br />
<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>函数可以完成某些例行的工作，而且还可以有自己的退出状态，<br />
因此函数也可以作为if、while等控制结构的条件。<br />
在函数定义时不用带参数说明，但在调用函数时可以带有参数，此时<br />
<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>将把这些参数分别赋予相应的位置参数$1、$2、&#8230;及$*。</p>
<p>8.命令分组<br />
在<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>中有两种命令分组的方法：“()”和“{}”，前者当<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>执行()<br />
中的命令时将再创建一个新的子进程，然后这个子进程去执行圆括弧中的命令。<br />
当用户在执行某个命令时不想让命令运行时对状态集合(如位置参数、环境变量、<br />
当前工作目录等)的改变影响到下面语句的执行时，就应该把这些命令放在圆括<br />
弧中，这样就能保证所有的改变只对子进程产生影响，而父进程不受任何干扰；<br />
{}用于将顺序执行的命令的输出结果用于另一个命令的输入(管道方式)。当我们<br />
要真正使用圆括弧和花括弧时(如计算表达式的优先级)，则需要在其前面加上转<br />
义符(\)以便让<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>知道它们不是用于命令执行的控制所用。</p>
<p>9.信号<br />
trap命令用于在<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序中捕捉到信号，之后可以有三种反应方式：<br />
(1)执行一段程序来处理这一信号<br />
(2)接受信号的默认操作<br />
(3)忽视这一信号<br />
trap对上面三种方式提供了三种基本形式：<br />
第一种形式的trap命令在<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>接收到signal list清单中数值相同的信号时，<br />
将执行双引号中的命令串。<br />
trap &#8216;commands&#8217; signal-list<br />
trap &#8220;commands&#8221; signal-list<br />
为了恢复信号的默认操作，使用第二种形式的trap命令：<br />
trap signal-list<br />
第三种形式的trap命令允许忽视信号：<br />
trap &#8221; &#8221; signal-list<br />
注意：<br />
(1)对信号11(段违例)不能捕捉，因为<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>本身需要捕捉该信号去进行内存的转储。<br />
(2)在trap中可以定义对信号0的处理(实际上没有这个信号)，<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序在其终止<br />
(如执行exit语句)时发出该信号。<br />
(3)在捕捉到signal-list中指定的信号并执行完相应的命令之后，如果这些命令没有将<br />
<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序终止的话，<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序将继续执行收到信号时所执行的命令后面的命令，这样<br />
将很容易导致<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序无法终止。<br />
另外，在trap语句中，单引号和双引号是不同的，当<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序第一次碰到trap语句时，<br />
将把commands中的命令扫描一遍。此时若commands是用单引号括起来的话，那么<span style="background-color: #ffff00;"><span class="hilite1">shell</span><br />
</span>不会对commands中的变量和命令进行替换，否则commands中的变量和命令将用当时具体<br />
的值来替换。</p>
<p>10. 运行<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序的方法<br />
执行<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序的方法有三种：<br />
(1)sh <span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序文件名<br />
格式为：<br />
bash <span class="hilite1"><span style="background-color: #ffff00;">shell</span></span> 程序文件名<br />
这实际上是调用一个新的bash命令解释程序，而把<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序文件名作为参数传递给它。<br />
新启动的<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>将去读指定的文件，执行文件中列出的命令，当所有的命令都执行完结束。<br />
该方法的优点是可以利用<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>调试功能。<br />
(2)sh&lt;<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序文件名<br />
格式为：<br />
bash&lt;<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span> 程序文件名<br />
这种方式就是利用输入重定向，使<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>命令解释程序的输入取自指定的程序文件。<br />
(3)用chmod命令使<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序成为可执行的</p>
<p>11. bash程序的调试<br />
bash -选择项 <span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序文件名<br />
几个常用的选择项是：<br />
-e：如果一个命令失败就立即退出<br />
-n：读入命令但是不执行它们<br />
-u：置换时把未设置的变量看作出错<br />
-v：当读入<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>输入行时把它们显示出来<br />
-x：执行命令时把命令和它们的参数显示出来<br />
上面的所有选项也可以在<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序内部用“set -选择项”的形式引用，而“set +选择项”则<br />
将禁止该选择项起作用。如果只想对程序的某一部分使用某些选择项时，则可以将该部分用<br />
上面两个语句包围起来。<br />
1.未置变量退出和立即退出<br />
未置变量退出特性允许用户对所有变量进行检查，如果引用了一个未赋值的变量就终止<span style="background-color: #ffff00;"><span class="hilite1">shell</span><br />
</span>程序的执行。<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>通常允许未置变量的使用，在这种情况下，变量的值为空。如果设置了未<br />
置变量退出选择项，则一旦使用了未置变量就显示错误信息，并终止程序的运行。未置变量退<br />
出选择项为“-u”。<br />
当<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>运行时，若遇到不存在或不可执行的命令、重定向失败或命令非正常结束等情况时，如<br />
果未经重新定向，该出错信息会打印在终端屏幕上，而<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序仍将继续执行。要想在错误发<br />
生时迫使<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序立即结束，可以使用“-e”选项将<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序的执行立即终止。<br />
2.<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序的跟踪<br />
调试<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序的主要方法是利用<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>命令解释程序的“-v”或“-x”选项来跟踪程序的执行。“-v”<br />
选择项使<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>在执行程序的过程中，把它读入的每一个命令行都显示出来，而“-x”选择项使<span style="background-color: #ffff00;"><span class="hilite1">shell</span><br />
</span>在执行程序的过程中把它执行的每一个命令在行首用一个“+”加上命令名显示出来。并把每一个变量<br />
和该变量所取的值也显示出来，因此，它们的主要区别在于：在执行命令行之前无“-v”则打印出命<br />
令行的原始内容，而有“-v”则打印出经过替换后的命令行的内容。<br />
除了使用<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>的“-v”和“-x”选择项以外，还可以在<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序内部采取一些辅助调试的措施。<br />
例如，可以在<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序的一些关键地方使用echo命令把必要的信息显示出来，它的作用相当于C语<br />
言中的printf语句，这样就可以知道程序运行到什么地方及程序目前的状态。</p>
<p>12. bash的内部命令<br />
bash命令解释程序包含了一些内部命令。内部命令在目录列表时是看不见的，它们由<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>本身提供。<br />
常用的内部命令有：echo、eval、exec、export、readonly、read、shift、wait和点(.)。<br />
下面简单介绍其命令格式和功能。<br />
1.echo<br />
命令格式：echo arg<br />
功能：在屏幕上打印出由arg指定的字符串。<br />
2.eval<br />
命令格式：eval args<br />
功能：当<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序执行到eval语句时，<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>读入参数args，并将它们组合成一个新的命令，然后<br />
执行。<br />
3.exec<br />
命令格式：exec 命令 命令参数<br />
功能：当<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>执行到exec语句时，不会去创建新的子进程，而是转去执行指定的命令，<br />
当指定的命令执行完时，该进程，也就是最初的<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>就终止了，所以<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序中exec<br />
后面的语句将不再被执行。<br />
4.export<br />
命令格式：export 变量名 或：export 变量名=变量值<br />
功能：<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>可以用export把它的变量向下带入子<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>从而让子进程继承父进程中的环境变量。<br />
但子<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>不能用export把它的变量向上带入父<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>。<br />
注意：不带任何变量名的export语句将显示出当前所有的export变量。<br />
5.readonly<br />
命令格式：readonly 变量名<br />
功能：将一个用户定义的<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>变量标识为不可变的。不带任何参数的readonly命令将显示出<br />
所有只读的<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>变量。<br />
6.read<br />
命令格式：<br />
read变量名表<br />
功能：从标准输入设备读入一行，分解成若干字，赋值给<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序内部定义的变量。<br />
7.shift语句<br />
功能：shift语句按如下方式重新命名所有的位置参数变量：$2成为$1，$3成为$2……在程序中<br />
每使用一次shift语句，都使所有的位置参数依次向左移动一个位置，并使位置参数“$#”减一，<br />
直到减到0。<br />
8.wait<br />
功能：是<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>等待在后台启动的所有子进程结束。Wait的返回值总是真。<br />
9.exit<br />
功能：退出<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序。在exit之后可有选择地指定一个数字作为返回状态。<br />
10.“.”(点)<br />
命令格式：. <span class="hilite1"><span style="background-color: #ffff00;">Shell</span></span>程序文件名<br />
功能：使<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>读入指定的<span class="hilite1"><span style="background-color: #ffff00;">shell</span></span>程序文件并依次执行文件中的所有语句。</p>
<p>13. 特殊参数：<br />
1. $*: 代表所有参数，其间隔为IFS内定参数的第一个字元<br />
2. $@: 与*星号类同。不同之处在於不参照IFS<br />
3. $#: 代表参数数量<br />
4. $?: 执行上一个指令的返回值<br />
5. $-: 最近执行的foreground pipeline的选项参数<br />
6. $$: 本身的Process ID<br />
7. $!: 执行上一个背景指令的PID<br />
8. $_: 显示出最後一个执行的命令</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuijie.net.cn/?feed=rss2&amp;p=240</wfw:commentRss>
		<slash:comments>79</slash:comments>
		</item>
		<item>
		<title>面对一个全新的环境,作为一个Oracle DBA,首先应该了解什么?</title>
		<link>http://www.cuijie.net.cn/?p=237</link>
		<comments>http://www.cuijie.net.cn/?p=237#comments</comments>
		<pubDate>Sun, 12 Jul 2009 07:59:36 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.cuijie.net.cn/?p=237</guid>
		<description><![CDATA[面对一个全新的环境,作为一个Oracle DBA,首先应该了解什么?
在这里,不谈那些大的方面,比如了解整个IT环境整体情况,假设你已经知道了这些,接下来需要面对的就是这些一个个活生生的database了.这里总结了一些一般的思路来面对一个全先的database,从而快速了解你面对的环境概要.
这也不是教科书,只是一些心得和体会,对于这种问题,每个人的认识的角度是不一样的.欢迎大家继续补充完善.
1、先要了解当前的Oracle 数据库的版本和平台和相关信息
   这个很重要，忙乎了半天还知道你的数据库是哪个版本，跑在什么系统上，那岂不是很悲哀，所以我个人认为这是第一步需要了解的。下面的这些脚本可以帮助你获取你需要的相关信息。
   select * from v$version;
   select * from dba_registry_database;
   select dbid, name, open_mode, database_role, platform_name from v$instance;
   select dbms_utility.port_string from dual;
   set serveroutput on
   declare
     ver VARCHAR2(100);
     compat VARCHAR2(100);
   begin
     dbms_utility.db_version(ver, compat);
     dbms_output.put_line(&#8217;Version: &#8216; &#124;&#124; ver &#124;&#124;&#8217; Compatible: &#8216; &#124;&#124; compat);
   end;
   /
2、其次要了解你的数据库中装了哪些组件
   select * from dba_registry;
　
3、搞清楚这个环境是单机还是集群？
   这个判断方法很多，我这里给出一个借助dbms_utility来判断的方法。
   set serveroutput on
   declare
  [...]]]></description>
			<content:encoded><![CDATA[<p>面对一个全新的环境,作为一个Oracle DBA,首先应该了解什么?</p>
<div id="message13593716" class="t_msgfont"><span style="font-family: 宋体;">在这里,不谈那些大的方面,比如了解整个IT环境整体情况,假设你已经知道了这些,接下来需要面对的就是这些一个个活生生的database了.这里总结了一些一般的思路来面对一个全先的database,从而快速了解你面对的环境概要.</span></div>
<p><span style="font-family: 宋体;">这也不是教科书,只是一些心得和体会,对于这种问题,每个人的认识的角度是不一样的.<span style="color: #ff0000;"><strong>欢迎</strong></span>大家继续补充完善.</span></p>
<p><span style="font-family: 宋体;"><span style="color: #0000ff;">1、先要了解当前的Oracle <a onclick="tagshow(event, '%CA%FD%BE%DD%BF%E2');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>数据库</strong></span></a>的版本和平台和相关信息</span></span><br />
<span style="font-family: 宋体;">   这个很重要，忙乎了半天还知道你的数据库是哪个版本，跑在什么系统上，那岂不是很悲哀，所以我个人认为这是第一步需要了解的。下面的这些脚本可以帮助你获取你需要的相关信息。</span></p>
<div><span style="font-family: 宋体;">   select * from v$version;<br />
   select * from dba_registry_database;<br />
   select dbid, name, open_mode, database_role, platform_name from v$instance;<br />
   select dbms_utility.port_string from dual;</span></div>
<p><span style="font-family: 宋体;">   set serveroutput on<br />
   declare<br />
     ver VARCHAR2(100);<br />
     compat VARCHAR2(100);<br />
   begin<br />
     dbms_utility.db_version(ver, compat);<br />
     dbms_output.put_line(&#8217;Version: &#8216; || ver ||&#8217; Compatible: &#8216; || compat);<br />
   end;<br />
   /<br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">2、其次要了解你的数据库中装了哪些组件</span></span><br />
<span style="font-family: 宋体;">   select * from dba_registry;</span><br />
<span style="font-family: 宋体;">　</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">3、搞清楚这个环境是单机还是集群？</span></span><br />
<span style="font-family: 宋体;">   这个判断方法</span><span style="font-family: 宋体;">很多，我这里给出一个借助dbms_utility来判断的方法。</span></p>
<div><span style="font-family: 宋体;">   set serveroutput on</span></div>
<p></span><span style="font-family: 宋体;">   declare<br />
<span style="font-family: 宋体;">     inst_tab dbms_utility.instance_table;<br />
     inst_cnt NUMBER;<br />
   begin<br />
     if dbms_utility.is_cluster_database then<br />
        dbms_utility.active_instances(inst_tab, inst_cnt);<br />
        dbms_output.put_line(&#8217;-&#8217; || inst_tab.FIRST);<br />
        dbms_output.put_line(TO_CHAR(inst_cnt));<br />
     else</span><br />
<span style="font-family: 宋体;">        dbms_output.put_line(&#8217;Not A Clustered Database&#8217;);<br />
     end if;<br />
   end;<br />
   /</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">4、是否配置了<a onclick="tagshow(event, 'DataGuard');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>DataGuard</strong></span></a>?</span></span><br />
<span style="font-family: 宋体;">   select protection_mode, protection_level, remote_archive, database_role, dataguard_broker,guard_status<br />
   from v$database;</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">5、是否起用了归档模式？</span></span><br />
<span style="font-family: 宋体;">   conn /as sysdba</span><br />
<span style="font-family: 宋体;">   archive log list;</span><br />
<span style="font-family: 宋体;">   select log_mode from v$database;</span><br />
<span style="font-family: 宋体;">　</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">6、是否起用了flashback database特性？</span></span><br />
<span style="font-family: 宋体;">   select flashback_on from v$database;</span><br />
<span style="font-family: 宋体;">   如果是，再进一步查看FRA的配置情况</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">7、是否起用了force logging和补充日志？</span></span><br />
<span style="font-family: 宋体;">   select force_logging,supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_ui,<br />
          supplemental_log_data_fk, supplemental_log_data_all<br />
   from v$database;</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">8、了解控制文件的组成</span></span><br />
<span style="font-family: 宋体;">   select * from v$controlfile;</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">9、了解日志文件的组成</span></span><br />
<span style="font-family: 宋体;">   select l.group#, lf.type, lf.member, l.bytes, l.status LOG_STATUS, lf.status LOGFILE_STATUS<br />
   from v$log l, v$logfile lf<br />
   where l.group# = lf.group#<br />
   order by 1,3;</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">10、了解参数文件的组成和位置</span></span><br />
<span style="font-family: 宋体;">    show parameter spfile</span><br />
<span style="font-family: 宋体;">    create spfile from pfile&#8230;</span><br />
<span style="font-family: 宋体;">    create pfile from spfile;</span><br />
<span style="font-family: 宋体;">    create spfile from memory;<br />
    create pfile from memory;</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">11、了解instance的相关信息</span></span><br />
<span style="font-family: 宋体;">    select instance_name, host_name, status, archiver, database_status, instance_role, active_state<br />
    from v$instance;</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">12、用户和密码相关</span></span><br />
<span style="font-family: 宋体;">    是否使用了缺省密码？</span><br />
<span style="font-family: 宋体;">    是否使用了profile?</span><br />
<span style="font-family: 宋体;">    是否起用了密码验证函数？</span><br />
<span style="font-family: 宋体;">    用户身份验证的方法？</span><br />
<span style="font-family: 宋体;">    密码是否区分大小写等。</span></p>
<div><span style="font-family: 宋体;">    select name, value from gv$parameter where name = &#8216;resource_limit&#8217;;<br />
    select profile, resource_name, limit from dba_profiles order by 1,2;</span></div>
<p></span><span style="font-family: 宋体;">    select username, profile from dba_users where account_status = &#8216;OPEN&#8217; order by 1;<br />
<span style="font-family: 宋体;">　</span><br />
<span style="font-family: 宋体;">    select d.username, u.account_status<br />
    from dba_users_with_defpwd d, dba_users u<br />
    where d.username = u.username and account_status = &#8216;OPEN&#8217;<br />
    order by 2,1;</span><br />
<span style="font-family: 宋体;">　</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">13、是否打开了BLOCK CHANGE TRACKING</span></span><br />
<span style="font-family: 宋体;">    select filename, status, bytes from v$block_change_tracking;</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">14、起用了那些特性(Feature)?</span></span><br />
<span style="font-family: 宋体;">    DBMS_FEATURE_USAGE_REPORT</span><br />
<span style="font-family: 宋体;">　</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">15、表空间和数据文件的规划</span></span><br />
<span style="font-family: 宋体;">    这个大家都很熟悉，就不写了</span><br />
<span style="font-family: 宋体;">　</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">16、字符集相关</span></span><br />
<span style="font-family: 宋体;">    select * from database_properties;</span><br />
<span style="font-family: 宋体;">　</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">17、系统中是否存在invalid对象</span></span><br />
<span style="font-family: 宋体;">    select owner, object_type, COUNT(*)<br />
    from dba_objects<br />
    where status = &#8216;INVALID&#8217;<br />
    group by owner, object_type;</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">18、更进一步的</span></span><br />
<span style="font-family: 宋体;">    是否使用了ASM？</span><br />
<span style="font-family: 宋体;">    当前系统的<a onclick="tagshow(event, '%B1%B8%B7%DD');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>备份</strong></span></a>方法和策略是什么？</span><br />
<span style="font-family: 宋体;">    网络文件的配置是如何的？</span><br />
<span style="font-family: 宋体;">　</span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">19、查看一下最近的alert日志，获取一些有用的信息</span></span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">20、跑几个性能分析报告，看看最近系统的运行状态如何</span></span><br />
<span style="font-family: 宋体;"><span style="color: #0000ff;">21、跑一个RDA报告，收集完整的系统状态报告</span></span><br />
<span style="font-family: 宋体;">　</span><br />
<span style="font-family: 宋体;">好了，有了这一些基本信息（不完全），你基本上对你新接触的这个系统有了一个大概的了解，接来下，你再慢慢的深入分析，然后制订出一套符合实际情况的运维规范来，慢慢的养猪吧。<img style="cursor: pointer;" title="点击图片可在新窗口打开" src="http://www.itpub.net/images/smilies/14.gif" border="0" alt="" /></span></p>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuijie.net.cn/?feed=rss2&amp;p=237</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>用mysqldumpslow分析mysql的slow query log</title>
		<link>http://www.cuijie.net.cn/?p=233</link>
		<comments>http://www.cuijie.net.cn/?p=233#comments</comments>
		<pubDate>Thu, 25 Jun 2009 08:07:13 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[slow query log]]></category>
		<category><![CDATA[慢查询]]></category>

		<guid isPermaLink="false">http://www.cuijie.net.cn/?p=233</guid>
		<description><![CDATA[mysql有一个功能就是可以log下来运行的比较慢的sql语句，默认是没有这个log的，为了开启这个功能，要修改my.cnf或者在mysql启动的时候加入一些参数。如果在my.cnf里面修改，需增加如下几行

long_query_time = 1
log-slow-queries = /var/youpath/slow.log
log-queries-not-using-indexes]]></description>
			<content:encoded><![CDATA[<p>mysql有一个功能就是可以log下来运行的比较慢的sql语句，默认是没有这个log的，为了开启这个功能，要修改my.cnf或者在mysql启动的时候加入一些参数。如果在my.cnf里面修改，需增加如下几行</p>
<p>long_query_time = 1<br />
log-slow-queries = /var/youpath/slow.log<br />
log-queries-not-using-indexes</p>
<p>long_query_time 是指执行超过多久的sql会被log下来，这里是1秒。<br />
log-slow-queries 设置把日志写在那里，可以为空，系统会给一个缺省的文件host_name-slow.log，我生成的log就在mysql的data目录<br />
log-queries-not-using-indexes 就是字面意思，log下来没有使用索引的query。</p>
<p>把上述参数打开，运行一段时间，就可以关掉了，省得影响生产环境。</p>
<p>接下来就是分析了，我这里的文件名字叫host-slow.log。<br />
先mysqldumpslow –help以下，俺主要用的是<br />
-s ORDER what to sort by (t, at, l, al, r, ar etc), ‘at’ is default<br />
-t NUM just show the top n queries<br />
-g PATTERN grep: only consider stmts that include this string</p>
<p>-s，是order的顺序，说明写的不够详细，俺用下来，包括看了代码，主要有<br />
c,t,l,r和ac,at,al,ar，分别是按照query次数，时间，lock的时间和返回的记录数来排序，前面加了a的时倒叙<br />
-t，是top n的意思，即为返回前面多少条的数据<br />
-g，后边可以写一个正则匹配模式，大小写不敏感的</p>
<p>mysqldumpslow -s c -t 20 host-slow.log<br />
mysqldumpslow -s r -t 20 host-slow.log</p>
<p>上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。<br />
mysqldumpslow -t 10 -s t -g “left join” host-slow.log<br />
这个是按照时间返回前10条里面含有左连接的sql语句。</p>
<p>用了这个工具就可以查询出来那些sql语句是性能的瓶颈，进行优化，比如加索引，该应用的实现方式等。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuijie.net.cn/?feed=rss2&amp;p=233</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux压缩(解压缩)命令详解</title>
		<link>http://www.cuijie.net.cn/?p=229</link>
		<comments>http://www.cuijie.net.cn/?p=229#comments</comments>
		<pubDate>Fri, 12 Jun 2009 01:23:49 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[tar]]></category>
		<category><![CDATA[zip]]></category>

		<guid isPermaLink="false">http://www.cuijie.net.cn/?p=229</guid>
		<description><![CDATA[一.tar命令
         tar可以为文件和目录创建档案。利用tar，用户可以为某一特定文件创建档案（备份文件），也可以在档案中改变文件，或者向档案中加入新的文件。tar 最初被用来在磁带上创建档案，现在，用户可以在任何设备上创建档案，如软盘。利用tar命令，可以把一大堆的文件和目录全部打包成一个文件，这对于备份文 件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。
语法：tar [主选项+辅选项] 文件或者目录
使用该命令时，主选项是必须要有的，它告诉tar要做什么事情，辅选项是辅助使用的，可以选用。
主选项：
c 创建新的档案文件。如果用户想备份一个目录或是一些文件，就要选择这个选项。
r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件，又发现还有一个目录或是一些文件忘记备份了，这时可以使用该选项，将忘记的目录或文件追加到备份文件中。
t 列出档案文件的内容，查看已经备份了哪些文件。
u 更新文件。就是说，用新增的文件取代原备份文件，如果在备份文件中找不到要更新的文件，则把它追加到备份文件的最后。
x 从档案文件中释放文件。
辅助选项：
b 该选项是为磁带机设定的。其后跟一数字，用来说明区块的大小，系统预设值为20（20*512 bytes）。
f 使用档案文件或设备，这个选项通常是必选的。
k 保存已经存在的文件。例如我们把某个文件还原，在还原的过程中，遇到相同的文件，不会进行覆盖。
m 在还原文件时，把所有文件的修改时间设定为现在。
M 创建多卷的档案文件，以便在几个磁盘中存放。
v 详细报告tar处理的文件信息。如无此选项，tar不报告文件信息。
w 每一步都要求确认。
z 用gzip来压缩/解压缩文件，加上该选项后可以将档案文件进行压缩，但还原时也一定要使用该选项进行解压缩。
二.Linux下的压缩文件剖析
         对于刚刚接触Linux的人来说，一定会给Linux下一大堆各式各样的文件名 给搞晕。别个不说，单单就压缩文件为例，我们知道在Windows下最常见的压缩文件就只有两种，一是,zip，另一个是.rar。可是Linux就不同 了，它有.gz、.tar.gz、tgz、bz2、.Z、.tar等众多的压缩文件名，此外windows下的.zip和.rar也可以在Linux下使 用，不过在Linux使用.zip和.rar的人就太少了。本文就来对这些常见的压缩文件进行一番小结，希望你下次遇到这些文件时不至于被搞晕:)
　 　在具体总结各类压缩文件之前，首先要 弄清两个概念：打包和压缩。打包是指将一大堆文件或目录什么的变成一个总的文件，压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要区分这 两个概念呢？其实这源于Linux中的很多压缩程序只能针对一个文件进行压缩，这样当你想要压缩一大堆文件时，你就得先借助另外的工具将这一大堆文件先打 成一个包，然后再就原来的压缩程序进行压缩。
　　Linux下最常用的打包程序就是tar了，使用tar程序打出来的包我们常称为tar包，tar包文件的命令通常都是以.tar结尾的。生成tar包后，就可以用其它的程序来进行压缩了，所以首先就来讲讲tar命令的基本用法：
　　tar命令的选项有很多(用man tar可以查看到)，但常用的就那么几个选项，下面来举例说明一下：
　　# tar -cf all.tar *.jpg
　　这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包，-f指定包的文件名。
　　# tar -rf all.tar *.gif
　　这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
        # tar -uf all.tar logo.gif
　　这条命令是更新原来tar包all.tar中logo.gif文件，-u是表示更新文件的意思。
　　# tar -tf all.tar
　　这条命令是列出all.tar包中所有文件，-t是列出文件的意思
　　# tar -xf all.tar
　　这条命令是解出all.tar包中所有文件，-x是解包的意思
　　以上就是tar的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件，tar提供了一种特殊的功能。这就是tar可以在打包或解包的同时调用其它的压缩程序，比如调用gzip、bzip2等。
　　1) tar调用gzip
　　gzip是GNU组织开发的一个压缩程序，.gz结尾的文件就是gzip压缩的结果。与gzip相对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。下面来举例说明一下：
　　# tar -czf all.tar.gz *.jpg
　　这条命令是将所有.jpg的文件打成一个tar包，并且将其用gzip压缩，生成一个gzip压缩过的包，包名为all.tar.gz
　　# tar -xzf [...]]]></description>
			<content:encoded><![CDATA[<p>一.tar命令</p>
<p>         tar可以为文件和目录创建档案。利用tar，用户可以为某一特定文件创建档案（备份文件），也可以在档案中改变文件，或者向档案中加入新的文件。tar 最初被用来在磁带上创建档案，现在，用户可以在任何设备上创建档案，如软盘。利用tar命令，可以把一大堆的文件和目录全部打包成一个文件，这对于备份文 件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。</p>
<p>语法：tar [主选项+辅选项] 文件或者目录</p>
<p>使用该命令时，主选项是必须要有的，它告诉tar要做什么事情，辅选项是辅助使用的，可以选用。</p>
<p>主选项：</p>
<p>c 创建新的档案文件。如果用户想备份一个目录或是一些文件，就要选择这个选项。<br />
r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件，又发现还有一个目录或是一些文件忘记备份了，这时可以使用该选项，将忘记的目录或文件追加到备份文件中。<br />
t 列出档案文件的内容，查看已经备份了哪些文件。<br />
u 更新文件。就是说，用新增的文件取代原备份文件，如果在备份文件中找不到要更新的文件，则把它追加到备份文件的最后。<br />
x 从档案文件中释放文件。</p>
<p>辅助选项：<br />
b 该选项是为磁带机设定的。其后跟一数字，用来说明区块的大小，系统预设值为20（20*512 bytes）。<br />
f 使用档案文件或设备，这个选项通常是必选的。<br />
k 保存已经存在的文件。例如我们把某个文件还原，在还原的过程中，遇到相同的文件，不会进行覆盖。<br />
m 在还原文件时，把所有文件的修改时间设定为现在。<br />
M 创建多卷的档案文件，以便在几个磁盘中存放。<br />
v 详细报告tar处理的文件信息。如无此选项，tar不报告文件信息。<br />
w 每一步都要求确认。<br />
z 用gzip来压缩/解压缩文件，加上该选项后可以将档案文件进行压缩，但还原时也一定要使用该选项进行解压缩。<br />
二.Linux下的压缩文件剖析<br />
         对于刚刚接触Linux的人来说，一定会给Linux下一大堆各式各样的文件名 给搞晕。别个不说，单单就压缩文件为例，我们知道在Windows下最常见的压缩文件就只有两种，一是,zip，另一个是.rar。可是Linux就不同 了，它有.gz、.tar.gz、tgz、bz2、.Z、.tar等众多的压缩文件名，此外windows下的.zip和.rar也可以在Linux下使 用，不过在Linux使用.zip和.rar的人就太少了。本文就来对这些常见的压缩文件进行一番小结，希望你下次遇到这些文件时不至于被搞晕:)</p>
<p>　 　在具体总结各类压缩文件之前，首先要 弄清两个概念：打包和压缩。打包是指将一大堆文件或目录什么的变成一个总的文件，压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要区分这 两个概念呢？其实这源于Linux中的很多压缩程序只能针对一个文件进行压缩，这样当你想要压缩一大堆文件时，你就得先借助另外的工具将这一大堆文件先打 成一个包，然后再就原来的压缩程序进行压缩。</p>
<p>　　Linux下最常用的打包程序就是tar了，使用tar程序打出来的包我们常称为tar包，tar包文件的命令通常都是以.tar结尾的。生成tar包后，就可以用其它的程序来进行压缩了，所以首先就来讲讲tar命令的基本用法：</p>
<p>　　tar命令的选项有很多(用man tar可以查看到)，但常用的就那么几个选项，下面来举例说明一下：<br />
　　# tar -cf all.tar *.jpg<br />
　　这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包，-f指定包的文件名。<br />
　　# tar -rf all.tar *.gif<br />
　　这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。<br />
        # tar -uf all.tar logo.gif<br />
　　这条命令是更新原来tar包all.tar中logo.gif文件，-u是表示更新文件的意思。</p>
<p>　　# tar -tf all.tar<br />
　　这条命令是列出all.tar包中所有文件，-t是列出文件的意思<br />
　　# tar -xf all.tar<br />
　　这条命令是解出all.tar包中所有文件，-x是解包的意思<br />
　　以上就是tar的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件，tar提供了一种特殊的功能。这就是tar可以在打包或解包的同时调用其它的压缩程序，比如调用gzip、bzip2等。<br />
　　1) tar调用gzip<br />
　　gzip是GNU组织开发的一个压缩程序，.gz结尾的文件就是gzip压缩的结果。与gzip相对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。下面来举例说明一下：<br />
　　# tar -czf all.tar.gz *.jpg<br />
　　这条命令是将所有.jpg的文件打成一个tar包，并且将其用gzip压缩，生成一个gzip压缩过的包，包名为all.tar.gz<br />
　　# tar -xzf all.tar.gz<br />
　　这条命令是将上面产生的包解开。<br />
　　2) tar调用bzip2<br />
　　bzip2是一个压缩能力更强的压缩程序，.bz2结尾的文件就是bzip2压缩的结果。与bzip2相对的解压程序是bunzip2。tar中使用-j这个参数来调用bzip2。下面来举例说明一下：<br />
　　# tar -cjf all.tar.bz2 *.jpg<br />
　　这条命令是将所有.jpg的文件打成一个tar包，并且调用bzip2压缩，生成一个bzip2压缩过的包，包名为all.tar.bz2<br />
　　# tar -xjf all.tar.bz2<br />
　　这条命令是将上面产生的包解开。<br />
    3)tar调用compress<br />
compress也是一个压缩程序，但是好象使用compress的人不如gzip和bzip2的人多。.Z结尾的文件就是bzip2压缩的结果。与compress相对的解压程序是uncompress。tar中使用-Z这个参数来调用gzip。下面来举例说明一下：</p>
<p>　　# tar -cZf all.tar.Z *.jpg<br />
　　这条命令是将所有.jpg的文件打成一个tar包，并且调用compress压缩，生成一个uncompress压缩过的包，包名为all.tar.Z<br />
　　# tar -xZf all.tar.Z<br />
　　这条命令是将上面产生的包解开<br />
　　有了上面的知识，你应该可以解开多种压缩文件了，下面对于tar系列的压缩文件作一个小结：<br />
　　1)对于.tar结尾的文件<br />
　　tar -xf all.tar<br />
　　2)对于.gz结尾的文件<br />
　　gzip -d all.gz<br />
　　gunzip all.gz<br />
　　3)对于.tgz或.tar.gz结尾的文件<br />
　　tar -xzf all.tar.gz<br />
　　tar -xzf all.tgz<br />
　　4)对于.bz2结尾的文件<br />
　　bzip2 -d all.bz2<br />
　　bunzip2 all.bz2<br />
　　5)对于tar.bz2结尾的文件<br />
　　tar -xjf all.tar.bz2<br />
　　6)对于.Z结尾的文件<br />
　　uncompress all.Z<br />
　　7)对于.tar.Z结尾的文件<br />
　　tar -xZf all.tar.z<br />
　　另外对于Window下的常见压缩文件.zip和.rar，Linux也有相应的方法来解压它们：<br />
　　1)对于.zip<br />
　　linux下提供了zip和unzip程序，zip是压缩程序，unzip是解压程序。它们的参数选项很多，这里只做简单介绍，依旧举例说明一下其用法：<br />
　　# zip all.zip *.jpg<br />
　　这条命令是将所有.jpg的文件压缩成一个zip包</p>
<p>      注意：如果要压缩的是个文件夹，则要加上-r参数，表示调用递归压缩，如：</p>
<p>      zip -r temp.zip temp<br />
        # unzip all.zip<br />
　　这条命令是将all.zip中的所有文件解压出来</p>
<p>　　2)对于.rar<br />
　　要在linux下处理.rar文件，需要安装RAR for Linux，可以从网上下载，但要记住，RAR for Linux<br />
不是免费的；然后安装：<br />
　　# tar -xzpvf rarlinux-3.2.0.tar.gz<br />
　　# cd rar<br />
　　# make<br />
　　这样就安装好了，安装后就有了rar和unrar这两个程序，rar是压缩程序，unrar是解压程序。它们的参数选项很多，这里只做简单介绍，依旧举例说明一下其用法：<br />
　　# rar a all *.jpg<br />
　　这条命令是将所有.jpg的文件压缩成一个rar包，名为all.rar，该程序会将.rar 扩展名将自动附加到包名后。<br />
　　# unrar e all.rar<br />
　　这条命令是将all.rar中的所有文件解压出来<br />
　 　到此为至，我们已经介绍过linux下的tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、 zip、unzip、rar、unrar等程式，你应该已经能够使用它们对.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、. Z、.tar.Z、.zip、.rar这10种压缩文件进行解压了，以后应该不需要为下载了一个软件而不知道如何在Linux下解开而烦恼了。而且以上方 法对于Unix也基本有效。<br />
　　本文介绍了linux下的压缩程式tar、gzip、gunzip、bzip2、bunzip2、 compress、uncompress、zip、unzip、rar、unrar等程式，以及如何使用它们对.tar、.gz、.tar.gz、. tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar这10种压缩文件进行操作。<br />
本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/hbcui1984/archive/2007/04/25/1583796.aspx">http://blog.csdn.net/hbcui1984/archive/2007/04/25/1583796.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuijie.net.cn/?feed=rss2&amp;p=229</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>数字证书</title>
		<link>http://www.cuijie.net.cn/?p=212</link>
		<comments>http://www.cuijie.net.cn/?p=212#comments</comments>
		<pubDate>Fri, 12 Jun 2009 01:22:30 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[其他]]></category>

		<guid isPermaLink="false">http://www.cuijie.net.cn/?p=212</guid>
		<description><![CDATA[什么是数字证书？
也许您对“数字证书”这一概念还很陌生，其实，数字证书就是标志网络用户身份信息
的一系列数据，用来在网络通讯中识别通讯各方的身份，即要在Internet 上解决“我是谁”
的问题，就如同现实中我们每一个人都要拥有一张证明个人身份的身份证或驾驶执照一样，
以表明我们的身份或某种资格。
数字证书是由权威公正的第三方机构即 CA 中心签发的，一串很长的包含有客户基本信
息及CA 签字的数学编码。以数字证书为核心的加密技术可以对网络上传输的信息进行加密
和解密、数字签名和签名验证，确保网上传递信息的机密性、完整性，以及交易实体身份的
真实性，签名信息的不可否认性，从而保障网络应用的安全性。
数字证书采用公钥密码体制，即利用一对互相匹配的密钥进行加密、解密。每个用户拥
有一把仅为本人所掌握的私有密钥（私钥），用它进行解密和签名；同时拥有一把公共密钥
（公钥）并可以对外公开，用于加密和验证签名。当发送一份保密文件时，发送方使用接收
方的公钥对数据加密，而接收方则使用自己的私钥解密，这样，信息就可以安全无误地到达
目的地了，即使被第三方截获，由于没有相应的私钥，也无法进行解密。通过数字的手段保
证加密过程是一个不可逆过程，即只有用私有密钥才能解密。在公开密钥密码体制中，常用
的一种是RSA 体制。
用户也可以采用自己的私钥对信息加以处理，由于密钥仅为本人所有，这样就产生了
别人无法生成的文件，也就形成了数字签名。采用数字签名，能够确认以下两点：
（1）保证信息是由签名者自己签名发送的，签名者不能否认或难以否认；
（2）保证信息自签发后到收到为止未曾作过任何修改，签发的文件是真实文件。
数字证书可用于：发送安全电子邮件、访问安全站点、网上证券、网上招标采购、网上
签约、网上办公、网上缴费、网上税务等网上安全电子事务处理和安全电子交易活动。
2、公钥加密体制与RSA 原理
根据加密密钥和解密密钥是否相同或本质上相同，即从其中一个容易推出另一个，可
将现有的加密体制分为两种，即单钥加密体制和双钥加密体制。前者的加密密钥和加密密钥
或者相同或者本质上相同，即从其中一个可以很容易的推出另一个，其典型代表是美国的数
据加密标准（DES）；后一种加密体制中的加密密钥和解密密钥不相同，并且从其中一个很
难推出另一个，因此它的加密密钥可以公开，而解密密钥可以由用户自己保存，其典型代表
的RSA 体制。
双钥密钥体制又叫公开密钥体制。在该体制中，加密密钥（又称公开密钥）PK 是对外
公开的，加密算法E 和解密算法D 也是公开的，但解密密钥（又称秘密密钥） SK 是保密
的。虽然SK 是由PK 决定的，但却不能根据PK 计算出SK 。公开密钥算法具有以下特点：
（１）用加密密钥 PK 对明文X 加密后，再用解密密钥SK 解密即得明文，即
D E X X SK PK ( ( )) = ；
（２）加密密钥不能用来解密，即D E X X PK PK ( ( )) ≠ ；
（３）在计算机上可以容易地产生成对的PK 和SK ，但从已知的PK 不可能推导出
SK 。
在信息传递过程中，使用对方的公开密钥对该信息进行加密可以有效排除第三人对该信
息的偷窥。而实践中，双钥加密体制更多地被用于身份的验证，即数字签名。在数字签名中，
发送者A 用其秘密解密密钥A SK 和解密算法D对报文X 进行加密，将运算结果D (X ) SKA
传给接受者B 。B 用已知的A 的公开加密密钥A [...]]]></description>
			<content:encoded><![CDATA[<p>什么是数字证书？</p>
<p>也许您对“数字证书”这一概念还很陌生，其实，数字证书就是标志网络用户身份信息</p>
<p>的一系列数据，用来在网络通讯中识别通讯各方的身份，即要在Internet 上解决“我是谁”</p>
<p>的问题，就如同现实中我们每一个人都要拥有一张证明个人身份的身份证或驾驶执照一样，</p>
<p>以表明我们的身份或某种资格。</p>
<p>数字证书是由权威公正的第三方机构即 CA 中心签发的，一串很长的包含有客户基本信</p>
<p>息及CA 签字的数学编码。以数字证书为核心的加密技术可以对网络上传输的信息进行加密</p>
<p>和解密、数字签名和签名验证，确保网上传递信息的机密性、完整性，以及交易实体身份的</p>
<p>真实性，签名信息的不可否认性，从而保障网络应用的安全性。</p>
<p>数字证书采用公钥密码体制，即利用一对互相匹配的密钥进行加密、解密。每个用户拥</p>
<p>有一把仅为本人所掌握的私有密钥（私钥），用它进行解密和签名；同时拥有一把公共密钥</p>
<p>（公钥）并可以对外公开，用于加密和验证签名。当发送一份保密文件时，发送方使用接收</p>
<p>方的公钥对数据加密，而接收方则使用自己的私钥解密，这样，信息就可以安全无误地到达</p>
<p>目的地了，即使被第三方截获，由于没有相应的私钥，也无法进行解密。通过数字的手段保</p>
<p>证加密过程是一个不可逆过程，即只有用私有密钥才能解密。在公开密钥密码体制中，常用</p>
<p>的一种是RSA 体制。</p>
<p>用户也可以采用自己的私钥对信息加以处理，由于密钥仅为本人所有，这样就产生了</p>
<p>别人无法生成的文件，也就形成了数字签名。采用数字签名，能够确认以下两点：</p>
<p>（1）保证信息是由签名者自己签名发送的，签名者不能否认或难以否认；</p>
<p>（2）保证信息自签发后到收到为止未曾作过任何修改，签发的文件是真实文件。</p>
<p>数字证书可用于：发送安全电子邮件、访问安全站点、网上证券、网上招标采购、网上</p>
<p>签约、网上办公、网上缴费、网上税务等网上安全电子事务处理和安全电子交易活动。</p>
<p>2、公钥加密体制与RSA 原理</p>
<p>根据加密密钥和解密密钥是否相同或本质上相同，即从其中一个容易推出另一个，可</p>
<p>将现有的加密体制分为两种，即单钥加密体制和双钥加密体制。前者的加密密钥和加密密钥</p>
<p>或者相同或者本质上相同，即从其中一个可以很容易的推出另一个，其典型代表是美国的数</p>
<p>据加密标准（DES）；后一种加密体制中的加密密钥和解密密钥不相同，并且从其中一个很</p>
<p>难推出另一个，因此它的加密密钥可以公开，而解密密钥可以由用户自己保存，其典型代表</p>
<p>的RSA 体制。</p>
<p>双钥密钥体制又叫公开密钥体制。在该体制中，加密密钥（又称公开密钥）PK 是对外</p>
<p>公开的，加密算法E 和解密算法D 也是公开的，但解密密钥（又称秘密密钥） SK 是保密</p>
<p>的。虽然SK 是由PK 决定的，但却不能根据PK 计算出SK 。公开密钥算法具有以下特点：</p>
<p>（１）用加密密钥 PK 对明文X 加密后，再用解密密钥SK 解密即得明文，即</p>
<p>D E X X SK PK ( ( )) = ；</p>
<p>（２）加密密钥不能用来解密，即D E X X PK PK ( ( )) ≠ ；</p>
<p>（３）在计算机上可以容易地产生成对的PK 和SK ，但从已知的PK 不可能推导出</p>
<p>SK 。</p>
<p>在信息传递过程中，使用对方的公开密钥对该信息进行加密可以有效排除第三人对该信</p>
<p>息的偷窥。而实践中，双钥加密体制更多地被用于身份的验证，即数字签名。在数字签名中，</p>
<p>发送者A 用其秘密解密密钥A SK 和解密算法D对报文X 进行加密，将运算结果D (X ) SKA</p>
<p>传给接受者B 。B 用已知的A 的公开加密密钥A PK 和加密算法E 得出</p>
<p>E D X X PKA SKA ( ( )) = 。由于A的解密密钥A SK 只有A 知道，所以除A 外无人能产生密文</p>
<p>D (X ) SKA 。这样，报文就被A签名了。</p>
<p>在公开密钥体制中，应用得最多的是RSA 体制。RSA 算法是由Rivest，Shamir 和Adleman</p>
<p>于1978 年提出的，曾被ISO/TC97 的数据加密委员会SC20 推荐为公开数据加密标准。</p>
<p>RSA 体制是根据寻求两个大素数容易，而将他们的乘积分解开则极其困难这一原理来</p>
<p>设计的。在这一体制中，每个用户有加密密钥PK = (e, N)和解密密钥SK = (d, N)，用户</p>
<p>把加密密钥PK 公开而对解密密钥中的d 保密。其中N 为两个大素数p 和q 的乘积（ p 和</p>
<p>q 一般为100 位以上的十进制俗素数），虽然e 和d 满足一定的关系，但敌手不能根据已知</p>
<p>的e 和N 求出d 。</p>
<p>若用整数 X 表示明文，用整数Y 表示密文， X ，Y 均小于N ，则加、解密算法为：</p>
<p>加密：Y = X e mod N</p>
<p>解密： X = Y d mod N</p>
<p>即加密密钥PK = (e, N)，解密密钥SK = (d, N)。问题在于PK 和SK 中的每个参数如何</p>
<p>选择？用户秘密的选择两个大素数p 和q，计算出N = pq，将N 公开。用户再计算出N</p>
<p>的欧拉函数Φ(N) = ( p −1)(q −1)，定义Φ(N)为小于等于N 且与N 互素的数的个数。然</p>
<p>后，用户从[0,Φ(N) −1]中任选一个与Φ(N)互素的数e作为公开的加密指数，并计算出满</p>
<p>足下式的d</p>
<p>ed ≡ 1modΦ(N)</p>
<p>作为解密指数，从而产生了所需要的公开密钥 PK 和秘密密钥SK 。</p>
<p>RSA 的安全性在于对大数N 的分解极其困难。如果攻击者能从N 中分解出p 和q ，便</p>
<p>能求出Φ(N)，从而根据公开的e求出d 。但是大数分解很花时间，例如，用每一微秒做一</p>
<p>次操作的计算机，分解100 位的十进制数N ，需要时间为74 年。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuijie.net.cn/?feed=rss2&amp;p=212</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux fg bg ctrl + z jobs &amp; 等命令(zz)</title>
		<link>http://www.cuijie.net.cn/?p=222</link>
		<comments>http://www.cuijie.net.cn/?p=222#comments</comments>
		<pubDate>Thu, 14 May 2009 10:04:57 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[bg]]></category>
		<category><![CDATA[fg]]></category>

		<guid isPermaLink="false">http://www.cuijie.net.cn/?p=222</guid>
		<description><![CDATA[fg、bg、jobs、&#38;、ctrl + z都是跟系统任务有关的，虽然现在基本上不怎么需要用到这些命令，但学会了也是很实用的
一。&#38; 最经常被用到
   这个用在一个命令的最后，可以把这个命令放到后台执行
二。ctrl + z
     可以将一个正在前台执行的命令放到后台，并且暂停
三。jobs
     查看当前有多少在后台运行的命令
四。fg
     将后台中的命令调至前台继续运行
   如果后台中有多个命令，可以用 fg %jobnumber将选中的命令调出，%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
五。bg
     将一个在后台暂停的命令，变成继续执行
   如果后台中有多个命令，可以用bg %jobnumber将选中的命令调出，%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
Linux下使用Shell命令控制任务Jobs执行
下列命令可以用来操纵进程任务：
　　ps 列出系统中正在运行的进程；
　　kill 发送信号给一个或多个进程（经常用来杀死一个进程）；
　　jobs 列出当前shell环境中已启动的任务状态，若未指定jobsid，则显示所有活动的任务状态信息；如果报告了一个任务的终止(即任务的状态被标记为Terminated)，shell 从当前的shell环境已知的列表中删除任务的进程标识；
　　bg 将进程搬到后台运行（Background）；
　　fg 将进程搬到前台运行（Foreground）；
　　将job转移到后台运行
　　如果你经常在X图形下工作，你可能有这样的经历：通过终端命令运行一个GUI程序，GUI界面出来了，但是你的终端还停留在原地，你不能在shell中继续执行其他命令了，除非将GUI程序关掉。
　　为了使程序执行后终端还能继续接受命令，你可以将进程移到后台运行，使用如下命令运行程序： #假设要运行xmms
　　$xmms &#38;
　　这样打开xmms后，终端的提示又回来了。现在xmms在后台运行着呢；但万一你运行程序时忘记使用“&#38;”了，又不想重新执行；你可以先使用ctrl+z挂起程序，然后敲入bg命令，这样程序就在后台继续运行了。
　　概念：当前任务
　　如果后台的任务号有2个，[1],[2]；如果当第一个后台任务顺利执行完毕，第二个后台任务还在执行中时，当前任务便会自动变成后台任务号码“[2]”的后台任务。所以可以得出一点，即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时，如果不加任何引号，则所变动的均是当前任务。
　　察看jobs
　　使用jobs或ps命令可以察看正在执行的jobs。
　　jobs命令执行的结果，＋表示是一个当前的作业，减号表是是一个当前作业之后的一个作业，jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了（kill），shell 从当前的shell环境已知的列表中删除任务的进程标识；也就是说，jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息；
　　进程的挂起
　　后台进程的挂起：
　　在solaris中通过stop命令执行，通过jobs命令查看job号(假设为num)，然后执行stop %num；
　　在redhat中，不存在stop命令，可通过执行命令kill -stop PID，将进程挂起；
　　当要重新执行当前被挂起的任务时，通过bg %num 即可将挂起的job的状态由stopped改为running，仍在后台执行；当需要改为在前台执行时，执行命令fg %num即可；
　　前台进程的挂起：
　　ctrl+Z;
　　进程的终止
　　后台进程的终止：
　　方法一：
　　通过jobs命令查看job号（假设为num），然后执行kill %num
　　方法二：
　　通过ps命令查看job的进程号（PID，假设为pid），然后执行kill pid
　　前台进程的终止：
　　ctrl+c
　　kill的其他作用
　　kill除了可以终止进程，还能给进程发送其它信号，使用kill -l 可以察看kill支持的信号。
　　SIGTERM是不带参数时kill发送的信号，意思是要进程终止运行，但执行与否还得看进程是否支持。如果进程还没有终止，可以使用kill -SIGKILL pid，这是由内核来终止进程，进程不能监听这个信号。
本文来自ChinaUnix博客，如果查看原文请点：http://blog.chinaunix.net/u2/67555/showart_1110905.html
]]></description>
			<content:encoded><![CDATA[<p>fg、bg、jobs、&amp;、ctrl + z都是跟系统任务有关的，虽然现在基本上不怎么需要用到这些命令，但学会了也是很实用的<br />
一。&amp; 最经常被用到<br />
   这个用在一个命令的最后，可以把这个命令放到后台执行<br />
二。ctrl + z<br />
     可以将一个正在前台执行的命令放到后台，并且暂停<br />
三。jobs<br />
     查看当前有多少在后台运行的命令<br />
四。fg<br />
     将后台中的命令调至前台继续运行<br />
   如果后台中有多个命令，可以用 fg %jobnumber将选中的命令调出，%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)<br />
五。bg<br />
     将一个在后台暂停的命令，变成继续执行<br />
   如果后台中有多个命令，可以用bg %jobnumber将选中的命令调出，%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)</p>
<p>Linux下使用Shell命令控制任务Jobs执行<br />
下列命令可以用来操纵进程任务：<br />
　　ps 列出系统中正在运行的进程；<br />
　　kill 发送信号给一个或多个进程（经常用来杀死一个进程）；<br />
　　jobs 列出当前shell环境中已启动的任务状态，若未指定jobsid，则显示所有活动的任务状态信息；如果报告了一个任务的终止(即任务的状态被标记为Terminated)，shell 从当前的shell环境已知的列表中删除任务的进程标识；<br />
　　bg 将进程搬到后台运行（Background）；<br />
　　fg 将进程搬到前台运行（Foreground）；<br />
　　将job转移到后台运行<br />
　　如果你经常在X图形下工作，你可能有这样的经历：通过终端命令运行一个GUI程序，GUI界面出来了，但是你的终端还停留在原地，你不能在shell中继续执行其他命令了，除非将GUI程序关掉。<br />
　　为了使程序执行后终端还能继续接受命令，你可以将进程移到后台运行，使用如下命令运行程序： #假设要运行xmms<br />
　　$xmms &amp;<br />
　　这样打开xmms后，终端的提示又回来了。现在xmms在后台运行着呢；但万一你运行程序时忘记使用“&amp;”了，又不想重新执行；你可以先使用ctrl+z挂起程序，然后敲入bg命令，这样程序就在后台继续运行了。<br />
　　概念：当前任务<br />
　　如果后台的任务号有2个，[1],[2]；如果当第一个后台任务顺利执行完毕，第二个后台任务还在执行中时，当前任务便会自动变成后台任务号码“[2]”的后台任务。所以可以得出一点，即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时，如果不加任何引号，则所变动的均是当前任务。<br />
　　察看jobs<br />
　　使用jobs或ps命令可以察看正在执行的jobs。<br />
　　jobs命令执行的结果，＋表示是一个当前的作业，减号表是是一个当前作业之后的一个作业，jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了（kill），shell 从当前的shell环境已知的列表中删除任务的进程标识；也就是说，jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息；<br />
　　进程的挂起<br />
　　后台进程的挂起：<br />
　　在solaris中通过stop命令执行，通过jobs命令查看job号(假设为num)，然后执行stop %num；<br />
　　在redhat中，不存在stop命令，可通过执行命令kill -stop PID，将进程挂起；<br />
　　当要重新执行当前被挂起的任务时，通过bg %num 即可将挂起的job的状态由stopped改为running，仍在后台执行；当需要改为在前台执行时，执行命令fg %num即可；<br />
　　前台进程的挂起：<br />
　　ctrl+Z;<br />
　　进程的终止<br />
　　后台进程的终止：<br />
　　方法一：<br />
　　通过jobs命令查看job号（假设为num），然后执行kill %num<br />
　　方法二：<br />
　　通过ps命令查看job的进程号（PID，假设为pid），然后执行kill pid<br />
　　前台进程的终止：<br />
　　ctrl+c<br />
　　kill的其他作用<br />
　　kill除了可以终止进程，还能给进程发送其它信号，使用kill -l 可以察看kill支持的信号。<br />
　　SIGTERM是不带参数时kill发送的信号，意思是要进程终止运行，但执行与否还得看进程是否支持。如果进程还没有终止，可以使用kill -SIGKILL pid，这是由内核来终止进程，进程不能监听这个信号。</p>
<p><strong>本文来自ChinaUnix博客，如果查看原文请点：</strong><a href="http://blog.chinaunix.net/u2/67555/showart_1110905.html" target="_blank"><span style="color: #075181;">http://blog.chinaunix.net/u2/67555/showart_1110905.html</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuijie.net.cn/?feed=rss2&amp;p=222</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Oracle从非归档模式变成归档模式</title>
		<link>http://www.cuijie.net.cn/?p=220</link>
		<comments>http://www.cuijie.net.cn/?p=220#comments</comments>
		<pubDate>Wed, 21 Jan 2009 07:33:52 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[归档]]></category>
		<category><![CDATA[非归档]]></category>

		<guid isPermaLink="false">http://www.cuijie.net.cn/?p=220</guid>
		<description><![CDATA[更改数据库的归档模式需要重新启动数据库，在mount模式下修改，简要步骤
1   以shutdown immediate 方式关闭数据库
2  启动实例到mount状态
3  更改运行模式并打开数据库
操作步骤：
1   登录数据库查看数据库的归档状态
     SQL&#62; archive log list;
     如果出现信息：
     Database log mode              No Archive Mode
     Automatic archival             Disabled
     则为非归档模式
2  关闭数据库
     SQL&#62;shutdown immediate;
3   启动数据库到mount状态
     SQL&#62;startup mount;
4   启动归档模式
     SQL&#62;alter database archivelog;       (非归档模式为：alter database noarchivelog)
  
5   打开数据库
     SQL&#62;alter database open;
      查看归档模式状态
     SQL&#62;archive log list
      如果出现信息：
      Database log mode              Archive Mode
      Automatic archival             Enabled
      成功改成归档模式
]]></description>
			<content:encoded><![CDATA[<p>更改<span style="text-decoration: underline;"><strong>数据库</strong></span>的归档模式需要重新启动数据库，在mount模式下修改，简要步骤<br />
1   以shutdown immediate 方式关闭数据库<br />
2  启动<span style="text-decoration: underline;"><strong>实例</strong></span>到mount状态<br />
3  更改运行模式并打开数据库</p>
<p>操作步骤：<br />
1   登录数据库查看数据库的归档状态<br />
     SQL&gt; archive log list;<br />
     如果出现信息：<br />
     Database log mode              No Archive Mode<br />
     Automatic archival             Disabled<br />
     则为非归档模式</p>
<p>2  关闭数据库<br />
     SQL&gt;shutdown immediate;</p>
<p>3   启动数据库到mount状态<br />
     SQL&gt;startup mount;</p>
<p>4   启动归档模式<br />
     SQL&gt;alter database archivelog;       (非归档模式为：alter database noarchivelog)<br />
  <br />
5   打开数据库<br />
     SQL&gt;alter database open;<br />
      查看归档模式状态<br />
     SQL&gt;archive log list<br />
      如果出现信息：<br />
      Database log mode              Archive Mode<br />
      Automatic archival             Enabled<br />
      成功改成归档模式</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuijie.net.cn/?feed=rss2&amp;p=220</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>openssl简明使用手册</title>
		<link>http://www.cuijie.net.cn/?p=213</link>
		<comments>http://www.cuijie.net.cn/?p=213#comments</comments>
		<pubDate>Wed, 07 Jan 2009 01:16:27 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[证书]]></category>

		<guid isPermaLink="false">http://www.cuijie.net.cn/?p=213</guid>
		<description><![CDATA[openssl简明使用手册
关键字: openssl
简要介绍了使用openssl来生成CA证书、申请证书、颁发证书以及撤销证书的过程
1. 首先建立CA密钥：
openssl genrsa -des3 -out ca.key 1024 (创建密钥)
chmod 400 ca.key (修改权限为仅root能访问)
openssl rsa -noout -text -in ca.key (查看创建的证书)
2. 利用CA密钥自签署CA证书：
openssl req -config openssl.cnf -new -x509 -days 3650 -key ca.key -out ca.crt
chmod 400 ca.crt (修改权限为仅root能访问)
openssl x509 -noout -text -in ca.crt (查看创建的证书)
3. 创建服务器证书签署申请：
openssl genrsa -des3 -out client.key 1024
chmod 400 client.key (修改权限为仅root能访问)
openssl rsa -noout -text -in client.key (查看创建的证书)
4. 利用证书签署申请生成请求：
openssl [...]]]></description>
			<content:encoded><![CDATA[<h3>openssl简明使用手册</h3>
<p><strong>关键字: openssl</strong></p>
<p>简要介绍了使用openssl来生成CA证书、申请证书、颁发证书以及撤销证书的过程</p>
<p>1. 首先建立CA密钥：</p>
<p>openssl genrsa -des3 -out ca.key 1024 (创建密钥)</p>
<p>chmod 400 ca.key (修改权限为仅root能访问)</p>
<p>openssl rsa -noout -text -in ca.key (查看创建的证书)</p>
<p>2. 利用CA密钥自签署CA证书：</p>
<p>openssl req -config openssl.cnf -new -x509 -days 3650 -key ca.key -out ca.crt</p>
<p>chmod 400 ca.crt (修改权限为仅root能访问)</p>
<p>openssl x509 -noout -text -in ca.crt (查看创建的证书)</p>
<p>3. 创建服务器证书签署申请：</p>
<p>openssl genrsa -des3 -out client.key 1024</p>
<p>chmod 400 client.key (修改权限为仅root能访问)</p>
<p>openssl rsa -noout -text -in client.key (查看创建的证书)</p>
<p>4. 利用证书签署申请生成请求：</p>
<p>openssl req -config openssl_client.cnf -new -key client.key -out client.csr</p>
<p>openssl req -noout -text -in client.csr (查看创建的请求)</p>
<p>5.进行证书签署：</p>
<p>这时候需要先设置一下openssl的配置文件。</p>
<p>modify openssl.cnf并根据这个配置文件创建相应的目录和文件。</p>
<p>在创建了serial文件之后，还需要添加当前的八进制的serial number,如：01</p>
<p>然后执行：</p>
<p>openssl ca -config openssl_client.cnf -keyfile ca.key -cert ca.crt -in client.csr -out client.pem -days 1095</p>
<p>这个certificate是BASE64形式的,要转成PKCS12才能装到IE,/NETSCAPE上.所以还要:</p>
<p>openssl pkcs12 -export -in client.pem -inkey client.key -out clinet.pfx</p>
<p>6.证书撤销：</p>
<p>openssl ca -keyfile ca.key -cert ca.crt -revoke client.pem</p>
<p>这时数据库被更新证书被标记上撤销的标志，需要生成新的证书撤销列表：</p>
<p>openssl ca -gencrl -keyfile ca.key -cert ca.crt -out crl/test.crl</p>
<p>查看证书撤销列表：</p>
<p>openssl crl -noout -text -in crl/test.crl</p>
<p>证书撤销列表文件要在WEB站点上可以使用，必须将crldays或crlhours和crlexts加到证书中：</p>
<p>openssl ca -gencrl -config /etc/openssl.cnf -crldays 7 -crlexts crl_ext -out crl/sopac-ca.crl</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuijie.net.cn/?feed=rss2&amp;p=213</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>linux下oracle自动启动脚本</title>
		<link>http://www.cuijie.net.cn/?p=201</link>
		<comments>http://www.cuijie.net.cn/?p=201#comments</comments>
		<pubDate>Fri, 26 Dec 2008 07:31:40 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[自动启动]]></category>

		<guid isPermaLink="false">http://www.cuijie.net.cn/?p=201</guid>
		<description><![CDATA[在Linux平台下安装好Oracle之后，Oracle服务是不会随着系统的启动而自动启动的。下面这个脚本即为在linux下面的自动启动Oracle脚本。
################################################################
#!/bin/bash
#
#by：cuijie
#http://www.cuijie.net.cn
#date：2008.12.26
#root用户登录
#
#
ORA_HOME=/u01/app/oracle/product/10.2.0/db_1
ORA_OWNER=oracle
#
case &#34;$1&#34; in
&#8217;start&#8217;)
echo -n &#34;Oracle 10g is starting&#8230;&#34;
su &#8211; $ORA_OWNER -c &#34;$ORA_HOME/bin/dbstart&#34; &#38;amp;amp;
su &#8211; $ORA_OWNER -c &#34;$ORA_HOME/bin/lsnrctl start&#34;
touch /var/log/oracle10g
echo
;;
&#8217;stop&#8217;)
echo -n &#34;Oracle 10g is stopting&#8230;&#34;
su &#8211; $ORA_OWNER -c &#34;$ORA_HOME/bin/dbshut&#34; &#38;amp;amp;
su &#8211; $ORA_OWNER -c &#34;$ORA_HOME/bin/lsnrctl stop&#34;
rm -f /var/log/oracle10g
echo
;;
&#8216;restart&#8217;)
echo -n &#34;Oracle 10g is restarting&#8230;&#34;
$0 stop
$0 start
;;
*)
echo &#34;Usage:oracle{start&#124;stop&#124;restart}&#34;
exit 1
esac
exit 0
################################################################
将上面的脚本复制粘贴到linux下面的合适位置处。如名字为Oracle10g.sh，然后chmod a+x Oracle10g.sh为该文件赋予可执行的属性。然后以oracle用户登录（root也可以）进入到
[oracle@test ~]$ cd $ORACLE_HOME/bin
vi打开dbstart,找到“ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle”，将这行替换为“ORACLE_HOME_LISTNER=$ORACLE_HOME”。不然会提示“failed to auto-start oracle net [...]]]></description>
			<content:encoded><![CDATA[<p>在Linux平台下安装好Oracle之后，Oracle服务是不会随着系统的启动而自动启动的。下面这个脚本即为在linux下面的自动启动Oracle脚本。<br />
################################################################<br />
#!/bin/bash<br />
#<br />
#by：cuijie<br />
#http://www.cuijie.net.cn<br />
#date：2008.12.26<br />
#root用户登录<br />
#<br />
#<br />
ORA_HOME=/u01/app/oracle/product/10.2.0/db_1<br />
ORA_OWNER=oracle<br />
#<br />
case &quot;$1&quot; in<br />
&#8217;start&#8217;)<br />
echo -n &quot;Oracle 10g is starting&#8230;&quot;<br />
su &#8211; $ORA_OWNER -c &quot;$ORA_HOME/bin/dbstart&quot; &amp;amp;amp;<br />
su &#8211; $ORA_OWNER -c &quot;$ORA_HOME/bin/lsnrctl start&quot;<br />
touch /var/log/oracle10g<br />
echo<br />
;;</p>
<p>&#8217;stop&#8217;)<br />
echo -n &quot;Oracle 10g is stopting&#8230;&quot;<br />
su &#8211; $ORA_OWNER -c &quot;$ORA_HOME/bin/dbshut&quot; &amp;amp;amp;<br />
su &#8211; $ORA_OWNER -c &quot;$ORA_HOME/bin/lsnrctl stop&quot;<br />
rm -f /var/log/oracle10g<br />
echo<br />
;;</p>
<p>&#8216;restart&#8217;)<br />
echo -n &quot;Oracle 10g is restarting&#8230;&quot;<br />
$0 stop<br />
$0 start<br />
;;</p>
<p>*)<br />
echo &quot;Usage:oracle{start|stop|restart}&quot;<br />
exit 1</p>
<p>esac<br />
exit 0<br />
################################################################<br />
将上面的脚本复制粘贴到linux下面的合适位置处。如名字为Oracle10g.sh，然后chmod a+x Oracle10g.sh为该文件赋予可执行的属性。然后以oracle用户登录（root也可以）进入到<br />
[oracle@test ~]$ cd $ORACLE_HOME/bin<br />
vi打开dbstart,找到“ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle”，将这行替换为“ORACLE_HOME_LISTNER=$ORACLE_HOME”。不然会提示“failed to auto-start oracle net listene using /ade/vikrkuma_new/oracle/bin/ tnslsnr”的错误。（也可以使用sed -i &#8217;s/ORACLE_HOME_LISTNER=\/ade\/vikrkuma_new\/oracle/ORACLE_HOME_LISTNER=\$ORACLE_HOME/&#8217; bin/dbstart替换命令来替换)</p>
<p>[root@test cuijie]# chmod a+x oracle10g.sh<br />
[root@test cuijie]# echo &#8220;/home/cuijie/oracle10g.sh start&#8221; /etc/rc.local<br />
这样在系统启动的时候就能够自动启动oracle了。另外如果想加入系统服务使用/sbin/chkconfig &#8211;add 也可以加入，这样使用service就可以像启动ssh等这类服务一样方便了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuijie.net.cn/?feed=rss2&amp;p=201</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQL*Loader使用指南</title>
		<link>http://www.cuijie.net.cn/?p=195</link>
		<comments>http://www.cuijie.net.cn/?p=195#comments</comments>
		<pubDate>Thu, 11 Dec 2008 03:49:40 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[sqlloader]]></category>

		<guid isPermaLink="false">http://www.cuijie.net.cn/?p=195</guid>
		<description><![CDATA[Oracle 的SQL*LOADER可以将外部数据加载到数据库表中。下面是SQL*LOADER的基本特点：
1）能装入不同数据类型文件及多个数据文件的数据
2）可装入固定格式，自由定界以及可度长格式的数据
3）可以装入二进制，压缩十进制数据
4）一次可对多个表装入数据
5）连接多个物理记录装到一个记录中
6）对一单记录分解再装入到表中
7）可以用 数对制定列生成唯一的KEY
8）可对磁盘或 磁带数据文件装入制表中
9）提供装入错误报告
10）可以将文件中的整型字符串，自动转成压缩十进制并装入列表中。
1.2控制文件
控制文件是用一种语言写的文本文件，这个文本文件能被SQL*LOADER识别。SQL*LOADER根据控制文件可以找到需要加载的数据。并且分析和解释这些数据。控制文件由三个部分组成：
l 全局选件，行，跳过的记录数等；
l INFILE子句指定的输入数据；
l 数据特性说明。
1.3输入文件
对 于 SQL*Loader, 除控制文件外就是输入数据。SQL*Loader可从一个或多个指定的文件中读出数据。如果 数据是在控制文件中指定，就要在控制文件中写成 INFILE * 格式。当数据固定的格式（长度一样）时且是在文件中得到时，要用INFILE &#8220;fix n&#8221;
load data
infile &#8216;example.dat&#8217; &#8220;fix 11&#8243;
into table example
fields terminated by &#8216;,&#8217; optionally enclosed by &#8216;&#8221;&#8216;
(col1 char(5),
col2 char(7))
example.dat:
001, cd, 0002,fghi,
00003,lmn,
1, &#8220;pqrs&#8221;,
0005,uvwx,
当数据是可变格式（长度不一样）时且是在文件中得到时，要用INFILE &#8220;var n&#8221;。如：

load data
infile &#8216;example.dat&#8217; &#8220;var 3&#8243;
into table example
fields terminated by &#8216;,&#8217; optionally enclosed by &#8216;&#8221;&#8216;
(col1 char(5),
col2 char(7))
example.dat:
009hello,cd,010world,im,
012my,name is,
1.4坏文件
坏文件包含那些被SQL*Loader拒绝的记录。被拒绝的记录可能是不符合要求的记录。
坏文件的名字由 SQL*Loader命令的BADFILE 参数来给定。
1.5日志文件及日志信息
当SQL*Loader 开始执行后，它就自动建立 [...]]]></description>
			<content:encoded><![CDATA[<p>Oracle 的SQL*LOADER可以将外部数据加载到数据库表中。下面是SQL*LOADER的基本特点：</p>
<p>1）能装入不同数据类型文件及多个数据文件的数据<br />
2）可装入固定格式，自由定界以及可度长格式的数据<br />
3）可以装入二进制，压缩十进制数据<br />
4）一次可对多个表装入数据<br />
5）连接多个物理记录装到一个记录中<br />
6）对一单记录分解再装入到表中<br />
7）可以用 数对制定列生成唯一的KEY<br />
8）可对磁盘或 磁带数据文件装入制表中<br />
9）提供装入错误报告<br />
10）可以将文件中的整型字符串，自动转成压缩十进制并装入列表中。</p>
<p>1.2控制文件<br />
控制文件是用一种语言写的文本文件，这个文本文件能被SQL*LOADER识别。SQL*LOADER根据控制文件可以找到需要加载的数据。并且分析和解释这些数据。控制文件由三个部分组成：</p>
<p>l 全局选件，行，跳过的记录数等；<br />
l INFILE子句指定的输入数据；<br />
l 数据特性说明。</p>
<p>1.3输入文件<br />
对 于 SQL*Loader, 除控制文件外就是输入数据。SQL*Loader可从一个或多个指定的文件中读出数据。如果 数据是在控制文件中指定，就要在控制文件中写成 INFILE * 格式。当数据固定的格式（长度一样）时且是在文件中得到时，要用INFILE &#8220;fix n&#8221;</p>
<p>load data<br />
infile &#8216;example.dat&#8217; &#8220;fix 11&#8243;<br />
into table example<br />
fields terminated by &#8216;,&#8217; optionally enclosed by &#8216;&#8221;&#8216;<br />
(col1 char(5),<br />
col2 char(7))<br />
example.dat:<br />
001, cd, 0002,fghi,<br />
00003,lmn,<br />
1, &#8220;pqrs&#8221;,<br />
0005,uvwx,</p>
<p>当数据是可变格式（长度不一样）时且是在文件中得到时，要用INFILE &#8220;var n&#8221;。如：</p>
<p><span id="more-195"></span></p>
<p>load data<br />
infile &#8216;example.dat&#8217; &#8220;var 3&#8243;<br />
into table example<br />
fields terminated by &#8216;,&#8217; optionally enclosed by &#8216;&#8221;&#8216;<br />
(col1 char(5),<br />
col2 char(7))<br />
example.dat:<br />
009hello,cd,010world,im,<br />
012my,name is,</p>
<p>1.4坏文件<br />
坏文件包含那些被SQL*Loader拒绝的记录。被拒绝的记录可能是不符合要求的记录。<br />
坏文件的名字由 SQL*Loader命令的BADFILE 参数来给定。</p>
<p>1.5日志文件及日志信息<br />
当SQL*Loader 开始执行后，它就自动建立 日志文件。日志文件包含有加载的总结，加载中的错误信息等。</p>
<p>控制文件语法<br />
控制文件的格式如下：</p>
<p>OPTIONS （ { [SKIP=integer] [ LOAD = integer ]<br />
[ERRORS = integer] [ROWS=integer]<br />
[BINDSIZE=integer] [SILENT=(ALL|FEEDBACK|ERROR|DISCARD) ] )<br />
LOAD[DATA]<br />
[ { INFILE | INDDN } {file | * }<br />
[STREAM | RECORD | FIXED length [BLOCKSIZE size]|<br />
VARIABLE [length] ]<br />
[ { BADFILE | BADDN } file ]<br />
{DISCARDS | DISCARDMAX} integr ]<br />
[ {INDDN | INFILE} . . . ]<br />
[ APPEND | REPLACE | INSERT ]<br />
[RECLENT integer]<br />
[ { CONCATENATE integer |<br />
CONTINUEIF { [THIS | NEXT] (start[: end])LAST }<br />
Operator { &#8217;string&#8217; | X &#8216;hex&#8217; } } ]<br />
INTO TABLE [user.]table<br />
[APPEND | REPLACE|INSERT]<br />
[WHEN condition [AND condition]&#8230;]<br />
[FIELDS [delimiter] ]<br />
(<br />
column {<br />
RECNUM | CONSTANT value |<br />
SEQUENCE ( { integer | MAX |COUNT} [, increment] ) |<br />
[POSITION ( { start [end] | * [ + integer] }<br />
) ]<br />
datatype<br />
[TERMINATED [ BY ] {WHITESPACE| [X] &#8216;character&#8217; } ]<br />
[ [OPTIONALLY] ENCLOSE[BY] [X]&#8216;charcter&#8217;]<br />
[NULLIF condition ]<br />
[DEFAULTIF condotion]<br />
}<br />
[ ,...]<br />
)<br />
[INTO TABLE...]<br />
[BEGINDATA]</p>
<p>1）要加载的数据文件：</p>
<p>1．INFILE 和INDDN是同义词，它们后面都是要加载的数据文件。如果用 * 则表示数据就在控制文件内。在INFILE 后可以跟几个文件。<br />
2．STRAM 表示一次读一个字节的数据。新行代表新物理记录（逻辑记录可由几个物理记录组成）。<br />
3．RECORD 使用宿主操作系统文件及记录管理系统。如果数据在控制文件中则使用这种方法。<br />
3． FIXED length 要读的记录长度为length字节，<br />
4． VARIABLE 被读的记录中前两个字节包含的长度，length 记录可能的长度。缺伤为8k字节。<br />
5． BADFILE和BADDN同义。Oracle 不能加载数据到数据库的那些记录。<br />
6． DISCARDFILE和DISCARDDN是同义词。记录没有通过的数据。<br />
7． DISCARDS和DISCARDMAX是同义词。Integer 为最大放弃的文件个数。</p>
<p>2）加载的方法：</p>
<p>1．APPEND 给表添加行。<br />
2．INSERT 给空表增加行（如果表中有记录则退出）。<br />
3．REPLACE 先清空表在加载数据。<br />
4． RECLEN 用于两种情况，1）SQLLDR不能自动计算记录长度，2）或用户想看坏文件的完整记录时。对于后一种，Oracle只能按常规把坏记录部分写到错误的地方。如果看整条记录，则可以将整条记录写到坏文件中。</p>
<p>3）指定最大的记录长度：</p>
<p>1． CONCATENATE 允许用户设定一个整数，表示要组合逻辑记录的数目。</p>
<p>4）建立逻辑记录：</p>
<p>1．THIS 检查当前记录条件，如果为真则连接下一个记录。<br />
2．NEXT 检查下一个记录条件。如果为真，则连接下一个记录到当前记录来。<br />
2． Start: end 表示要检查在THIS或NEXT字串是否存在继续串的列，以确定是否进行连接。如：continueif next(1-3)=&#8217;WAG&#8217; 或continueif next(1-3)=X&#8217;0d03if&#8217;</p>
<p>5）指定要加载的表：</p>
<p>1．INTO TABLE 要加的表名。<br />
2．WHEN 和select WHERE类似。用来检查记录的情况，如：when(3-5)=&#8217;SSM&#8217; and (22)=&#8217;*&#8221;</p>
<p>6）介绍并括起记录中的字段：</p>
<p>1． FIELDS给出记录中字段的分隔符，FIELDS格式为：</p>
<p>FIELDS [TERMIALED [BY] {WHITESPACE | [X] &#8216;charcter&#8217;} ]<br />
[ [ OPTIONALLY] ENCLOSE [BY] [X]&#8216;charcter&#8217; ]</p>
<p>TERMINATED 读完前一个字段即开始读下一个字段直到介绍。<br />
WHITESPACE 是指结束符是空格的意思。包括空格、Tab、换行符、换页符及回车符。如果是要判断但字符，可以用单引号括起，如X&#8217;1B&#8217;等。<br />
OPTIONALLY ENCLOSED 表示数据应由特殊字符括起来。也可以括在TERMINATED字符内。使用OPTIONALLY要同时用TERMINLATED。<br />
ENCLOSED 指两个分界符内的数据。如果同时用 ENCLOSED和TERMINAED ，则它们的顺序决定计算的顺序。</p>
<p>7）定义列：</p>
<p>column 是表列名。列的取值可以是：<br />
BECHUM 表示逻辑记录数。第一个记录为1,第2个记录为2。<br />
CONSTANT 表示赋予常数。<br />
SEQUENCE 表示序列可以从任意序号开始，格式为：<br />
SEQUENCE （ { integer | MAX |COUNT} [,increment]<br />
POSITION 给出列在逻辑记录中的位置。可以是绝对的，或相对前一列的值。格式为：<br />
POSITION ( {start[end] | * [+integer] } )<br />
Start 开始位置<br />
* 表示前字段之后立刻开始。<br />
+ 从前列开始向后条的位置数。</p>
<p>8）定义数据类型：<br />
可以定义14种数据类型：<br />
CHAR<br />
DATE<br />
DECIMAL EXTERNAL<br />
DECIMAL<br />
DOUBLE<br />
FLOAT<br />
FLOAT EXTERNAL<br />
GRAPHIC EXTERNAL<br />
INTEGER<br />
INTEGER EXTERNAL<br />
SMALLINT<br />
VARCHAR<br />
VARGRAPHIC</p>
<p>1．字符类型数据<br />
CHAR[ (length)] [delimiter]<br />
length缺省为 1.<br />
2.日期类型数据<br />
DATE [ ( length)]['date_format' [delimiter]<br />
使用to_date函数来限制。</p>
<p>3．字符格式中的十进制<br />
DECIMAL EXTERNAL [(length)] [delimiter]<br />
用于常规格式的十进制数（不是二进制=&gt; 一个位等于一个bit）。</p>
<p>4．压缩十进制格式数据<br />
DECIMAL （digtial [,divcision]）</p>
<p>5．双精度符点二进制<br />
DOUBLE</p>
<p>6．普通符点二进制<br />
FLOAT</p>
<p>7．字符格式符点数<br />
FLOAT EXTERNAL [ (length) ] [delimiter]</p>
<p>8．双字节字符串数据<br />
GRAPHIC [ (legth)]</p>
<p>9．双字节字符串数据<br />
GRAPHIC EXTERNAL[ (legth)]</p>
<p>10．常规全字二进制整数<br />
INTEGER</p>
<p>11．字符格式整数<br />
INTEGER EXTERNAL</p>
<p>12．常规全字二进制数据<br />
SMALLINT</p>
<p>13．可变长度字符串<br />
VARCHAR</p>
<p>14．可变双字节字符串数据<br />
VARGRAPHIC</p>
<p>2.2写控制文件CTL</p>
<p>1． 各数据文件的文件名;<br />
2．各数据文件格式;<br />
3．各数据文件里各数据记录字段的属性；<br />
4．接受数据的ORACLE表列的属性；<br />
5．数据定义；<br />
6．其它</p>
<p>数据文件的要求：</p>
<p>数据类型的指定<br />
CHAR 字符型<br />
INTEGER EXTERNAL 整型<br />
DECIMAL EXTERNAL 浮点型</p>
<p>3.1数据文件的内容</p>
<p>可以在OS下的一个文件；或跟在控制文件下的具体数据。数据文件可以是：<br />
1、 二进制与字符格式：LOADER可以把二进制文件读（当成字符读）列表中<br />
2、 固定格式：记录中的数据、数据类型、 数据长度固定。<br />
3、 可变格式：每个记录至少有一个可变长数据字段，一个记录可以是一个连续的字符串。<br />
数据段的分界（如姓名、年龄）如用“，”作字段的 分 ；用，&#8221;’作数据<br />
括号等<br />
4、 LOADER可以使用多个连续字段的物理记录组成一个逻辑记录，记录文件运行情况文件：包括以下内容：<br />
1、 运行日期：软件版本号<br />
2、 全部输入，输出文件名；对命令行的展示信息，补充信息，<br />
3、 对每个装入信息报告：如表名，装入情况；对初始装入， 加截入或更新装<br />
入的选择情况，栏信息<br />
4、 数据错误报告：错误码；放弃记录报告<br />
5、 每个装X报告：装入行；装入行数，可能跳过行数；可能拒绝行数；可能放<br />
弃行数等<br />
6、 统计概要：使用空间（包大小，长度）；读入记录数，装入记录数，跳过记<br />
录数；拒绝记录数，放弃记录数；运行时间等。</p>
<p>sql load的一点小总结 <br />
 <br />
sqlldr userid=lgone/tiger control=a.ctl <br />
LOAD DATA <br />
INFILE &#8216;t.dat&#8217; // 要导入的文件 <br />
// INFILE &#8216;tt.date&#8217; // 导入多个文件 <br />
// INFILE * // 要导入的内容就在control文件里 下面的BEGINDATA后面就是导入的内容 <br />
 <br />
INTO TABLE table_name // 指定装入的表 <br />
BADFILE &#8216;c:\bad.txt&#8217; // 指定坏文件地址 <br />
 <br />
************* 以下是4种装入表的方式 <br />
APPEND // 原先的表有数据 就加在后面 <br />
// INSERT // 装载空表 如果原先的表有数据 sqlloader会停止 默认值 <br />
// REPLACE // 原先的表有数据 原先的数据会全部删除 <br />
// TRUNCATE // 指定的内容和replace的相同 会用truncate语句删除现存数据 <br />
 <br />
************* 指定的TERMINATED可以在表的开头 也可在表的内部字段部分 <br />
FIELDS TERMINATED BY &#8216;,&#8217; OPTIONALLY ENCLOSED BY &#8216;&#8221;&#8216; <br />
// 装载这种数据: 10,lg,&#8221;"&#8221;lg&#8221;"&#8221;,&#8221;lg,lg&#8221; <br />
// 在表中结果: 10 lg &#8220;lg&#8221; lg,lg <br />
// TERMINATED BY X &#8216;09&#8242; // 以十六进制格式 &#8216;09&#8242; 表示的 <br />
// TERMINATED BY WRITESPACE // 装载这种数据: 10 lg lg <br />
 <br />
TRAILING NULLCOLS ************* 表的字段没有对应的值时允许为空 <br />
 <br />
************* 下面是表的字段 <br />
( <br />
col_1 , col_2 ,col_filler FILLER // FILLER 关键字 此列的数值不会被装载 <br />
// 如: lg,lg,not 结果 lg lg <br />
) <br />
// 当没声明FIELDS TERMINATED BY &#8216;,&#8217; 时 <br />
// ( <br />
// col_1 [interger external] TERMINATED BY &#8216;,&#8217; , <br />
// col_2 [date "dd-mon-yyy"] TERMINATED BY &#8216;,&#8217; , <br />
// col_3 [char] TERMINATED BY &#8216;,&#8217; OPTIONALLY ENCLOSED BY &#8216;lg&#8217; <br />
// ) <br />
// 当没声明FIELDS TERMINATED BY &#8216;,&#8217;用位置告诉字段装载数据 <br />
// ( <br />
// col_1 position(1:2), <br />
// col_2 position(3:10), <br />
// col_3 position(*:16), // 这个字段的开始位置在前一字段的结束位置 <br />
// col_4 position(1:16), <br />
// col_5 position(3:10) char(8) // 指定字段的类型 <br />
// ) <br />
 <br />
BEGINDATA // 对应开始的 INFILE * 要导入的内容就在control文件里 <br />
10,Sql,what <br />
20,lg,show <br />
 <br />
//////////// 注意begindata后的数值前面不能有空格 <br />
 <br />
1 ***** 普通装载 <br />
LOAD DATA <br />
INFILE * <br />
INTO TABLE DEPT <br />
REPLACE <br />
FIELDS TERMINATED BY &#8216;,&#8217; OPTIONALLY ENCLOSED BY &#8216;&#8221;&#8216; <br />
(DEPTNO, <br />
DNAME, <br />
LOC <br />
) <br />
BEGINDATA <br />
10,Sales,&#8221;"&#8221;USA&#8221;"&#8221; <br />
20,Accounting,&#8221;Virginia,USA&#8221; <br />
30,Consulting,Virginia <br />
40,Finance,Virginia <br />
50,&#8221;Finance&#8221;,&#8221;",Virginia // loc 列将为空 <br />
60,&#8221;Finance&#8221;,,Virginia // loc 列将为空 <br />
 <br />
2 ***** FIELDS TERMINATED BY WHITESPACE 和 FIELDS TERMINATED BY x&#8217;09&#8242; 的情况 <br />
LOAD DATA <br />
INFILE * <br />
INTO TABLE DEPT <br />
REPLACE <br />
FIELDS TERMINATED BY WHITESPACE <br />
&#8211; FIELDS TERMINATED BY x&#8217;09&#8242; <br />
(DEPTNO, <br />
DNAME, <br />
LOC <br />
) <br />
BEGINDATA <br />
10 Sales Virginia <br />
 <br />
3 ***** 指定不装载那一列 <br />
LOAD DATA <br />
INFILE * <br />
INTO TABLE DEPT <br />
REPLACE <br />
FIELDS TERMINATED BY &#8216;,&#8217; OPTIONALLY ENCLOSED BY &#8216;&#8221;&#8216; <br />
( DEPTNO, <br />
FILLER_1 FILLER, // 下面的 &#8220;Something Not To Be Loaded&#8221; 将不会被装载 <br />
DNAME, <br />
LOC <br />
) <br />
BEGINDATA <br />
20,Something Not To Be Loaded,Accounting,&#8221;Virginia,USA&#8221; <br />
 <br />
4 ***** position的列子 <br />
LOAD DATA <br />
INFILE * <br />
INTO TABLE DEPT <br />
REPLACE <br />
( DEPTNO position(1:2), <br />
DNAME position(*:16), // 这个字段的开始位置在前一字段的结束位置 <br />
LOC position(*:29), <br />
ENTIRE_LINE position(1:29) <br />
) <br />
BEGINDATA <br />
10Accounting Virginia,USA <br />
 <br />
5 ***** 使用函数 日期的一种表达 TRAILING NULLCOLS的使用 <br />
LOAD DATA <br />
INFILE * <br />
INTO TABLE DEPT <br />
REPLACE <br />
FIELDS TERMINATED BY &#8216;,&#8217; <br />
TRAILING NULLCOLS // 其实下面的ENTIRE_LINE在BEGINDATA后面的数据中是没有直接对应 <br />
// 的列的值的 如果第一行改为 10,Sales,Virginia,1/5/2000,, 就不用TRAILING NULLCOLS了 <br />
(DEPTNO, <br />
DNAME &#8220;upper(:dname)&#8221;, // 使用函数 <br />
LOC &#8220;upper(:loc)&#8221;, <br />
LAST_UPDATED date &#8216;dd/mm/yyyy&#8217;, // 日期的一种表达方式 还有&#8217;dd-mon-yyyy&#8217; 等 <br />
ENTIRE_LINE &#8220;:deptno||:dname||:loc||:last_updated&#8221; <br />
) <br />
BEGINDATA <br />
10,Sales,Virginia,1/5/2000 <br />
20,Accounting,Virginia,21/6/1999 <br />
30,Consulting,Virginia,5/1/2000 <br />
40,Finance,Virginia,15/3/2001 <br />
 <br />
6 ***** 使用自定义的函数 // 解决的时间问题 <br />
create or replace <br />
function my_to_date( p_string in varchar2 ) return date <br />
as <br />
type fmtArray is table of varchar2(25); <br />
 <br />
l_fmts fmtArray := fmtArray( &#8216;dd-mon-yyyy&#8217;, &#8216;dd-month-yyyy&#8217;, <br />
&#8216;dd/mm/yyyy&#8217;, <br />
&#8216;dd/mm/yyyy hh24:mi:ss&#8217; ); <br />
l_return date; <br />
begin <br />
for i in 1 .. l_fmts.count <br />
loop <br />
begin <br />
l_return := to_date( p_string, l_fmts(i) ); <br />
exception <br />
when others then null; <br />
end; <br />
EXIT when l_return is not null; <br />
end loop; <br />
 <br />
if ( l_return is null ) <br />
then <br />
l_return := <br />
new_time( to_date(&#8217;01011970&#8242;,&#8217;ddmmyyyy&#8217;) + 1/24/60/60 * <br />
p_string, &#8216;GMT&#8217;, &#8216;EST&#8217; ); <br />
end if; <br />
 <br />
return l_return; <br />
end; <br />
/ <br />
 <br />
LOAD DATA <br />
INFILE * <br />
INTO TABLE DEPT <br />
REPLACE <br />
FIELDS TERMINATED BY &#8216;,&#8217; <br />
TRAILING NULLCOLS <br />
(DEPTNO, <br />
DNAME &#8220;upper(:dname)&#8221;, <br />
LOC &#8220;upper(:loc)&#8221;, <br />
LAST_UPDATED &#8220;my_to_date( :last_updated )&#8221; // 使用自定义的函数 <br />
) <br />
BEGINDATA <br />
10,Sales,Virginia,01-april-2001 <br />
20,Accounting,Virginia,13/04/2001 <br />
30,Consulting,Virginia,14/04/2001 12:02:02 <br />
40,Finance,Virginia,987268297 <br />
50,Finance,Virginia,02-apr-2001 <br />
60,Finance,Virginia,Not a date <br />
 <br />
7 ***** 合并多行记录为一行记录 <br />
LOAD DATA <br />
INFILE * <br />
concatenate 3 // 通过关键字concatenate 把几行的记录看成一行记录 <br />
INTO TABLE DEPT <br />
replace <br />
FIELDS TERMINATED BY &#8216;,&#8217; <br />
(DEPTNO, <br />
DNAME &#8220;upper(:dname)&#8221;, <br />
LOC &#8220;upper(:loc)&#8221;, <br />
LAST_UPDATED date &#8216;dd/mm/yyyy&#8217; <br />
) <br />
BEGINDATA <br />
10,Sales, // 其实这3行看成一行 10,Sales,Virginia,1/5/2000 <br />
Virginia, <br />
1/5/2000 <br />
// 这列子用 continueif list=&#8221;,&#8221; 也可以 <br />
告诉sqlldr在每行的末尾找逗号 找到逗号就把下一行附加到上一行 <br />
 <br />
LOAD DATA <br />
INFILE * <br />
continueif this(1:1) = &#8216;-&#8217; // 找每行的开始是否有连接字符 &#8211; 有就把下一行连接为一行 <br />
// 如 -10,Sales,Virginia, <br />
// 1/5/2000 就是一行 10,Sales,Virginia,1/5/2000 <br />
// 其中1:1 表示从第一行开始 并在第一行结束 还有continueif next 但continueif list最理想 <br />
INTO TABLE DEPT <br />
replace <br />
FIELDS TERMINATED BY &#8216;,&#8217; <br />
(DEPTNO, <br />
DNAME &#8220;upper(:dname)&#8221;, <br />
LOC &#8220;upper(:loc)&#8221;, <br />
LAST_UPDATED date &#8216;dd/mm/yyyy&#8217; <br />
) <br />
BEGINDATA // 但是好象不能象右面的那样使用 <br />
-10,Sales,Virginia, -10,Sales,Virginia, <br />
1/5/2000 1/5/2000 <br />
-40, 40,Finance,Virginia,13/04/2001 <br />
Finance,Virginia,13/04/2001<br />
 <br />
8 ***** 载入每行的行号 <br />
 <br />
load data <br />
infile * <br />
into table t <br />
replace <br />
( seqno RECNUM //载入每行的行号 <br />
text Position(1:1024)) <br />
BEGINDATA <br />
fsdfasj //自动分配一行号给载入 表t 的seqno字段 此行为 1 <br />
fasdjfasdfl // 此行为 2 &#8230; <br />
 <br />
9 ***** 载入有换行符的数据 <br />
注意: unix 和 windows 不同 <a href="file://%5c%5cn/">\\n</a> &amp; /n <br />
&amp;lt; 1 &gt; 使用一个非换行符的字符 <br />
LOAD DATA <br />
INFILE * <br />
INTO TABLE DEPT <br />
REPLACE <br />
FIELDS TERMINATED BY &#8216;,&#8217; <br />
TRAILING NULLCOLS <br />
(DEPTNO, <br />
DNAME &#8220;upper(:dname)&#8221;, <br />
LOC &#8220;upper(:loc)&#8221;, <br />
LAST_UPDATED &#8220;my_to_date( :last_updated )&#8221;, <br />
COMMENTS &#8220;replace(:comments,&#8217;\n&#8217;,chr(10))&#8221; // replace 的使用帮助转换换行符 <br />
) <br />
BEGINDATA <br />
10,Sales,Virginia,01-april-2001,This is the Sales\nOffice in Virginia <br />
20,Accounting,Virginia,13/04/2001,This is the Accounting\nOffice in Virginia <br />
30,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting\nOffice in Virginia <br />
40,Finance,Virginia,987268297,This is the Finance\nOffice in Virginia <br />
 <br />
&amp;lt; 2 &gt; 使用fix属性 <br />
LOAD DATA <br />
INFILE demo17.dat &#8220;fix 101&#8243; <br />
INTO TABLE DEPT <br />
REPLACE <br />
FIELDS TERMINATED BY &#8216;,&#8217; <br />
TRAILING NULLCOLS <br />
(DEPTNO, <br />
DNAME &#8220;upper(:dname)&#8221;, <br />
LOC &#8220;upper(:loc)&#8221;, <br />
LAST_UPDATED &#8220;my_to_date( :last_updated )&#8221;, <br />
COMMENTS <br />
) <br />
demo17.dat <br />
10,Sales,Virginia,01-april-2001,This is the Sales <br />
Office in Virginia <br />
20,Accounting,Virginia,13/04/2001,This is the Accounting <br />
Office in Virginia <br />
30,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting <br />
Office in Virginia <br />
40,Finance,Virginia,987268297,This is the Finance <br />
Office in Virginia <br />
 <br />
// 这样装载会把换行符装入数据库 下面的方法就不会 但要求数据的格式不同 <br />
 <br />
LOAD DATA <br />
INFILE demo18.dat &#8220;fix 101&#8243; <br />
INTO TABLE DEPT <br />
REPLACE <br />
FIELDS TERMINATED BY &#8216;,&#8217; OPTIONALLY ENCLOSED BY &#8216;&#8221;&#8216; <br />
TRAILING NULLCOLS <br />
(DEPTNO, <br />
DNAME &#8220;upper(:dname)&#8221;, <br />
LOC &#8220;upper(:loc)&#8221;, <br />
LAST_UPDATED &#8220;my_to_date( :last_updated )&#8221;, <br />
COMMENTS <br />
) <br />
demo18.dat <br />
10,Sales,Virginia,01-april-2001,&#8221;This is the Sales <br />
Office in Virginia&#8221; <br />
20,Accounting,Virginia,13/04/2001,&#8221;This is the Accounting <br />
Office in Virginia&#8221; <br />
30,Consulting,Virginia,14/04/2001 12:02:02,&#8221;This is the Consulting <br />
Office in Virginia&#8221; <br />
40,Finance,Virginia,987268297,&#8221;This is the Finance <br />
Office in Virginia&#8221; <br />
 <br />
&amp;lt; 3 &gt; 使用var属性 <br />
LOAD DATA <br />
INFILE demo19.dat &#8220;var 3&#8243; <br />
// 3 告诉每个记录的前3个字节表示记录的长度 如第一个记录的 071 表示此记录有 71 个字节 <br />
INTO TABLE DEPT <br />
REPLACE <br />
FIELDS TERMINATED BY &#8216;,&#8217; <br />
TRAILING NULLCOLS <br />
(DEPTNO, <br />
DNAME &#8220;upper(:dname)&#8221;, <br />
LOC &#8220;upper(:loc)&#8221;, <br />
LAST_UPDATED &#8220;my_to_date( :last_updated )&#8221;, <br />
COMMENTS <br />
) <br />
demo19.dat <br />
07110,Sales,Virginia,01-april-2001,This is the Sales <br />
Office in Virginia <br />
07820,Accounting,Virginia,13/04/2001,This is the Accounting <br />
Office in Virginia <br />
08730,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting <br />
Office in Virginia <br />
07140,Finance,Virginia,987268297,This is the Finance <br />
Office in Virginia <br />
 <br />
&amp;lt; 4 &gt; 使用str属性 <br />
// 最灵活的一中 可定义一个新的行结尾符 win 回车换行 : chr(13)||chr(10) <br />
 <br />
此列中记录是以 a|\r\n 结束的 <br />
select utl_raw.cast_to_raw(&#8217;|'||chr(13)||chr(10)) from dual; <br />
结果 7C0D0A <br />
 <br />
LOAD DATA <br />
INFILE demo20.dat &#8220;str X&#8217;7C0D0A&#8217;&#8221; <br />
INTO TABLE DEPT <br />
REPLACE <br />
FIELDS TERMINATED BY &#8216;,&#8217; <br />
TRAILING NULLCOLS <br />
(DEPTNO, <br />
DNAME &#8220;upper(:dname)&#8221;, <br />
LOC &#8220;upper(:loc)&#8221;, <br />
LAST_UPDATED &#8220;my_to_date( :last_updated )&#8221;, <br />
COMMENTS <br />
) <br />
demo20.dat <br />
10,Sales,Virginia,01-april-2001,This is the Sales <br />
Office in Virginia| <br />
20,Accounting,Virginia,13/04/2001,This is the Accounting <br />
Office in Virginia| <br />
30,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting <br />
Office in Virginia| <br />
40,Finance,Virginia,987268297,This is the Finance <br />
Office in Virginia| <br />
 <br />
============================================================================== <br />
象这样的数据 用 nullif 子句 <br />
 <br />
10-jan-200002350Flipper seemed unusually hungry today. <br />
10510-jan-200009945Sdivad over three meals. <br />
 <br />
id position(1:3) nullif id=blanks // 这里可以是blanks 或者别的表达式 <br />
// 下面是另一个列子 第一行的 1 在数据库中将成为 null <br />
LOAD DATA <br />
INFILE * <br />
INTO TABLE T <br />
REPLACE <br />
(n position(1:2) integer external nullif n=&#8217;1&#8242;, <br />
v position(3:8) <br />
) <br />
BEGINDATA <br />
1 10 <br />
20lg <br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; <br />
 <br />
如果是英文的日志 格式，可能需要修改环境变量 nls_lang or nls_date_format</p>
<p>===============================================================</p>
<p>Oracle SQL*Loader 使用指南（转载）</p>
<p>SQL*Loader是Oracle数据库导入外部数据的一个工具.它和DB2的Load工具相似,但有更多的选择，它支持变化的加载模式，可选的加载及多表加载.<br />
如何使用 SQL*Loader 工具<br />
我们可以用Oracle的sqlldr工具来导入数据。例如:<br />
sqlldr scott/tiger control=loader.ctl<br />
控制文件(loader.ctl) 将加载一个外部数据文件（含分隔符). loader.ctl如下:<br />
load data<br />
infile &#8216;c:\data\mydata.csv&#8217;<br />
into table emp<br />
fields terminated by &#8220;,&#8221; optionally enclosed by &#8216;&#8221;&#8216;<br />
( empno, empname, sal, deptno )</p>
<p>mydata.csv 如下:<br />
10001,&#8221;Scott Tiger&#8221;, 1000, 40<br />
10002,&#8221;Frank Naude&#8221;, 500, 20<br />
下面是一个指定记录长度的示例控制文件。&#8221;*&#8221; 代表数据文件与此文件同名，即在后面使用BEGINDATA段来标识数据。<br />
load data<br />
infile *<br />
replace<br />
into table departments<br />
( dept position (02:05) char(4),<br />
deptname position (08:27) char(20)<br />
)<br />
begindata<br />
COSC COMPUTER SCIENCE<br />
ENGL ENGLISH LITERATURE<br />
MATH MATHEMATICS<br />
POLY POLITICAL SCIENCE</p>
<p>Unloader这样的工具<br />
Oracle 没有提供将数据导出到一个文件的工具。但是，我们可以用SQL*Plus的select 及 format 数据来输出到一个文件：<br />
set echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on<br />
spool oradata.txt<br />
select col1 || &#8216;,&#8217; || col2 || &#8216;,&#8217; || col3<br />
from tab1<br />
where col2 = &#8216;XYZ&#8217;;<br />
spool off</p>
<p>另外，也可以使用使用 UTL_FILE PL/SQL 包处理:<br />
rem Remember to update initSID.ora, utl_file_dir=&#8217;c:\oradata&#8217; parameter<br />
declare<br />
fp utl_file.file_type;<br />
begin<br />
fp := utl_file.fopen(&#8217;c:\oradata&#8217;,'tab1.txt&#8217;,'w&#8217;);<br />
utl_file.putf(fp, &#8216;%s, %s\n&#8217;, &#8216;TextField&#8217;, 55);<br />
utl_file.fclose(fp);<br />
end;<br />
/</p>
<p>当然你也可以使用第三方工具，如SQLWays ,TOAD for Quest等。</p>
<p>加载可变长度或指定长度的记录<br />
如：<br />
LOAD DATA<br />
INFILE *<br />
INTO TABLE load_delimited_data<br />
FIELDS TERMINATED BY &#8220;,&#8221; OPTIONALLY ENCLOSED BY &#8216;&#8221;&#8216;<br />
TRAILING NULLCOLS<br />
( data1,<br />
data2<br />
)<br />
BEGINDATA<br />
11111,AAAAAAAAAA<br />
22222,&#8221;A,B,C,D,&#8221;</p>
<p>下面是导入固定位置（固定长度）数据示例：<br />
LOAD DATA<br />
INFILE *<br />
INTO TABLE load_positional_data<br />
( data1 POSITION(1:5),<br />
data2 POSITION(6:15)<br />
)<br />
BEGINDATA<br />
11111AAAAAAAAAA<br />
22222BBBBBBBBBB</p>
<p>跳过数据行：<br />
可以用 &#8220;SKIP n&#8221; 关键字来指定导入时可以跳过多少行数据。如：<br />
LOAD DATA<br />
INFILE *<br />
INTO TABLE load_positional_data<br />
SKIP 5<br />
( data1 POSITION(1:5),<br />
data2 POSITION(6:15)<br />
)<br />
BEGINDATA<br />
11111AAAAAAAAAA<br />
22222BBBBBBBBBB</p>
<p>导入数据时修改数据：<br />
在导入数据到数据库时，可以修改数据。注意，这仅适合于常规导入，并不适合 direct导入方式.如：<br />
LOAD DATA<br />
INFILE *<br />
INTO TABLE modified_data<br />
( rec_no &#8220;my_db_sequence.nextval&#8221;,<br />
region CONSTANT &#8216;31&#8242;,<br />
time_loaded &#8220;to_char(SYSDATE, &#8216;HH24:MI&#8217;)&#8221;,<br />
data1 POSITION(1:5) &#8220;:data1/100&#8243;,<br />
data2 POSITION(6:15) &#8220;upper(:data2)&#8221;,<br />
data3 POSITION(16:22)&#8221;to_date(:data3, &#8216;YYMMDD&#8217;)&#8221;<br />
)<br />
BEGINDATA<br />
11111AAAAAAAAAA991201<br />
22222BBBBBBBBBB990112</p>
<p>LOAD DATA<br />
INFILE &#8216;mail_orders.txt&#8217;<br />
BADFILE &#8216;bad_orders.txt&#8217;<br />
APPEND<br />
INTO TABLE mailing_list<br />
FIELDS TERMINATED BY &#8220;,&#8221;<br />
( addr,<br />
city,<br />
state,<br />
zipcode,<br />
mailing_addr &#8220;decode(:mailing_addr, null, :addr, :mailing_addr)&#8221;,<br />
mailing_city &#8220;decode(:mailing_city, null, :city, :mailing_city)&#8221;,<br />
mailing_state<br />
)</p>
<p>将数据导入多个表：<br />
如:<br />
LOAD DATA<br />
INFILE *<br />
REPLACE<br />
INTO TABLE emp<br />
WHEN empno != &#8216; &#8216;<br />
( empno POSITION(1:4) INTEGER EXTERNAL,<br />
ename POSITION(6:15) CHAR,<br />
deptno POSITION(17:18) CHAR,<br />
mgr POSITION(20:23) INTEGER EXTERNAL<br />
)<br />
INTO TABLE proj<br />
WHEN projno != &#8216; &#8216;<br />
( projno POSITION(25:27) INTEGER EXTERNAL,<br />
empno POSITION(1:4) INTEGER EXTERNAL<br />
)</p>
<p>导入选定的记录：<br />
如下例： (01) 代表第一个字符, (30:37) 代表30到37之间的字符:<br />
LOAD DATA<br />
INFILE &#8216;mydata.dat&#8217; BADFILE &#8216;mydata.bad&#8217; DISCARDFILE &#8216;mydata.dis&#8217;<br />
APPEND<br />
INTO TABLE my_selective_table<br />
WHEN (01) &lt;&gt; &#8216;H&#8217; and (01) &lt;&gt; &#8216;T&#8217; and (30:37) = &#8216;19991217&#8242;<br />
(<br />
region CONSTANT &#8216;31&#8242;,<br />
service_key POSITION(01:11) INTEGER EXTERNAL,<br />
call_b_no POSITION(12:29) CHAR<br />
)</p>
<p>导入时跳过某些字段：<br />
可用 POSTION(x:y) 来分隔数据. 在Oracle8i中可以通过指定 FILLER 字段实现。FILLER 字段用来跳过、忽略导入数据文件中的字段.如：<br />
LOAD DATA<br />
TRUNCATE INTO TABLE T1<br />
FIELDS TERMINATED BY &#8216;,&#8217;<br />
( field1,<br />
field2 FILLER,<br />
field3<br />
)</p>
<p>导入多行记录：<br />
可以使用下面两个选项之一来实现将多行数据导入为一个记录:</p>
<p>CONCATENATE: &#8211; use when SQL*Loader should combine the same number of physical records together to form one logical record.</p>
<p>CONTINUEIF &#8211; use if a condition indicates that multiple records should be treated as one. Eg. by having a &#8216;#&#8217; character in column 1.</p>
<p>SQL*Loader 数据的提交：<br />
一般情况下是在导入数据文件数据后提交的。<br />
也可以通过指定 ROWS= 参数来指定每次提交记录数。</p>
<p>提高 SQL*Loader 的性能：<br />
1) 一个简单而容易忽略的问题是，没有对导入的表使用任何索引和/或约束(主键)。如果这样做，甚至在使用ROWS=参数时，会很明显降低数据库导入性能。<br />
2) 可以添加 DIRECT=TRUE来提高导入数据的性能。当然，在很多情况下，不能使用此参数。<br />
3) 通过指定 UNRECOVERABLE选项，可以关闭数据库的日志。这个选项只能和 direct 一起使用。<br />
4) 可以同时运行多个导入任务.</p>
<p>常规导入与direct导入方式的区别：<br />
常规导入可以通过使用 INSERT语句来导入数据。Direct导入可以跳过数据库的相关逻辑(DIRECT=TRUE)，而直接将数据导入到数据文件中。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuijie.net.cn/?feed=rss2&amp;p=195</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
