2008年1月31日星期四

Oracle学习笔记20080129

环境和shell变量
$ variable-name = value 或 ${variable-name = value}
注意,等号两边可以有空格。如果取值包含空格,必须用双引号括起来。shell变量可以用大小写字母。
表14-1变量设置时的不同模式
Variable-name=value 设置实际值到variable-name
Variable-name+value如果设置了variable-name,则重设其值
Variable-name:?value 如果未设置variable-name,显示未定义用户错误信息
Variable-name?value 如果未设置variable-name,显示系统错误信息
Variable-name:=value 如果未设置variable-name,设置其值Variable-name:-value 同上,但是取值并不设置到variable-name,可以被替换

显示变量直接echo,清除变量unset,可将多个变量结合使用
有时要测试是否已设置或初始化变量。如果未设置或初始化,就可以使用另一值。
此命令格式为:
$ {variable : -value }意即如果设置了变量值,则使用它,如果未设置,则取新值。
$ { variable : =value }测试变量是否取值,如果未设置,则返回一空串。
方法如下:
$ { variable : +value }使用下述方法初始化变量为空字符串。v
ariable = " "$DETINATION = " "

如果设置变量时,不想再改变其值,可以将之设置为只读方式。如果有人包括用户本人想要改变它,则返回错误信息。
格式如下:variable - name = valuereadonly variable-name
设置环境变量VARIABLE - NAME = value;export VARIABLE-NAME在两个命令之间是一个分号,也可以这样写:VARIABLE - NAME = valueExport VARIABLE-NAME用env查看所有环境变量,同样是用unset命令清楚环境变量

CDPATH改变目录路径变量,保留一系列由冒号隔开的路径名,用于cd命令。如果设置了CDPATH,cd一个目录时,首先查找CDPATH,如果CDPATH指明此目录,则此目录成为当前工作目录。
例子如下:$ CDPATH=:/home/dave/bin:/usr/local/apps;export CDPATH.
如果要$ cd appscd命令首先在C D PAT H中查找目录列表,如果发现a p p s,则它成为当前工作目录。
特定变量参数
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
$$ 脚本运行的当前进程I D号
$! 后台运行的最后一个进程的进程I D号
$@ 与$ #相同,但是使用时加引号,并在引号中返回每个参数
$- 显示s h e l l使用的当前选项,与s e t命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

..那啥,又是草草略过总觉得不知其所以然

引号的重要性表
15-1 shell引用类型
" " 双引号 ` 反引号' ' 单引号 \ 反斜线
上次打了一段话做实验,发觉不行,原因是我用的是单引号而不是反引号,在实际过程中echo "中的命令可以使用反引号"
基础编程脚本不是复杂的程序,它是按行解释的。脚本第一行总是以#!/bin/sh开始,这段脚本通知shell使用系统上的Bourne shell解释器。
条件测试测试文件状态test一般有两种格式,即:test condition或[condition]使用方括号时,要注意在条件两边加上空格。
测试文件状态的条件表达式很多,但是最常用的可在表17-1中查到。
表17-1 文件状态测试
- d 目录
- s 文件长度大于0、非空
- f 正规文件
- w 可写
- L 符号连接
- u 文件有suid位设置
- r 可读
- x 可执行
使用两种方法测试文件scores.txt是否可写并用最后退出状态测试是否成功。记住, 0表示成功,其他为失败。
测试时使用逻辑操作符测试文件状态是否为OK,但是有时要比较两个文件状态
。shell提供三种逻辑操作完成此功能。-
a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。

字符串测试是错误捕获很重要的一部分,特别在测试用户输入或比较变量时尤为重要。字符串测试有5种格式。
test "string"
test string_operator "string"
test "string" string_operator "string" [string_operator string] [string string_operator string]这里,string_operator可为:= 两个字符串相等。!= 两个字符串不等。
-z 空串。-n 非空串。
测试数值测试数值可以使用许多操作符,一般格式如下:"number"numeric_operator"number"或者["number"numeric_operator"number"]numeric_operator可为:
-eq 数值相等。
-ne 数值不相等。
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。

expr用法expr命令一般用于整数值,但也可用于字符串。
一般格式为:expr argument operator argumentexpr也是一个手工命令行计数器。
退出状态在书写正确脚本前,大概讲一下退出状态。任何命令进行时都将返回一个退出状态。如果要观察其退出状态,使用最后状态命令:$ echo $?要退出当前进程,shell提供命令exit,一般格式为:exit n
注一笔,脚本本身加入退出脚本值是一个好的编程习惯

流控制if、then、else语句提供条件测试。测试可以基于各种条件。例如文件的权限、长度、数值或字符串的比较。这些测试返回值或者为真(0),或者为假(1)。基于此结果,可以进行相关操作。在讲到条件测试时已经涉及了一些测试语法。case语句允许匹配模式、单词或值。一旦模式或值匹配,就可以基于这个匹配条件作其他声明。
for 循环 每次处理依次列表内信息,直至循环耗尽。
Until 循环 此循环语句不常使用,u n t i l循环直至条件为真。条件部分在循环末尾部分。
While 循环 w h i l e循环当条件为真时,循环执行,条件部分在循环头。

i f语句测试条件,测试条件返回真( 0)或假(1)后,可相应执行一系列语句。 i f语句结对错误检查非常有用。其格式为:if 条件1then 命令1elif 条件2then 命令2else 命令3if
if语句可用来测试传入脚本中参数的个数。使用特定变量 $ #,表示调用参数的个数。可以测试所需参数个数与调用参数个数是否相等。
有时需要知道脚本运行是交互模式(终端模式)还是非交互模式(cron或at)。脚本也许需要这个信息以决定从哪里取得输入以及输出到哪里,使用test命令并带有- t选项很容易确认这一点。如果t e s t返回值为1,则为交互模式。

2008年1月29日星期二

Oracle学习笔记20080128

表7-1 基本元字符集及其含义
^ 只匹配行首
$ 只匹配行尾
* 一个单字符后紧跟
*,匹配0个或多个此单字符
[ ] 匹配[ ]内字符。可以是一个单字符,也可以是字符序列。可以使用 - 表示[ ]内字符序列范围,如用[1-5]代替[12345]\ 只用来屏蔽一个元字符的特殊含义。因为有时在shell中一些元字符有 特殊含义。\可以使其失去应有意义.
只匹配任意单字符pattern\{n\} 只用来匹配前面pattern出现次数。n为次数pattern\{n,\} m 只含义同上,但次数最少为npattern\{n,m\} 只含义同上,但pattern出现次数在n与m之间
实例:A\{2\}B出现的AAB,A\{4\}B出现的是AAAAB或AAAAAAAAB

表7-2经常使用的正则表达式举例
^ 对行首
$ 对行尾
^[the] 对以the开头行
[Ss]igna[lL] 对匹配单词signal、signaL、Signal、SignaL[Ss]igna[lL]\. 对同上,但加一句点[mayMAY] 对包含may大写或小写字母的行
^USER$ 对只包含USER的行[tty]$ 对以tty结尾的行\. 对带句点的行^d..x..x..x 对对用户、用户组及其他用户组成员有可执行权限的目录
^[^l] 对排除关联目录的目录列表
[.*0] 对0之前或之后加任意字符
[000*] 对000或更多个
[iI] 对大写或小写I[iI][nN] 对大写或小写i或n
[^$] 对空行[^.*$] 对匹配行中任意字符串
^......$ 对包括6个字符的行[a-zA-Z] 对任意单字符[a-z][a-z]* 对至少一个小写字母
[^0-9\$] 对非数字或美元标识
[^0-0A-Za-z] 对非数字或字母[123] 对1到3中一个数字
[Dd]evice 对单词device或DeviceDe..ce 对前两个字母为De,后跟两个任意字符,最后为ce\^q 对以^q开始行^.$ 对仅有一个字符的行^\.[0-9][0-9] 对以一个句点和两个数字开始的行'"Device"' 对单词deviceDe[Vv]ice\. 对单词Device或device[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\}对日期格式dd-mm-yyyy[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}对IP地址格式nnn.nnn.nnn.nnn[^.*$]对匹配任意行

tr用来从标准输入中通过替换或删除操作进行字符转换。
tr主要用于删除文件中控制字符或进行字符转换。
使用tr时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。
带有最常用选项的t r命令格式为:
tr-c-d-s["string1_to_translate_from"]["string2_to_translate_to"] file
这里:-c 用字符串1中字符集的补集替换此字符集,要求字符集为 A S C I I。
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
Input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。
字符范围:[a-z] a-z内的字符组成的字符串。[A-Z] A-Z内的字符组成的字符串。[0-9] 数字串。/octal 一个三位的八进制数,对应有效的ASCII字符。[O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。
例子,去除重复的字$tr -s "[a-z]" < oops.txt

表12-1 tr中特定控制字符的不同表达方式
速记符 含义 八进制方式
\a Ctrl-G 铃声 \007
\b Ctrl-H 退格符 \010
\f Ctrl-L 走行换页 \014
\n Ctrl-J 新行 \012
\r Ctrl-M 回车 \015
\t Ctrl-I tab键 \011
\v Ctrl-X \030

说实话tr没看懂多少- -

登录环境,在配置oracle的时候我们在oracle用户目录下配置了$oracle_home和$oracle_base当然字母都是大写,在.profile或者.bashrc下面都可以,其他的就也不多讲了stty一般格式为:stty name character
最常用的stty命令使用在下述设置上:
名称 键 含义
intr ^C 终止进程
echo 打开echo功能
-echo 关闭echo功能eof
^D 文件尾;注销kill
^Y 删除一行start
^Q 滚动屏幕文本stop
^S 停止滚动屏幕文本
stty的一个可用选项为:stty -g。此选项允许以可读格式保存stty现有设置,便于以后重置回stty。
环境和shell变量

2008年1月28日星期一

Oracle20080124

awk略过。。实在是看不下去。。下次补上具体的,但是从进程来看,似乎和上面的grep差不多,但是一个是查询一个是显示还是拥有域的概念,多用来显示sql的报表类。今天看的是echo,今天就看一章吧,手头上还有个设计稿。。汗。。为难我了
echo
echo string
echo命令有很多功能,其中最常用的是下面几个:
\c 不换行。
\f 进纸。
\t 跳格。
\n 换行。
你可以echo任何东西,linux系统用-n选项禁止echo输出换行,必须使用-e选项才能使转义符生效:如果想把一个字符串输出到文件中,使用重定向符号 >。或者可以追加到一个文件的末尾,使用重定向符号 >>这意味着不覆盖原有的内容.
echo命令输出这样的字符串:“/dev/rmt0”,那么我们只要在引号前面加上反斜杠\即可:
$ echo "\"/dev/rmt0"\"
可以使用read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。如果只指定了一个变量,那么read将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车。
它的一般形式为:read varible1 varible2 ... 例如
$read name tu lei
$echo $name
tu lei

第一个单词将被赋给第一个变量,而由于变量数少于单词数,字符串后面的部分将被全部赋给第二个变量。可以使用多个变量名进行定义。
cat
$ cat myfile more或$ cat myfile pgcat命令的一般形式为:
cat [options] filename1 ... filename2 ...
cat命令最有用的选项就是:-v 显示控制字符
重定义文件至另一文件
$ cat myfile1 myfile2 myfile3 > bigfile
$cat > myfile最后按结束输入即可
管道可以通过管道把一个命令的输出传递给另一个命令作为输入。
管道用竖杠 表示。它的一般形式为:命令1 命令2

tee命令作用可以用字母T来形象地表示。它把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。如果希望在看到输出的同时,也将其存入一个文件,那么这个命令再合适不过了。
它的一般形式为:tee -a files
其中,- a表示追加到文件末尾。如果不想把输出重定向到文件中,可以不这样做,而是把它定向到某个终端上。
在下面的例子中,一个警告被发送到系统控制台上,表明一个磁盘清理进程即将运行。
$ echo "stand-by disk cleanup starting in 1 minute" tee /dev/console可以让不同的命令使用同一个日志文件,不过不要忘记使用 - a选项。
标准输入标准输入是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。
标准输出标准输出是文件描述符1。它是命令的输出,缺省是屏幕,也可以是文件。
标准错误标准错误是文件描述符2。这是命令错误的输出,缺省是屏幕,同样也可以是文件。
command > filename 把把标准输出重定向到一个新文件中
command >> filename 把把标准输出重定向到一个文件中(追加)
command 1 > fielname 把把标准输出重定向到一个文件中
command > filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中
command 2 > filename 把把标准错误重定向到一个文件中
command 2 >> filename 把把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中 (追加)
command <>filename2 把c o m m a n d命令以f i l e n a m e文件作为标准输入,以 f i l e n a m e 2文件作为标准输出
command < filename 把command命令以filename文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到delimiter分界符
command <&m 把把文件描述符m作为标准输入
command >&m 把把标准输出重定向到文件描述符m中
command <&- 把关闭标准输入
可以指定命令的标准输入。
在awk一章就会遇到这样的情况。
下面给出一个这样的例子:
$ sort < name.txt在上面的命令中,sort命令的输入是采用重定向的方式给出的,不过也可以直接把相应的文件作为该命令的参数:
$ sort name.txt
在上面的例子中,还可以更进一步地通过重定向为sort命令指定一个输出文件name.out。这样屏幕上将不会出现任何信息(除了错误信息以外):
$ sort name.out在发送邮件时,可以用重定向的方法发送一个文件中的内容。在下面的例子中,用户louise将收到一个邮件,其中含有文件contents.txt中的内容:
$ mail louise < contents.txt
定向操作符command <<>>filename<>123
>345
>MAYDAY
$vim filename123345
MAYDAY的作用就在于结束了该文章的结束
结合错误,上面提到了正确为1,错误为2,那么可以做个条件判断
$cat filename filename1 1>filename.out 2>error.out
exec命令可以用来替代当前shell;换句话说,并没有启动子shell。使用这一命令时任何现有环境都将会被清除,并重新启动一个shell。它的一般形式为:exec command其中的command通常是一个shell脚本。

2008年1月23日星期三

Oracle学习笔记20080122

sed。。没用过。。
先这么学者吧sed是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道的文本。
sed可以做些什么呢?别忘了,Vi(Ubuntu下为vim)也是一个文本编辑器。sed可以随意编辑小或大的文件,有许多sed命令用来编辑、删除,并允许做这项工作时不在现场。sed一次性处理所有改变,因而变得很有效,对用户来讲,最重要的是节省了时间
调用sed有三种方式:
在命令行键入命令;
将sed命令插入脚本文件,然后调用sed;
将sed命令插入脚本文件,并使sed脚本可执行。

使用sed命令行格式为:sed [选项] sed命令 输入文件。
记住在命令行使用sed命令时,实际命令要加单引号。
sed也允许加双引号。使用sed脚本文件,格式为:
sed [选项] -f sed脚本文件
输入文件要使用第一行具有sed命令解释器的sed脚本文件,其格式为:
sed脚本文件 [选项] 输入文件不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件,sed从标准输入中接受输入,一般是键盘或重定向结果。
sed选项如下:
n 不打印;sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。
p 命令可以用来打印编辑行。
c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条sed命令,此选项无用,但指定它也没有关系。
f 如果正在调用sed脚本文件,使用此选项。此选项通知sed一个脚本文件支持所有的sed命令,例如:sed -f myscript.sed input_file,这里myscript.sed即为支持sed命令的文件。

使用sed在文件中查询文本的方式sed浏览输入文件时,缺省从第一行开始,有两种方式定位文本:
1) 使用行号,可以是一个简单数字,或是一个行号范围。
2) 使用正则表达式,怎样构建这些模式请参见第 7章。

x x为一行号,如1x,y 表示行号范围从x到y,如2,5表示从第2行到第5行/pattern/ 查询包含模式的行。例如/disk/或/[a-z]/ /pattern/pattern/ 查询包含两个模式的行。
例如/disk/disks/pattern/,x 在给定行号上查询包含模式的行。
如/ribbon/,3x,/pattern/ 通过行号和模式查询匹配行。3./vdu/x,y! 查询不包含指定行号x和y的行。1,2!

sed编辑命令
p 打印匹配行
= 显示文件行号
a\ 在定位行号后附加新文本信息
i\ 在定位行号后插入新文本信息
d 删除定位行
c\ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制A S C I I代码等价的控制字符
{ } 在定位行执行的命令组n 从另一个文件中读文本下一行,并附加在下一行g 将模式2粘贴到/pattern n/y 传送字符n 延续到下一输入行;允许跨行的模式匹配语句

print命令格式为[address [,address] P。显示文本行必须提供sed命令行号。
address表示行数,单个'2'p,多行则是'1,3p' 只打第二行则是sed -n '2'p ...打单个单词则需要
sed -n '/.../'p filename还可以使用sed -n '4,/.../'p filename 在4行查询一个字字符则需要
sed -n '/\$/'p filename这个字符要打印整个文件,只需将行范围设为第一行到最后一行1,$。
$意为最后一行。sed -n '1,$p' filename匹配任意字母,后跟任意字母的 0次或多次重复,并以ing结尾,模式为/.*ing /。可以使用这个模式查询以ing结尾的任意单词。
sed -n '/.*ing' filename要打印文件第一行,使用行号:sed -n '1p' filename和sed -n '1'p filename效果是一样的
要打印最后一行,使用$。$是代表最后一行的元字符。sed -n '$p' filename和sed -n '$'p filename貌似效果也是一样的
要打印行号,使用等号=。打印模式匹配的行号,使用格式/pattern/ =。如果只打印行号及匹配行,必须使用两个sed命令,并使用e选项。
第一个命令打印模式匹配行,第二个使用=选项打印行号,格式为sed -n -e /pattern/p -e /pattern/=。
要附加文本,使用符号a\,可以将指定文本一行或多行附加到指定行。(这个没有例子发觉比较难)
要创建脚本文件append.sed,输入下列命令:
$pg append.sed#!/bin/sed -f/compand/ a\Then suddenly it happend
推出保存,增加可执行
$chomd u+x append.sed
运行
$append.sed quote.txt
你会发觉第二行有上面then这句话现在查看其具体功能。
第一行是sed命令解释行。脚本在这一行查找sed以运行命令,这里定位在/bin。
第二行以/company /开始,这是附加操作起始位置。a\通知sed这是一个附加操作,首先应插入一个新行。第三行是附加操作要加入到拷贝的实际文本。输出显示附加结果。如果要保存输出,重定向到一个文件。
将sed结果写入其他文件
[address [,address]]w filename$sed '1,2 w filedt' quote.txt

处理文件时,sed允许从另一个文件中读文本,并将其文本附加在当前文件。此命令放在模式匹配行后,格式为:address r filename
有时需要在模式匹配首次出现后退出sed,以便执行其他处理脚本。
退出命令格式为:address q

sed格式为:[address,[address ] ] l‘l’意为列表。一般情况下要列出整个文件,而不是模式匹配行,因此使用 l要从第一到最后一行。模式范围1,$即为此意。
cat -v filename可查看文件有没控制字符,有的话是乱码然后可用sed查看

实例:
假设在一个文档中filename有许多的
12313##DISP##45.13^M
00323##DISP##23.11^M
01299##DISP##34.16^M
可采取以下动作:
1) 用一个空格替换所有的(##)符号。
2) 删除起始域中最前面的0(00)。
3) 删除行尾控制字符(^M)。
任务1。 删除所有的#字符很容易,可以使用全局替换命令。这里用一个空格替换两个或更多的#符号。$sed 's/##*//g' filename
任务2。删除所有行首的0。使用^符号表示模式从行首开始,^0*表示行首任意个0。模式s/^0*//g设置替换部分为空,即为删除模式,正是要求所在。$sed 's/^0*//g' filename
任务3。 最后去除行尾 ^ M符号,为此需做全局替换。设置替换部分为空。模式为:‘s/^m/ /g’,注意‘^M’,这是一个控制字符。要产生控制字符(^M),需遵从前面产生F 键同样的处理过程。步骤如下;键入 sed s/,然后按住键和v键,释放v键,再按住^键,并保持键不动,再释放两个键,最后按键。下面命令去除行尾^M字符。$sed 's/^M//g'filename

以上可以合并
$cat filename sed 's/^0*//g' sed 's/##*//g' sed 's/^M//g'
当从数据库中执行语句输出时,一旦有了输出结果,脚本即可做进一步处理。通常先做一些整理,下面是一个sql查询结果。
database size date created
-----------------------------
gosouth 2244 12/11/97
trisud 5632 8/9/99

为了使用上述输出信息做进一步自动处理,需要知道所存数据库名称,为此需执行以下操作:
1) 使用s/-*/ /g删除横线------。
2) 使用/^$/d删除空行。
3) 使用$d删除最后一行
4) 使用1d删除第一行。
5) 使用awk {print $1}打印第一列。
命令如下$cat filename sed 's/--*//g' sed '/^$/d' sed '$d' sed '1d' awk '{print $1}'
距离去除行首数字$sed 's/^[0-9]//g' filename数字后添加passwd$sde 's/[0-9][0-9]*/& Passwd/g' filename

要从命令行中向sed传值,值得注意的是用双引号,否则功能不执行。
快速命令集
's/\.$//g'删除以句点结尾行
'-e/abcd/d'删除包含abcd的行
's/[][][]*/[]/g'删除一个以上空格,用一个空格代替
's/^[][]*//g'删除行首空格
's/\.[][]*/[]/g'删除句点后跟两个或更多空格,代之以一个空格
'/^$/d'删除空行
's/^.//g'删除第一个字符
's/COL\(...\)//g'删除紧跟COL的后三个字母
's/^\///g'从路径中删除第一个\
's/[]/[]//g'删除所有空格并用tab键替代
'S/^[]//g'删除行首所有tab键
's/[]*//g'删除所有tab键

下一张文件的分割和合并

首先提上来的是sort,在ubuntu下sort了一下,发觉还真有sort命令的一般格式为:
sort -cmu -o output_file [other options] +pos1 +pos2 input_files

下面简要介绍一下sort的参数:
-c 测试文件是否已经分类。
-m 合并两个分类文件。
-u 删除所有复制行。
-o 存储sort结果的输出文件名。

其他选项有:
-b 使用域进行分类时,忽略第一个空格。
-n 指定分类是域上的数字分类。
-t 域分隔符;用非空格或t a b键分隔域。
-r 对分类次序或比较求逆。
+n n为域号。使用此域号开始分类。
n n为域号。在分类比较时忽略此域,一般与+n一起使用。
post1 传递到m,n。m为域号,n为开始分类字符数;

例如4,6意即以第5域分类,从第7个字符开始。

缺省情况下,sort认为一个空格或一系列空格为分隔符。要加入其他方式分隔,使用-t选项。
sort执行时,先查看是否为域分隔设置了- t选项,如果设置了,则使用它来将记录分隔成域0、域1等等;如果未设置,用空格代替。缺省时sort将整个行排序,指定域号的情况例外。
使用sort -c 查看sort文件是否按某种顺序分类基本的用
sort -t: filename
分类求逆sort -t: -r filename
按指定域分类sort -t: +1 filename 0
定义域从0开始算数值域分类sort -t:+3n filename
数值键的键位值唯一性分类sort -u filename去除重复的使用k
做分类键排序sort -t: -r -k4 -k1 filenamesort +0 -2 +3该命令以域0分类,忽略2,在用3分类可使用值得特定位数sort -t:+1.2 filename

排序后可使用head和tail进行罗列
合并sort -m sorted_file1 sorted_file2使用-m+o。将这个文件并入已存在的分类文件video.sort,要以名称域进行分类,实际上没有必要加入+o,但为了保险起见,还是加上的好。sort -t: -m +0 filename1 filename

系统sort$cat passwd sort -t: +0 awk -F":" '{print $1}'

uniq的用法
uniq用来从一个文本文件中去除或禁止重复行。一般uniq假定文件已分类,并且结果正确。
命令一般格式:uniq -u d c -f input-file output-file
其选项含义:
-u 只显示不重复行。
-d 只显示有重复数据行,每种重复行只显示其中一行
-c 打印每一重复行出现次数。
-f n为数字,前n个域被忽略。一些系统不识别-f选项,这时替代使用-n。

join的用法
join用来将来自两个分类文本文件的行连在一起。
join[options] input-file1 input-file2an n为一数字,用于连接时从文件 n中显示不匹配行。
例如,-a1显示第一个文件的不匹配行,-a2为从第二个文件中显示不匹配行。
o n.m n为文件号,m为域号。
1.3表示只显示文件1第三域,每个n,m必须用逗号分隔,如1.3,2.1。j n m n为文件号,m为域号。使用其他域做连接域。t 域分隔符。用来设置非空格或tab键的域分隔符。例如,指定冒号做域分隔符 - t:。

使用1.1显示第一个文件第一个域,2.2显示第二个文件第二个域,其间用逗号分隔。
$join -o 1.1,2.2 filename,filename2

使用-jn m进行其他域连接,例如用文件1域3和文件域2做连接键,命令为:
join -j1 3 -j2 2 file1 file2

cut用法cut
用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。
cut一般格式为:
cut[options]file1file2下面介绍其可用
选项:
-c list指定剪切字符数。
-f field指定剪切域数。
-d 指定与空格和tab键不同的域分隔符。
-c 用来指定剪切范围,如下所示:-c1,5-7剪切第1个字符,然后是第5到第7个字符。-c1-50剪切前50个字符。-f格式与-c相同。-f1,5剪切第1域,第5域。-f1,10-12剪切第1域,第10域到第12域。
使用域分隔符文件中使用冒号“:”为域分隔符,故可用- d选项指定冒号,如- d:。如果有意观察第3域,可以使用-f3。要抽取I D域。可使用命令如下:$cut -d: -f3 pers

paste格式为;
paste -d -s -file1 file2-d
类似于t选项后面制定分割标签,-s为横向粘帖选项含义如下:-d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @。-s 将每个文件合并成行而不是按行粘贴。- 使用标准输入。例如ls -l paste ,意即只在一列上显示输出。
paste命令还有一个很有用的选项(-)。意即对每一个(-),从标准输入中读一次数据。使用空格作域分隔符,以一个4列格式显示目录列表。方法如下:ls paste -d" " - - - -按一行四列ls paste -d" " -按一行一列

split用来将大文件分割成小文件。有时文件越来越大,传送这些文件时,首先将其分割可能更容易。使用vi或其他工具诸如sort时,如果文件对于工作缓冲区太大,也会存在一些问题。因此有时没有选择余地,必须将文件分割成小的碎片。
split命令一般格式:split -output_file-size input-filename output-filename

grep一般格式为:
grep [选项]基本正则表达式[文件]这里基本正则表达式可为字符串。

在grep命令中输入字符串参数时,最好将其用双引号括起来。在调用变量时,也应该使用双引号,在调用模式匹配时,应使用单引号
常用的grep选项有:
-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信
-v 显示不包含匹配文本的所有行。

如果要在当前目录下所有.doc文件中查找字符串“sort”,方法如下:
$ grep "sort"*.doc或在所有文件中查询单词“sort it”$ grep "sort it" *

自己的例子
$grep -c "acl" squid.conf$137返回值
$grep "acl" squid.conf$grep -n "acl" squid.conf显示带的行数
$grep -v "acl" squid.conf显示非查询行数

在精确匹配下可以加入表示点击tab键使用grep抽取精确匹配的一种更有效方式是在抽取字符串后加 \>。
缺省情况下,grep是大小写敏感的,如要查询大小写不敏感字符串,必须使用 - i开关。
模式查找可以套用[],其非可以使用^记号,根据[]有很多种变化可以使用不一一详解
出现几率抽取包含数字4至少重复出现两次的所有行,方法如下$grep '4\{2,\}' filename

grep命令加-E参数,这一扩展允许使用扩展模式匹配。例如,要抽取城市代码为 219或216,方法如下:$grep -E '219216' filename
空行结合使用^和$可查询空行。使用-n参数显示实际行数:
$ grep '^$' squid.conf
$ grep -c '^$' squid.conf

特殊字符需要'\特殊字符'类名
类 等价的正则表达式 类 等价的正则表达式
[[:upper:]] [A-Z] [[:alnum:]] [0-9a-zA-Z]
[[:lower:]] [a-z] [[:space:]] 空格或tab键
[[:digit:]] [0-9] [[:alpha:]] [a-zA-Z]

如果要查询目录列表中的目录,方法如下
:$ls -l grep '^d'如果在一个目录中查询不包含目录的所有文件,方法如下:
$ls -l grep '^[^d]'要查询其他用户和其他用户组成员有可执行权限的目录集合,方法如下:
$ls -l grep '^d.....x..x'

后面继续awk...发觉D盘有这么个文章,但是似乎从来没看过。。
不知道是不是我放的有三种方式调用awk,
第一种是命令行方式,如:awk [-F field-separator] 'commands' input-file(s)上面例子中,[ - F域分隔符]是可选的,因为a w k使用空格作为缺省的域分隔符,因此如果要浏览域间有空格的文本,不必指定这个选项,但如果要浏览诸如 passwd文件,此文件各域以冒号作为分隔符,则必须指明-F选项(类似于前面所讲的-d:和-t:)
第二种方法是将所有awk命令插入一个文件,并使awk程序可执行,然后用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用它。
第三种方式是将所有的awk命令插入一个单独文件,然后调用:awk -f awk-script-file input-file(s)

2008年1月22日星期二

Oracle学习笔记20080121

为了提交你刚刚创建的crontab文件,可以把这个新创建的文件作为cron命令的参数:
$ crontab davecron
这样可以提交该文件
$ crontab -e可编辑
crontab文件(进去后发觉编辑界面简直难受的要死,还是vim好)
$ crontab -l可列出crontab crontab -l > ...可将文件输出到别的地方

在编辑crontab的时候可以加入执行语句
30 3 1 * * /bin/find -name "core" -exec rm {} \;该语句的意思是每个月1号3点半把core文件找出来然后删掉(ubuntu下不知道,难道需要只能切换用户或者直接root?)

删除crontab 直接$crontab -r
如果不小心误删了crontab文件,假设你在自己的$HOME目录下还有一个备份,那么可以将其拷贝到/var/spool/cron/,其中是用户名。
如果由于权限问题无法完成拷贝,可以用:
$ crontab 其中是你在$HOME目录中副本的文件名。
我建议你在自己的$HOME目录中保存一个该文件的副本。这就是为什么有些系统文档建议不要直接编辑crontab文件,而是编辑该文件的一个副本,然后重新提交新的文件。有些crontab的变体有些怪异,所以在使用crontab命令时要格外小心。如果遗漏了任何选项,crontab可能会打开一个空文件,或者看起来像是个空文件。这时敲delete键退出,不要按<>,否则你将丢失crontab文件。

at命令允许用户向cron守护进程提交作业,使其在稍后的时间运行。
也可通过/etc/at.allow和/etc/at.deny来控制用户运用at命令
at命令的基本形式为:
at [-f script] [-m -l -r] [time] [date]
其中,-f script 是所要提交的脚本或命令。
-l 列出当前所有等待运行的作业。
atq命令具有相同的作用。
-r 清除作业。为了清除某个作业,还要提供相应的作业标识(ID);有些UNI X变体只接受atrm作为清除命令。
-m 作业完成后给用户发邮件。
time at命令的时间格式非常灵活;可以是H、HH.HHMM、HH:MM或H:M,其中H和M分别是小时和分钟。还可以使用a.m.或p.m .。
date 日期格式可以是月份数或日期数,而且at命令还能够识别诸如today、tom orrow这样的词。
at的使用方法如果你想提交若干行的命令,可以在at命令后面跟上日期/时间并回车。
然后就进入了at命令提示符,这时只需逐条输入相应的命令,然后按退出。
$at 21:10
at>find / -name "passwd" -print
at>
就是

如果希望向at命令提交一个shell脚本,使用其命令行方式即可。在提交脚本时使用-f选项。
例子:
$at 3.00pm tomorrow -f /apps/bin/db_table.sh还可以使用echo命令向
at命令提交作业:$ echo find /etc -name "passwd" -print at now +1 minute

$at -l后其中,第一行是作业标识,后面是作业运行的日期/时间。最后一列a代表at。还可以使用atq命令来完成同样的功能,它是at命令的一个链接。当提交一个作业后,它就被拷贝到/var/spool/at目录中,准备在要求的时间运行。

清除作业的命令格式为:atrm [job no] 或at -r [job no]
当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。
可以使用&命令把作业放到后台执行。
该命令的一般形式为:命令 &
不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:
command >out.file 2>&1 &
在后台提交命令现在我们运行一个find命令,查找名为“srm.conf”的文件,并把所有标准输出和错误输出重定向到一个叫作find.dt的文件中:
$find /etc -name "srm.conf" -print > find.dt 2>&1 &
[1] 27015
27015是命令提交后系统给的进程号,当该作业完成时,按任意键(一般是回车键)就会出现一个提示:
当一个命令在后台执行的时候,可以用提交命令时所得到的进程号来监控它的运行。
在前面的例子中,我们可以按照提交ps1时得到的进程号,用ps命令和grep命令列出这个进程:
例如$ps x grep 28305如果不支持x命令可以$ps -ef grep 28305

杀死后台进程kill -signal [process_number]
nohup如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户之后继续运行相应的进程.Nohup就是不挂起的意思(nohang up)。
该命令的一般形式为:nohup command &
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1
在上面的例子中,输出被重定向到myout.file文件中。

一次提交几个作业如果希望一次提交几个命令,最好能够把它们写入到一个shell脚本文件中,并用nohup命令来执行它。例如,下面的所有命令都用管道符号连接在一起;我们可以把这些命令存入一个文件,并使该文件可执行。

第四章文件名
*好可以匹配任何字符
?比配单个字符
[...]和[!...]使用[ . . . ]可以用来匹配方括号[ ]中的任何字符。
在这一方法中,还可以使用一个横杠-来连接两个字母或数字,以此来表示一个范围。
在下面的例子中,列出了以i或o开头的文件名:类似于ls [io]*

$ ls [A-Z]*查看A-Z的字母
$ ls .*查看隐藏文件

使用&&使用&&的一般形式为:
命令1 && 命令2这种命令执行方式相当地直接。&&左边的命令(命令1)返回真(即返回0,成功被执行)后,&&右边的命令(命令2)才能够被执行;换句话说,“如果这个命令执行成功 &&那么执行这个命令”。举例:
$ mv /apps/bin /apps/dev/bin && rm -r /apps/bin

使用 的一般形式为:
命令1 命令2的作用有一些不同。如果 左边的命令(命令1)未执行成功,那么就执行 右边的命令(命令2);或者换句话说,“如果这个命令执行失败了 那么就执行这个命令”。
在这里不只可以使用系统命令;
这里我们首先对month _ end.txt文件执行了一个名为comet的shell脚本,如果该脚本未执行成功,该shell将结束。$ comet month_end.txt exit

如果希望把几个命令合在一起执行,shell提供了两种方法。既可以在当前shell也可以在子shell中执行一组命令。为了在当前shell中执行一组命令,可以用命令分隔符隔开每一个命令,并把所有的命令用圆括号()括起来。
它的一般形式为:(命令1;命令2;. . .)如果使用{ }来代替(),那么相应的命令将在子shell而不是当前shell中作为一个整体被执行,只有在{ }中所有命令的输出作为一个整体被重定向时,其中的命令才被放到子shell中执行,否则在当前shell执行。它的一般形式为:{命令1;命令2;. . . }
$comet month_end (echo "Hello"mail user;exit)
------------------------------
清早吧早特别霉,链条拖链,还够不到,到公司拿家伙下楼修,天那个冷啊,还得把盖泥板拆下来修。

2008年1月21日星期一

Oracle学习笔记20080118

做个rman的backup脚本,发觉对shell研究不是很深,纯建立脚本以后chmod a+x backup.ramn后,还差点,转战shell下,虽然一直想把shell好好用,但是好像没什么进展。
今天开始看shell 当然首先出现的还是ls,最常用的是ls -l,ls -la包含的信息:
total 4232:该目录中所有文件所占的空间。
- r w x r- x r- x:这是该文件的权限位。
前面的横杠有:
d 目录。
l 符号链接(指向另一个文件)。
s 套接字文件。
b 块设备文件。
c 字符设备文件。
p 命名管道文件。
- 普通文件,或者更准确地说,不属于以上几种类型的文件。
如果除去最前面的横杠,这里一共是9个字符,他们对应9个权限位。通过这些权限位,可以设定用户对文件的访问权限。这9个字符可以分组:
r w x:文件属主权限 这是前面三位r- x:同组用户权限 这是中间三位r- x:其他用户权限 这是最后三位
1 该文件硬链接的数目。
root 文件的属主。root 文件的属主r o o t所在的缺省组(也叫做r o o t )。
3578 用字节来表示的文件长度,记住,不是K字节!Oct 14 04:44 文件的更新时间。
dmesg 文件名。
- rw- r-- r-- 文件类型为普通文件 文件属主可以读、写 同组用户可以读
其他用户可以读r-- --- --- 文文件属主可读,但不能写或执行
r-- r-- --- 文文件属主和同组用户(一般来说,是文件属主所在的缺省组)可读
r-- r-- r- - 文任何用户都可读,但不能写或执行
rwx r-- r- - 文文件属主可读、写、执行,同组用户和其他用户只可读
rwx r-x --- 文文件属主可读、写、执行,同组用户可读、执行
rwx r-x r- x 文文件属主可读、写、执行,同组用户和其他用户可读、执行
rw- rw- --- 文文件属主和同组用户可读、写
rw- rw- r- - 文文件属主和同组用户可读、写,其他用户可读
rw- rw- --- 文文件属主和同组用户及其他用户读可以读、写,慎用这种权限设置,因为任何用户都可以写入该文件

chmod [who] operator [permission]
filenamewho的含义是:
u 文件属主权限。g 同组用户权限。o 其他用户权限。a 所有用户(文件属主、同组用户及其他用户)。
operator的含义:
+ 增加权限。- 取消权限。= 设定权限。
permission的含义:r 读权限。w 写权限。x 执行权限。s 文件属主和组set-ID。t 粘性位*。l 给文件加锁,使其他用户无法访问。

chmod应用举例
chmod a-x myfile rw- rw- rw- 收回所有用户的执行权限
chmod og-w myfile rw- r-- r- - 收回同组用户和其他用户的写权限
chmod g+w myfile rw- rw- r- - 赋予同组用户写权限
chmod u+x myfile rwx rw- r- - 赋予文件属主执行权限
chmod go+x myfile rwx rwx r- x 赋予同组用户和其他用户执行权限

同时可以用绝对模式八进制数含义八进制数含义
0400文件属主可读0010同组用户可执行0200文件属主可写0004其他用户可读0100文件属主可执行0002其他用户可写0040同组用户可读0001其他用户可执行0020同组用户可写
相应的权限表示应为644,它的意思就是:0400+0200 (文件属主可读、写) = 0600
0040 (同组用户可读) = 0040 0004 (其他用户可读) = 0004 0644

chmod绝对值命令的列子
chmod 666 rw- rw- rw- 赋予所有用户读和写的权限
chmod 644 rw- r-- r-- 赋予所有文件属主读和写的权限,所有其他用户读权限
chmod 744 rwx r-- r-- 赋予文件属主读、写和执行的权限。所有其他用户读的权限
chmod 664 rw- rw- r-- 赋予文件属主和同组用户读和写的权限,其他用户读权限
chmod 700 rwx --- --- 赋予文件属主读、写和执行的权限
chmod 444 r-- r-- r-- 赋予所有用户读权限

目录栏rwx
可以列出该目录中的文件
可以在该目录中创建或删除文件
可以搜索或进入该目录

权限文件
属主同组用户其他用户drwx rwx r-x ( 775 ) 读、写、执行 读、写、执行 读、执行
drwx r-x r-- ( 754 ) 读、写、执行 读、执行 读drwx r-x r-x ( 755 ) 读、写、执行 读、执行 读、执行suid/guidsuid/guid所存在的意思是,例如,当某个用户执行了关于root建立的脚本或可执行文件,那个该用户就自动获得了在执行脚本时的root权限。所以要慎用。
想要查找含有suid的文件登录进入/bin或/sbin$ ls -l grep '^...s'
上面的命令是用来查找suid文件的;$ ls -l grep '^...s..s'

如果想要对文件login设置suid,它当前所具有的权限为 rwx rw- r-- (741),需要在使用chmod命令时在该权限数字的前面加上一个4,即chmod 4741,这将使该文件的权限变为 rws rw- r--。
$ chmod 4741 logit

chmod 4755 rws r-x r-x 文文件被设置了suid,文件属主具有读、写和执行的权限,所有其他用户具有读和执行的权限
chmod 6711 rws --s --s 文文件被设置了suid和guid,文件属主具有读、写和执行的权限,所有其他用户具有执行的权限
chmod 4764 rws rw- r-- 文文件被设置了suid,文件属主具有读、写和执行的权限,同组用户具有读和执行的权限,其他用户具有读权限还可以这样

chmod u+s 于是该文件的权限将变为:rws r-x r-x
chmod -R -h owner file

-R选项意味着对所有子目录下的文件也都进行同样的操作。-h选项意味着在改变符号链接文件的属主时不影响该链接所指向的目标文件。chgrp 一样,但是修改的是用户组查看自己的组用group或者id,group user查看user的组(貌似ubuntu下面group不行,还是用id)

umask可以用umask命令查看,在ubuntu环境下载/etc/profile因为在最下面,不是一般都能看到该命令的一般形式为:umask nnn其中nnn为umask置000-777。
umask 文件 目录
0 6 7
1 6 6
2 4 5
3 4 4
4 2 3
5 2 2
6 0 1
7 0 0

例如,对于umask值002,相应的文件和目录缺省创建权限是什么呢?
第一步,我们首先写下具有全部权限的模式,即777(所有用户都具有读、写和执行权限)。
第二步,在下面一行按照umask值写下相应的位,在本例中是002。
第三步,在接下来的一行中记下上面两行中没有匹配的位。这就是目录的缺省创建权限。稍加练习就能够记住这种方法。
第四步,对于文件来说,在创建时不能具有文件权限,只要拿掉相应的执行权限比特即可。

这就是上面的例子,其中umask值为002:
1) 文件的最大权限 rwx rwx rwx (777)
2) umask值为002 - - - - - - -w-
3) 目录权限 rwx rwx r-x (775) 这就是目录创建缺省权限
4) 文件权限 rw- rw- r-- (664) 这就是文件创建缺省权限

下面是另外一个例子,假设这次umask值为022:
1) 文件的最大权限 rwx rwx rwx (777)
2) umask值为022 --- -w- -w-
3) 目录权限 rwx r-x r-x (755) 这就是目录创建缺省权限
4) 文件权限 rw- r-- r-- (644) 这就是文件创建缺省权限

umask值 目 录 文 件
022 755 644
027 750 640
002 775 664
006 771 660
007 770 660

该命令的一般形式为:ln [-s] source_path target_path

第二章停电了 -、- 重新来

Find命令的一般形式为:
find pathname -options [-print -exec -ok]让我们来看看该命令的参数:
pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print find命令将匹配的文件输出到标准输出。
-exec find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为 'comm -and' {} \;,注意{ }和\;之间的空格。
-ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的 shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

find命令有很多选项或表达式,每一个选项前面跟随一个横杠 -。
让我们先来看一下该命令的主要选项,然后再给出一些例子。
-name 按照文件名查找文件。
-perm 按照文件权限来查找文件。
-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用了 - depth选项,那么- prune选项将被find命令忽略。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-mtime -n +n 按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。
Find命令还有-atime和-ctime选项,但它们都和-mtime选项相似,所以我们在这里只介绍-mtime选项。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
-type 查找某一类型的文件,诸如:b - 块设备文件。d - 目录。c - 字符设备文件。p - 管道文件。l - 符号链接文件。f - 普通文件。
-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount 在查找文件时不跨越文件系统mount点。
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

使用name选项文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。
不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.txt的文件,使用~作为'pathname参数,波浪号~代表了你的$HOME目录。
$ find ~ -name "*.txt" -print想要在当前目录及子目录中查找所有的‘*.txt’文件,可以用:
$ find . -name "*.txt" -print想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:$ find . -name "[A-Z]*" -print想要在/ e t c目录中查找文件名以h o s t开头的文件,可以用:$ find /etc -name "host*" -print想要查找$HOME目录中的文件,可以用:$ find ~ -name "*" -print 或find . -print要想让系统高负荷运行,就从根目录开始查找所有的文件。如果希望在系统管理员那里保留一个好印象的话,最好在这么做之前考虑清楚!
$ find / -name "*" -print如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是* .txt的文件,下面的命令就能够返回名为ax37.txt的文件:$ find . -name "[a-z][a-z][0--9][0--9].txt" -print
使用perm选项如果希望按照文件权限模式来查找文件的话,可以采用-perm选项。
你可能需要找到所有用户都具有执行权限的文件,或是希望查看某个用户目录下的文件权限类型。在使用这一选项的时候,最好使用八进制的权限表示法。为了在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件,可以用:$ find . -perm 755 -print如果希望在当前目录下查找所有用户都可读、写、执行的文件(要小心这种情况),我们可以使用find命令的-perm选项。在八进制数字前面要加一个横杠 -。
在下面的命令中-perm代表按照文件权限查找,而‘007’和你在chmod命令的绝对模式中所采用的表示法完全相同。$ find . -perm -007 -print
忽略某个目录$ find /apps -name "/apps/bin" -prune -o -print如果希望按照文件属主查找文件,可以给出相应的用户名。例如,在$HOME目录中查找文件属主为dave的文件,可以用:$ find ~ -user dave -print在/etc目录下查找文件属主为uucp的文件:$ find /etc -user uucp -print为了查找属主帐户已经被删除的文件,可以使用-nouser选项。这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名;find命令能够为你完成相应的工作。例如,希望在/ home目录下查找所有的这类文件,可以用:$ find /home -nouser -printgroup和nogroup在用法上和user和nouser一样
希望在系统根目录下查找更改时间在5日以内的文件,可以用:$ find / -mtime -5 -print为了在/var/adm目录下查找更改时间在3日以前的文件,可以用:$ find /var/adm -mtime +3 -print
查找比某个文件新或旧的文件同时列出这些文件$ find -newer newest_file_name ! -newer oldest_file_name -exec ls -l {} \;
如果要在/etc目录下查找所有的目录,可以用:$ find /etc -type d -print为了在当前目录下查找除目录以外的所有类型的文件,可以用:$ find . ! -type d -print为了在/etc目录下查找所有的符号链接文件,可以用:$ find /etc -type l -print为了在当前目录下查找文件长度大于1 M字节的文件,可以用:$ find . -size +1000000c -print为了在/home/apache目录下查找文件长度恰好为100字节的文件,可以用:$ find /home/apache -size 100c -print为了在当前目录下查找长度超过1 0块的文件(一块等于5 1 2字节),可以用:$ find . -size +10 -print在下面的例子中,f i n d命令从文件系统的根目录开始,查找一个名为cON.FI LE的文件。它将首先匹配所有的文件然后再进入子目录中查找。$ find / -name "CON.FILE" -depth -print为了在/logs目录中查找更改时间在5日以前的文件并删除它们,可以用:$ find logs -type f -mtime +5 -exec rm {} \;为了查找/var/logs目录中更改时间在7日以前的普通文件,并删除它们,可以用:$ find /var/logs -type f -mtime +7 -exec rm {} \;'$ find /logs -name 'admin.log[0-9][0-9][0-9]-atime +7 -exec rm {} \;为了查找当前文件系统中的所有目录并排序,可以用:$ find . -type d -print -local -mount sort
下面的例子在整个系统中查找内存信息转储文件 (core dump),然后把结果保存到/tmp/core.log 文件中:$ find . -name "core" -print xargs echo "" >/tmp/core.log$ find . -name "*.XC" -mount -print下面的例子在/apps/audit目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:$ find /apps/audit -perm -7 -print xargs chmod o-w在下面的例子中,我们用grep命令在所有的普通文件中搜索device这个词:$ find / -type f -print xargs grep "device"在下面的例子中,我们用grep命令在当前目录下的所有普通文件中搜索DBO这个词:$ find . -name \*-type f -print xargs grep "DBO"注意,在上面的例子中,\用来取消find命令中的*在shell中的特殊含义。
神速的看完了第二章,第三章开始名词解释:
cron 系统调度进程。可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。
At at命令。使用它在一个特定的时间运行一些特殊的作业,或在晚一些的非负荷高峰时间段或高峰负荷时间段运行。& 使用它在后台运行一个占用时间不长的进程。Nohup 使用它在后台运行一个命令,即使在用户退出时也不受影响。
crontab的域为了能够在特定的时间运行作业,需要了解 crontab文件每个条目中各个域的意义和格式。下面就是这些域:
第1列 分钟1~5 9
第2列 小时1~2 3(0表示子夜)
第3列 日1~3 1
第4列 月1~1 2
第5列 星期0~6(0表示星期天)
第6列 要运行的命令

crontab条目举例这里有crontab文件条目的一些例子:
30 21* * * /apps/bin/cleanup.sh上面的例子表示每晚的2 1 : 3 0运行/apps/bin目录下的cleanup.sh。
45 4 1,10,22 * * /apps/bin/backup.sh上面的例子表示每月1、10、22日的4 : 4 5运行/apps/bin目录下的backup.sh。
10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;上面的例子表示每周六、周日的1:10运行一个find命令。
0,30 18-23 * * * /apps/bin/dbcheck.sh上面的例子表示在每天18:00至23:00之间每隔30分钟运行/apps/bin目录下的db check.sh。
0 23 * * 6 /apps/bin/qtrend.sh上面的例子表示每星期六的11:00pm运行/apps/bin目录下的qtrend.sh。

crontab命令的一般形式为:Crontab [-u user] -e -l -r其中:-u 用户名。-e 编辑crontab文件。-l 列出crontab文件中的内容。-r 删除crontab文件。

2008年1月18日星期五

Oracle学习笔记20080117

大家都清楚,联机日志分为当前联机日志和非当前联机日志。
非当前联机日志的损坏是比较简单的,一般通过clear命令就可以解决问题。
1、启动数据库,遇到ORA-00312 or ORA-00313错误,
如ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG'
从这里我们知道日志组1的数据文件损坏了从报警文件可以看到更详细的信息
2、用CLEAR命令重建该日志文件
SQL>alter database clear logfile group 1;

如果是该日志组还没有归档,则需要用
SQL>alter database clear unarchived logfile group 1;

3、打开数据库,重新备份数据库
SQL>alter database open;

说明:
1、如果损坏的是非当前的联机日志文件,一般只需要clear就可以重建该日志文件,但是如果该数据库处于归档状态但该日志还没有归档,就需要强行clear。
2、建议clear,特别是强行clear后作一次数据库的全备份。
3、此方法适用于归档与非归档数据库

损坏当前联机日志归档模式下当前日志的损坏有两种情况:
一、是数据库是正常关闭,日志文件中没有未决的事务需要实例恢复,当前日志组的损坏就可以直接用
SQL>alter database clear unarchived logfile group n
来重建。
二、是日志组中有活动的事务,数据库需要媒体恢复,日志组需要用来同步,有两种补救办法
A.最好的办法就是通过不完全恢复,可以保证数据库的一致性,但是这种办法要求在归档方式下,并且有可用的备份
B.通过强制性恢复,但是可能导致数据库不一致。下面分别用来说明这两种恢复方法

5.1.2.1 通过备份来恢复
1、打开数据库,会遇到一个类似的错误
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG'
ORA-27041: unable to open file
OSD-04002: unable to open fileO/S-Error: (OS 2) 系统找不到指定的文件
2、查看V$log,发现是当前日志
SQL> select group#,sequence#,archived,status from v$log;
GROUP# SEQUENCE# ARCHIVED STATUS---------- ---------- -------- ---------------- 1 1 NO CURRENT 2 2 YES INACTIVE 3 3 YES INACTIVE
3、发现clear不成功
SQL> alter database clear unarchived logfile group 1;

alter database clear unarchived logfile group 1*ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG'
4、拷贝有效的数据库的全备份,并不完全恢复数据库可以采用获取最近的SCN的办法用until scn恢复或用until cnacel恢复recover database until cancel先选择auto,尽量恢复可以利用的归档日志,然后重新recover database until cancel这次输入cancel,完成不完全恢复,也就是说恢复两次。如:
SQL> recover database until cancel;Auto……
SQL> recover database until cancel;Cancel;

5、利用alter database open resetlogs打开数据库说明:
1、这种办法恢复的数据库是一致的不完全恢复,会丢失当前联机日志中的事务数据
2、这种方法适合于归档数据库并且有可用的数据库全备份。
3、恢复成功之后,记得再做一次数据库的全备份。
4、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。

5.1.2.2
如果没有备份,进行强制性恢复
1、打开数据库,会遇到一个类似的错误
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG'ORA-27041: unable to open file
OSD-04002: unable to open fileO/S-Error: (OS 2) 系统找不到指定的文件
2、查看V$log,发现是当前日志
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS---------- ---------- -------- ---------------- 1 1 NO CURRENT 2 2 YES INACTIVE 3 3 YES INACTIVE
3、发现clear不成功
SQL> alter database clear unarchived logfile group 1;

alter database clear unarchived logfile group 1*ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG'
4、把数据库down掉 SQL>shutdown immediate
5、在init.ora中加入如下参数 _allow_resetlogs_corruption=TRUE
6、重新启动数据库,利用until cancel恢复
SQL>recover database until cancel; Cancel

如果出错,不再理会,发出

SQL>alter database open resetlogs;
7、数据库被打开后,马上执行一个full export
8、shutdown数据库,去掉_all_resetlogs_corrupt参数
9、重建库
10、import并完成恢复
11、建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;(没用过)

说明:
1、该恢复方法是没有办法之后的恢复方法,一般情况下建议不要采用,因为该方法可能导致数据库的不一致
2、该方法也丢失数据,但是丢失的数据没有上一种方法的数据多,主要是未写入数据文件的已提交或未提交数据。
3、建议成功后严格执行以上的7到11步,完成数据库的检查与分析
4、全部完成后做一次数据库的全备份
5、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。

alter database backup controlfile to trace(该语句能将东西备份出来但是如何导入却没有试过)实际上就是把当前数据库的控制文件的创建语句备份到trace文件里,你可以找到这个trace文件然后抓出创建语句直接用!

5.2.1
损坏单个控制文件损坏单个控制文件是比较容易恢复的,因为一般的数据库系统,控制文件都不是一个,而且所有的控制文件都互为镜相,只要拷贝一个好的控制文件替换坏的控制文件就可以了。
1、控制文件损坏,最典型的就是启动数据库出错,不能mount数据库
SQL>startup

ORA-00205: error in identifying controlfile, check alert log for more info查看报警日志文件,有如下信息alter database mountMon May 26 11:59:52 2003
ORA-00202: controlfile: 'D:\Oracle\oradata\chen\control01.ctl'
ORA-27041: unable to open file
OSD-04002: unable to open fileO/S-Error: (OS 2) 系统找不到指定的文件。
2、停止数据库
SQL>shutdown immediate
3、拷贝一个好的控制文件替换坏的控制文件或修改init.ora中的控制文件参数,取消这个坏的控制文件。
4、重新启动数据SQL>startup

说明:
1、损失单个控制文件是比较简单的,因为数据库中所有的控制文件都是镜相的,只需要简单的拷贝一个好的就可以了
2、建议镜相控制文件在不同的磁盘上
3、建议多做控制文件的备份,长期保留一份由alter database backup control file to trace产生的控制文件的文本备份

5.2.2 损坏全部控制文件损坏多个控制文件,或者人为的删除了所有的控制文件,通过控制文件的复制已经不能解决问题,这个时候需要重新建立控制文件。
同时注意,alter database backup control file to trace可以产生一个控制文件的文本备份。以下是详细重新创建控制文件的步骤
1、关闭数据库SQL>shutdown immediate;
2、删除所有控制文件,模拟控制文件的丢失
3、启动数据库,出现错误,并不能启动到mount下
SQL>startup
ORA-00205: error in identifying controlfile, check alert log for more info查看报警日志文件,有如下信息alter database mountMon May 26 11:53:15 2003
ORA-00202: controlfile: 'D:\Oracle\oradata\chen\control01.ctl'
ORA-27041: unable to open file
OSD-04002: unable to open fileO/S-Error: (OS 2) 系统找不到指定的文件。
4、关闭数据库SQL>shutdown immediate;
5、在internal或sys下运行如下创建控制文件的脚本,注意完整列出联机日志或数据文件的路径,或修改由alter database backup controlfile to trace备份控制文件时产生的脚本,去掉多余的注释即可。
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "TEST" NORESETLOGS
NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 2
MAXDATAFILES 254
MAXINSTANCES 1
MAXLOGHISTORY 226
LOGFILE
GROUP 1 'D:\ORACLE\ORADATA\TEST\REDO01.LOG' SIZE 1M,
GROUP 2 'D:\ORACLE\ORADATA\TEST\REDO02.LOG' SIZE 1M,
GROUP 3 'D:\ORACLE\ORADATA\TEST\REDO03.LOG' SIZE 1M
DATAFILE
'D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF',
'D:\ORACLE\ORADATA\TEST\RBS01.DBF',
'D:\ORACLE\ORADATA\TEST\USERS01.DBF',
'D:\ORACLE\ORADATA\TEST\TEMP01.DBF',
'D:\ORACLE\ORADATA\TEST\TOOLS01.DBF',
'D:\ORACLE\ORADATA\TEST\INDX01.DBF'
CHARACTER SET ZHS16GBK;
-- Recovery is required if any of the
datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.RECOVER
DATABASE
--if the last shutdown was not normal or immediate
--noarchive
-- RECOVER DATABASE UNTIL CANCELUSING BACKUP CONTROLFILE
--archive
-- RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
-- Database can now be opened normally.
ALTER DATABASE OPEN;
--if recover database until cancel
--ALTER DATABASE OPEN RESETLOGS;

6、如果没有错误,数据库将启动到open状态下。

说明:
1、重建控制文件用于恢复全部数据文件的损坏,需要注意其书写的正确性,保证包含了所有的数据文件与联机日志
2、经常有这样一种情况,因为一个磁盘损坏,我们不能再恢复(store)数据文件到这个磁盘,因此在store到另外一个盘的时候,我们就必须重新创建控制文件,用于识别这个新的数据文件,这里也可以用这种方法用于恢复

2008年1月17日星期四

Oracle学习笔记20080115和20080116

今天做了两个不同的实验,首先我建立了一张test1的表,插入2行数据,然后直接在OS下cp出来,然后shutdown了以后,删除原有的那个atu表空间,启动了以后startup了就发现缺少文件,但是restore做了一下就是把cp出来的东西在cp回去,发觉还是启动不了,应该是做的冷备份,没有做其他任何动作,没有recover修复,所以不明白,最后索性做了次全恢复。这点不明白了,难道是我开了归档模式的缘故?但是归档模式下也不应该会这样啊。第二次做了一个回复,同上的步骤,提示无法找到该表空间的时候,找到他的file#,然后做一次alter database datafile .. offline drop;继续alter database open;这个以后数据库就能起来但是没有atu这个表空间,于是乎在cp回来,修复下recover datafile..;然后alter database datafile .. online;(..表示的是改datafile的号码),然后做下select是和cp出去的时候是一样的。其实很奇怪,为什么这么说呢,因为有归档日志的缘故,所以你做回复后肯定是你在commit的时候是一样的。

20080116
非归档模式下,冷备份直接将备份的文件restore就可以,归档模式下需要把该丢失的表空间设为offline drop,然后restore以后再设为online,其中alter system switch logfile是切换日志文件,但是既然alter system archive log current就可以了可以回复单个tablespace,单个datafile或者整个。

说明:
1、不完全恢复最好备份所有的数据,冷备份亦可,因为恢复过程是从备份点往后恢复的,如果因为其中一个数据文件的时间戳(SCN)大于要恢复的时间点,那么恢复都是不可能成功的。
2、不完全恢复有三种方式,过程都一样,仅仅是recover命令有所不一样,这里用基于时间的恢复作为示例。recover database until time '某个时间'
3、不完全恢复之后,都必须用resetlogs的方式打开数据库,建议马上再做一次全备份,因为resetlogs之后再用以前的备份恢复是很难了。
4、以上是在删除之前获得时间,但是实际应用中,很难知道删除之前的实际时间,但可以采用大致时间即可,或可以采用分析日志文件(logmnr),取得精确的需要恢复的时间。
5、一般都是在测试机后备用机器上采用这种不完全恢复,恢复之后导出/导入被误删的表回生产系统
基于RMAN的回复获得SCN 删除测试表,在删除之前,便于测试,继续插入数据并应用到归档,并获取删除前的scn号
SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe;
开始恢复到改变点SCN 31014
RMAN> run{
2> allocate channel c1 type disk;
3> restore database;
4> recover database until scn 31014;
5> sql 'ALTER DATABASE OPEN RESETLOGS';
6> release channel c1;
7> }
说明:
1、RMAN也可以实现不完全恢复,方法比OS备份恢复的方法更简单可靠

2、RMAN可以基于时间,基于改变与基于日志序列的不完全恢复,基于日志序列的恢复可以指定恢复到哪个日志序列,如
run {
allocate channel ch1 type disk;
allocate channel ch2 type 'sbt_tape';
set until logseq 1234 thread 1;
restore controlfile to '$ORACLE_HOME/dbs/cf1.f' ;
replicate controlfile from '$ORACLE_HOME/dbs/cf1.f';
alter database mount;
restore database; recover database; s
ql "ALTER DATABASE OPEN RESETLOGS";
}

3、与所有的不完全恢复一样,必须在mount下,restore所有备份数据文件,需要resetlogs

4、基于改变的恢复比基于时间的恢复更可靠,但是可能也更复杂,需要知道需要恢复到哪一个改变号(SCN),在正常生产中,获取SCN的办法其实也有很多,如查询数据库字典表(V$archived_log or v$log_history),或分析归档与联机日志(logmnr)等。

2008年1月14日星期一

Oracle学习笔记20080111

Example on UNIX
$ ORACLE_SID=db01; export ORACLE_SID
$ rman target /
RMAN> connect catalog rman_db01/rman_db01@catdb
Example on Windows NT
C:\> set ORACLE_SID=db01
C:\> rman target /
RMAN> connect catalog rman_db01/rman_db01@catdb

同步回复目录
自动的使用backup和copy手动的使用resync catalog
假如要使用resync catlog你必须增加或删除一个表空间,数据文件,或者移动了数据库文件
$ rman target / catalog rman/rman@catdb
RMAN> RESYNC CATALOG;

从新修改数据库incarnation用reset database命令,直接将RMAN用来建一个新的incarnation数据库记录,To distinguish(区别) between opening with RESETLOGS and an accidental restore operation of an old control file在用RESET DATABASE以后用RESETLOGS
数据字典
RC_DATABASE
RC_DATAFILE
RC_STORED_SCRIPT
RC_STORED_SCRIPT_LINE
RC_TABLESPACE

Script Examples
Use CREATE SCRIPT to store a script.
RMAN> create script Level0Backup {
backup incremental level 0 format '/u01/db01/backup/%d_%s_%p'
fileperset 5 (database include current controlfile);
sql 'alter database archive log current';
}

Use EXECUTE SCRIPT to run a script.
RMAN > run {execute script Level0Backup;}

管理脚本Use REPLACE SCRIPT to rewrite a script
RMAN> REPLACE SCRIPT Level0Backup { ..... fileperset 3 .... }

Use DELETE SCRIPT to remove a script
RMAN> DELETE SCRIPT Level0Backup;
Use PRINT SCRIPT to display a script
RMAN> PRINT SCRIPT Level0Backup;
备份恢复目录整个数据库和表空间备份的时候都已经备份了恢复目录,导出如果不大,导出数据库,如果大到处schema
恢复恢复日志建立一个数据库从先前的恢复日志数据库备份,重移目录到别的数据库和导入进来的数据,导入全部数据从导出
Transporting Data Between Databases输入输出工具
Command-line interfaceAn interactive dialog
Parameter files
Oracle Enterprise Manager

Invoking Export
Syntax:
exp keyword = value, value2, ... ,valun

Examples:
exp hr/hr TABLES=employees,departments rows=y file=exp1.dmp
exp
system/manager OWNER=hr direct=y file=expdat.dmp
exp \'username/password AS
SYSDBA\' TRANSPORT_TABLESPACE=y TABLESPACES=ts_emp log=ts_emp.log

Specifying Direct-Path Export As command line argument to the Export command:
exp userid=hr/hr full=y direct=y

As a keyword in a parameter file:
exp parfile=Parameter file ...(Other Parameters)DIRECT = Y...(Other
Parameters)

Invoking Import Syntax:
imp keyword = value or keyword = value, value2, ... value Examples:imp hr/hr TABLES=employees,departments rows=y file=exp1.dmpimp system/manager FROMUSER=hr file=exp2.dmpimp \'username/password AS SYSDBA\' TRANSPORT_TABLESPACE=y TABLESPACES=ts_employees

Invoking Import as SYSDBA
imp \'username/password AS SYSDBA\'
Import Process Sequence
1. New tables are created
2. Data is imported
3. Indexes are built
4. Triggers are imported
5. Integrity constraints are enabled on the new tables
6. Any bitmap, functional, and/or domain indexes are built

WorkshopEnable TracingOracle Net ManagerEdit sqlnet.
ora fileTRACE_DIRECTORY_CLIENT= /u01/user01/NETWORK/LOGNAMES.DEFAULT_DOMAIN = us.oracle.comTRACE_UNIQUE_CLIENT = onTRACE_FILE_CLIENT = client.trcTRACE_LEVEL_CLIENT = SUPPORTNAMES.DIRECTORY_PATH= (TNSNAMES)
sqlnet.ora的位置还是在$ORACLE_HOME/product/9.2/network/admin

使用trace fileThe flow of packets between network nodes Which component of Oracle Net is failing Pertinent error codes
Loading Data into a Database数据加载的动作Direct-Load INSERTNormal (serially) or in parallelInto partitioned tables, nonpartitioned tables, or single partitions of a tableWith or without logging of redo data
Serial Direct-Load INSERTINSERT /*+ APPEND */ INTO emp NOLOGGINGSELECT * FROM t_employees;COMMIT;
Parallel Direct-Load INSERTALTER SESSION ENABLE PARALLEL DML;INSERT /*+PARALLEL(hr.employees,2) */ INTO hr.employees NOLOGGINGSELECT * FROM hr.old_employees;
到此2张已经都看完了,下面应该更多的实践和练习

2008年1月11日星期五

Oracle学习笔记20080110

基于时间恢复的例子
情节:当前的时间是晚上12点,employees表被删了,表被删除的时间大概(approximately)是在11点45,数据正在使用的人很少因为大多数的部门正在开会,这个表必须被恢复

步骤:Shut down and back up--Restore all datafiles--Mount the database--Archived log file--Open with Resetlogs--Back up the database

基于取消恢复的例子
情节:当前的时间是晚上12点,employees表被删了当有人试着修复坏块,log file存在于同样的disk,表被删除的时间大概(approximately)是在11点45,大多数的部门正在开会调查findingsredo logs不是多路,有个redolog丢失了,丢失的有不是归档,这个redo log包含了11:34开始的信息,26分钟的信息会丢失,用户需要恢复他们的数据

使用备份的control file当回复的时候
情节:当前时间是12点,表空间包含着employee表被删除了,这个错误大概在11点45,很多employee的记录将被更新但不是从11点开始,备份需要每天晚上做调查备份从前一晚包含的文件和控制文件需要恢复,emp_ts只有一个数据文件,正确的序号是61,你设置这个表空间被删除时在11点44分,数据文件号是4不在线

丢失当前的redo log
如果数据库是关闭的:试图开启数据库,找到当前日志的序号,恢复数据库直到cancel,删除和重建log如果需要,打开数据库使用resetlogs命令,完成这个数据库的备份

RMAN Incomplete Recovery不完整的恢复用RMAN加载数据库,允许多通道,返回数据文件,回复数据库用until time,untile sequence或者until scn.用resetlogs打开数据库,执行数据库全备份。

Cross-check all backups in the database:
CROSSCHECK BACKUPSET OF DATABASE;

Cross-check all copies in the database:
CROSSCHECK COPY;


RMAN Incomplete Recovery UNTIL TIME Example
RMAN> run {
2> allocate channel c1 type DISK;
3> allocate channel c2 type DISK;
4> set until time = !(R)200-12-09:11:44:00';
5> restore database;
6> recover database;
7> alter database open resetlogs; }

RMAN Incomplete Recovery UNTILSEQUENCE Example
RMAN> RUN {
2> SET UNTIL SEQUENCE 120 THREAD 1;
3> ALTER DATABASE MOUNT;
4> RESTORE DATABASE;
5> RECOVER DATABASE; # recovers through log 119
6> ALTER DATABASE OPEN RESESTLOGS;
7> }

RMAN Maintenance(RMAN的维护)
cross checking备份与复制用crosscheck命令
Cross-check all backups in the database:
CROSSCHECK BACKUPSET OF DATABASE;

Cross-check all copies in the database:

CROSSCHECK COPY;


删除备份和复制
使用delete命令删除物理备份和应向拷贝,修改状态deleted,从备份目录移除备份数据
删除特定的backupset
DELETE BACKUPSET 102;

删除到期的backup不经过设置:
DELETE NOPROMPT EXPIRED BACKUP OF TABLESPACE users;

删除所有:
DELETE OBSOLETE;
用BACKUP...DELETE INPUT命令可删除归档日志,数据文件,备份文件
改变有效的备份和拷贝改变备份或者拷贝无效使用change...unavailable命令返回有效change..available
修改到有效状态修改特定的Datafile状态:
CHANGE DATAFILECOPY '/DB01/BACKUP/users01.dbf' UNAVAILABLE;

修改控制文件备份的状态:
CHANGE BACKUP OF CONTROLFILE UNAVAILABLE;CHANGE BACKUP OF CONTROLFILE AVAILABLE;

修改归档日志的状态
CHANGE COPY OF ARCHIVELOG SEQUENCE BETWEEN 230 AND 240 UNAVAILABLE;

免除(exempting)备份和拷贝从the retention policy使用change..keep change..nokeep
建立一个长期备份
CHANGE BACKUPSET 123 KEEP FOREVER NOLOGS;

使一个备份有效60天
CHANGE DATAFILECOPY '/DB01/BACKUP/users01.dbf' KEEP UNTIL'SYSDATE+60';

编目归档日志和用户备份可以用catalog命令加信息到一个操作系统数据文件备份,一个归档日志备份,一个控制文件备份
目录一个备份用操作系统
CATALOG DATAFILECOPY '/DB01/BACKUP/users01.dbf';

目录归档日志
CATALOG ARCHIVELOG '/ORADATA/ARCHIVE1/arch_12.arc',
'/ORADATA/ARCHIVE1/arch_13.arc';

没有目录的RMAN记录使用change...uncatalog命令修改在容器汇总的记录用delete状态删除特定的backup或者拷贝记录从回复目录
TCHANGE..UNCATALO命令移除被删除的归档日志记录
CHANGE ARCHIVELOG...UNCATALOG;

移除被删除的数据文件记录
CHANGE DATAFILECOPY '/DB01/BACKUP/users01.dbf' UNCATALOG;

Recovery Catalog Creation and Maintenance
回复目录建立和维护查询普通报告和列表从恢复目录,建立,保管和跑脚本,说明备份和恢复目录的动作
回复目录中的内容Datafile and archived redo log file backup sets and backup pieces
Datafile copies Archived redo log files
The physical structure of the target database
Persistent RMAN configuration settings
Stored job scripts
利用recover catalog的好处
Metadata about multiple target databases in one catalog
Metadata about multiple incarnations of a single target databaseHistorical metadata
Reporting on the target database at a noncurrent time

2008年1月10日星期四

Oracle学习笔记20080109

确定哪些是需要恢复
查看V$RECOVER_FILE视图确定哪些需要恢复
查看V$ARCHIVED_LOG数据库中归档redo log列表
查看V$RECOVERY_LOG在归档模式下需要回复的

User-Managed Recovery Procedures:
RECOVER Command恢复步骤
Recover a mounted database:
SQL> RECOVER DATABASE

Or
SQL> RECOVER DATAFILE'/ORADATA/u03/users01.dbf'Recover an open database:

SQL> RECOVER TABLESPACE users

Or
SQL> RECOVER DATAFILE '/ORADATA/u03/users01.dbf'


使用归档日志当在回复的时候
当改变本地归档模式用alter system archive log命令应有redo log
保证set autorecovery on命令当media回复输入auto,然后用recover automatic命令

Restoring Datafiles to a New Location with User-Managed Procedures
Use the ALTER DATABASE RENAME FILE command to record the change in the control file.

完整的recovery动作
关闭database恢复System datafiles,Undo segment datafiles,Whole database文件丢失类,打开数据库恢复当数据库刚开始打开硬件错误类,打开数据库恢复当数据库刚开始关闭数据文件恢复当没有数据文件备份

完整回复关闭的数据库
Shut down the instance-----Restore datafile 1(Log Sequence 144)----144Archived log file------Open the database

文件丢失类,打开数据库恢复当数据库刚开始打开都不影响system这个tablespace
Take datafile 2 offline-----Restore datafile 2---144 archived log file--Bring datafile 2 online

硬件错误类,打开数据库恢复当数据库刚开始关闭
Mount the database--Take datafile 2 offline--Open the database--Restore datafile 2--Archived log file--Bring datafile 2 online

数据文件恢复当没有数据文件备份重新建立丢失的数据文件除了备份Re-create the datafile:
SQL> ALTER DATABASE CREATE DATAFILE 'filename'

Re-create the datafile with a different filename:
SQL> ALTER DATABASE CREATE DATAFILE 'filename' AS 'new file name'


步骤Take the datafile or tablespace offline---Re-create the datafile--Archivedlog file--Bring the datafile or tablespace online

只读表空间回复重建控制文件,重命名datafile,用备份的control file 恢复control file和前面一样
RMAN Complete RecoveryRMAN完整恢复

Restore files from backup sets or image copies by using the RMAN RESTORE command
Recover files by using the RMAN RECOVER command
rman target /
RMAN> STARTUP MOUNT
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN;


Using RMAN to Restore Datafiles to a New Location
用SET NEWNAME 命令恢复到新地方
SET NEWNAME FOR DATAFILE 1 to '//system01.dbf'

用SWITCH命令记录换掉的control file
SWITCH DATAFILE ALL;

使用RMAN恢复表空间
run{sql "alter tablespace users offline immediate";
restore tablespace users;
recover tablespace users;
sql "alter tablespace users
online"}


Using RMAN to Relocate a Tablespace
Use the SET NEWNAME command to restore the files. Use the SWITCH command to record the new names in the control file.Use the RECOVER TABLESPACE command to recover the datafiles of the tablespace.

User-Managed Incomplete Recovery
非全备份出现的状况因为归档日志的丢失导致全备份失败所有未归档日志和数据文件丢失用户误操作原控制问就丢失备份文件必须要用到打开的数据库上。

不完全恢复的种类基于时间,基于推出卖家、、、、基于改变基础
Incomplete Recovery Guidelines Follow all steps carefully. Take whole database backups before and after recovery. Always verify that the recovery was successful. Back up and remove archived logs.Check the alert log before and after recoveryContains error information, hints, and SCNs
User-Managed Procedures for Incomplete Recovery
1. Shut down and back up the database.
2. Restore all datafiles. Do not restore the control file, redo logs, password file, or parameter file.
3. Mount the database.
4. Recover the datafiles to a point before the time of failure.
5. Open the database with RESETLOGS.6. Perform a closed database backup.

大概的recover命令
recover database until cancel;

Recover a database until time:
RECOVER DATABASE until time '200-03-04:14:22:03'

Recover using backup control file:

RECOVER DATABASE until time '200-03-04:14:22:03' using backup control
file




-----------------------
呵呵,今天发了一句话,然后就差不多吧

2008年1月9日星期三

Oracle学习笔记20080108

设置双重备份
RMAN> CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE disk TO 2;
设置备份为最佳:(默认为off)
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
使用clear选项回到默认
RMAN> CONFIGURE RETENTION POLICY CLEAR;
RMAN> CONFIGURE CHANNEL DEVICE TYPE sbt CLEAR;

SHOW命令显示现在的配置参数
用SHOW显示单个
用SHOW ALL 显示所有

list命令列出所有备份的文件
RMAN> LIST BACKUP OF DATABASE;
列出所有关于users01的文件
RMAN> LIST BACKUP OF DATAFILE "/db01/ORADATA/u03/users01.dbf"
列出所有复制关于system的表空间
RMAN> LIST COPY OF TABLESPACE "SYSTEM"

report命令
report need backup命令显示所有的文件
需要database,保证3个选项
REPORT NEED BACKUP incremental 3;
REPORT NEED BACKUP days 3;
REPORT NEED BACKUP redundancy 3;
如果没有选项,用retention policy设置
Recovery Manager Packages

RMAN的使用考虑资源:
共享内存,更多的进程给用户的权限:database是sysdba,操作系统:访问权限远程控制:建立密码文件,保证密码文件备份。全局环境格式和时间参数

User-Managed Backups术语
完整数据库备份,部分数据库备份(表空间,数据文件,控制文件),一致备份,不一致备份

SQL中的视图
V$DATAFILE
V$CONTROLFILE
V$LOGFILEDBA_DATA_FILES

backup的动作(methods)非归档模式下,关闭。
归档模式下打开或关闭连在一起完整的备份(关闭状态下的)
做一个整体备份数据录入后,shutdown immediate,然后再liunx/windows下cp所有的文件到另一边,然后再startup open
Open Database Backups的缺点就是不能备份online的redo log
Making a Backup of an Online Tablespace
SQL> ALTER TABLESPACE users BEGIN BACKUP;
SQL> !cp /users01.dbf /BACKUP/users01.dbf;
先更换一个tablespace然后再备份它
SQL> ALTER TABLESPACE users END BACKUP;
用到的视图
V$BACKUP
V$DATAFILE_HEADER

停止online备份用V$BACKUP查看状态
ALTER DATABASE DATAFILE '' ENdACKUP;
发行alter database在9i中用下面的命令
ALTER DATABASE END BACKUP;

read-only tablespace的备份只有一个backup需要当被设置成read only后,确保正常的backup日历在那以后是可读写的,控制文件也要和Tablespace一样是read-only否则的话要重新覆盖
logging和nologging选项 logging所有改变的东西都记录在redo,从上次开始完整恢复,没有附加的backup.nologging最小的redo记录。。。

手动对控制文件备份建立一对镜像
ALTER DATABASE BACKUP CONTROLFILE TO 'control1.bkp'
建立一个trace file
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

Backing Up the Initialization Parameter File
CREATE PFILE FROM SPFILE;CREATE PFILE = '/backup/init.ora' FROM SPFILE;

RMAN BACKUPS
backup piece size可以用下面来限制
RMAN> RUN {
2> ALLOCATE CHANNEL t1 TYPE 'SBT'
3> MAXPIECESIZE = 4G;
4> BACKUP
5> FORMAT 'df_%t_%s_%p' FILESPERSET 3
6> (tablespace users); }

backup命令
RMAN> BACKUP
2> FORMAT '/BACKUP/df_%d_%s_%p.bus'
3> DATABASE filesperset = 2;

backup的并行度通过filesperset这个参数
归档redo log的备份只包括归档redo log,经常是全备份
RMAN> BACKUP
2> FORMAT '/disk1/backup/ar_%t_%s_%p'
3> ARCHIVELOG ALL DELETE ALL INPUT;

Backup Constraints
The database must be mounted or open.Online redo log backups are not supported.Only 'clean' backups are usable in NOARCHIVELOG mode.Only 'current' datafile backups are usable in ARCHIVELOG mode.

镜像拷贝
RMAN> COPY
2> DATAFILE '/ORADATA/users_01_db01.dbf' TO
3> '/BACKUP/users01.dbf' tag=DF3,
4> ARCHIVELOG 'arch_1060.arc' TO
5> 'arch_1060.bak';

copy命令
RMAN> COPY
2> DATAFILE 3 TO '/BACKUP/file3.dbf',
3> DATAFILE 1 TO '/BACKUP/file1.dbf';

一个COPY命令可以有多个通道
RMAN> CONFIGURE DEVICE TYPE disk parallelism 4
2> COPY # 3 files copied in parallel
3> datafile 1 TO '/BACKUP/df1.dbf',
4> datafile 2 TO '/BACKUP/df2.dbf',
5> datafile 3 TO '/BACKUP/df3.dbf';

RMAN> COPY # Second copy command
2> datafile 4 TO '/BACKUP/df4.dbf';

复制整个数据库
Mount the database for a whole consistent backup.Use the REPORT SCHEMA command to list the files.Use the COPY command or make an image copy of each datafile. Use the LIST COPY command to verify the copies.

增加备份
备份非归档模式保证足够的空间来备份,shutdown使用normail,immediate,挂载数据库,如果不自动允许多线路,用backup命令,
RMAN> BACKUP DATABASE FILESPERSET 3;

RMAN Control File AutobackupsUse the CONFIGURE CONTROLFILE AUTOBACKUPcommand to enableWhen enabled, RMAN automatically performs a control file autobackup after BACKUP or COPY commandsBackup is given a default name

年月日备份

相关视图
V$ARCHIVED_LOG
V$BACKUP_CORRUPTION
V$COPY_CORRUPTION
V$BACKUP_DATAFILEV$BACKUP_REDOLOG
V$BACKUP_SETV$BACKUP_PIECE

监视rman的备份用关联的server session通道 command id命令查询V$PROCESS和V$SESSION查看RMAN通道查询V$SESSION LONGOPS去查看backups和copies用系统工具去查看进程

User-Managed Complete Recoverymedia recovery
用来恢复一个丢失或损坏当前的数据文件或控制文件需要详细的invocation操作如下:从备份中找到文件,redo从归档redo log和online redo log中应用

具体step回复数据文件,应用redo,数据文件中包括提交和未提交的,应用undo,恢复数据
在非归档模式下回复在非归档模式下,你必须恢复所有的数据文件和控制文件你也可以回复redo log files,password file,parameter file

非归档模式下恢复没有redo log

归档模式下恢复
-------------------------

幸福与其说是用任何其他方法,不如说是用情感的这种敏感性来达到的。如果一个人具有了那种能力,他由趣味的愉快中所得到的幸福,要比由欲望的满足中所得到的幸福更大。他从一首诗、一段推理中获得的欢乐要比昂贵的奢侈生活所能提供的欢乐更大。 ———— 休漠

2008年1月8日星期二

Oracle学习笔记20080107

链接RMAN的种类
Target database
Recovery catalog database
Auxiliary database(后备数据库)
- Standby database
- Duplicate database
- TSPITR instance

进入本地rman
UNIX: $ ORACLE_SID=DB01; export ORACLE_SID
$ rman target / as sysdba
Windows NT:C:\> set ORACLE_SID=DB01
C:\> rman target / as sysdba

远程控制
rman target sys/target_pwd@DB01

写到RMAN输出到某个log file
$ rman target sys/oracle log $HOME/ORADATA/u03/rman.log append

Executing a command file when RMAN is invoked:执行一段命令文件当rman被请求
$ rman target sys/oracle log $HOME/ORADATA/u03/rman.log append
@'$HOME/STUDENT/LABS/my_rman_script.rcv'

恢复管理模式
Interactive mode(作用模式)
-Use it when doing analysis
-Minimize regular usage
-Avoid using with log optionBatch mode(组模式)
-Meant for automated jobs-Minimize operator errors
-Set the log file to obtain information

RMAN命令
RMAN命令有几种:独立(不用run),事件(必须用run),独立或事件.

RMAN管理文件设置
rman在安装好后用默认的修改设置
用configure命令可以:
-Configure automatic channels
-Specify the backup retention policy
-Specify the number of backup copies to be created
-Limit the size of backup sets
-Exempt a tablespace from backup
-Enable and disable backup optimization

设置自动通道:
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/db01/BACKUP/%U';恢复什么的天数。。
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 days;过多的天数RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

2008年1月7日星期一

Oracle学习笔记20080104

解决方法和各种造成的原因就不一一啰嗦了,一般就是人为或者机器的原因。
实例和恢复手段结构(Instance and Media Recovery Structures)large pool
查看参数large_pool_size
Checkpointingcheckpoints是用于决定该从哪里恢复checkpoint position恢复点checkpoint queue对脏数据的链接表
checkpoint的类型,完整的:脏数据都被写SHUTDOWN NORMAL, IMMEDIATE, or TRANSACTIONAL ALTER SYSTEM CHECKPOINT Incremental(增加) checkpoint (Fast-Start checkpoint)Periodic writesOnly write the oldest blocksPartial(部分,局部) checkpoint Dirty buffers belonging to the tablespace ALTER TABLESPACE BEGIN BACKUP ALTER TABLESPACE tablespace OFFLINE NORMAL
数据库同步(database synchronization)所有的数据文件(除了offline和read-only)其他的在数据库open的时候同步同步是基于正确的恢复点应用redo log的记录同步数据库文件redo log文件是自动的从oracle server请求的
tuning crash(协调死机)和实例回复表现协调实例和死机回复持续时间协调实例回复的阶段
FAST_START_MTTR_TARGET 预期mttr的秒数LOG_CHECKPOINT_TIMEOUT 一段从恢复点所在位置到最后一次写redolog的时间LOG_CHECKPOINT_INTERVAL Number of redo log file blocks that can exist between an incremental checkpoint and the last block written to the redo log
V$INSTANCE_RECOVERY 监视限制Recovery I/O和统计这个视图计算对checkpointing的最大影响
协调前滚事务the Rolling Forward phase参数recovery_parallelism协调回滚事务
控制快速开始并发的ROLLBACK Controlling Fast-Start Parallel RollbackFAST_START_PARALLEL_ROLLBACK parameter
监控PRARLLEL ROLLBACK的视图V$FAST_START_SERVERSV$FAST_START_TRANSACTIONS
设置database为归档模式归档模式和非归档模式的区别在于对于REDO LOG
1Changing the Archiving Mode1 SHUTDOWN NORMAL/IMMEDIATE/TRANSACTIONAL
2 STARTUP MOUNT
3 ALTER DATABASE ARCHIVELOG
4 ALTER DATABASE OPEN
5 Full database backup
自动和手动归档自动归档 LOG_ARCHIVE_START=TURE手动归档 LOG_ARCHIVE_START=FALSE
详细并列的ARCn进程Specifying Multiple ARCn Processes动力参数log_archive_max_processes修改使用ALTER SYSTEM set log_archive_max_processes=..
开启自动归档当实例启动以后
ALTER SYSTEM ARCHIVE LOG START;
ALTER SYSTEM ARCHIVE LOG STOP;关闭
Manually Archiving Online Redo Log Files手动的归档在线redo logALTER SYSTEM ARCHIVE LOG CURRENT
具体的归档日志位置用SHOW PARAMETER log_archive_dest_n查看10个归档位置用SHOW PARAMETER log_archive_format查看序列号和线的归档日志名
用log_archive_dest_n去制定的10个归档位置刚好local disk,remote stand by database log_archive_dest_1 = "LOCATION=/archive1"log_archive_dest_2 = "SERVICE=standby_db1"
log_archive_dest_n的选项Set archive location as MANDATORY or OPTIONAL. 在归档位置加上 .. or ..Define time before retry in case of failures.
最小的并发参数LOG_ARCHIVE_MIN_SUCCEED_DEST
LOG_ARCHIVE_DEST_STATE_2 = DEFERALTER SYSTEM SET log_archive_dest_state_3 = DEFER;LOG_ARCHIVE_DEST_STATE_2 = enableALTER SYSTEM SET log_archive_dest_state_3 = enable;
特定的filename format命名.arc

dynamic视图
V$ARCHIVED_LOG
V$ARCHIVE_DEST
v$LOG_HISTORYV
$DATABASE
V$ARCHIVE_PROCESSES
Command Line
SQL>ARCHIVE LOG LIST
Oracle 回复管理设置和预览(Oracle Recovery Manager)RMANRMAN容器,使用Control Filecontrol_file_record_keep_time决定被覆盖的最短记录时间
通道管理Channel Allocation修改默认的驱动类型
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO sbt;
修改并行数RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 3;
Configure automatic channel options:
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK
2> FORMAT = '/BACKUP/RMAN/%U';
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK
2> MAXPIECESIZE 2G;

备份,复制,重灌,覆盖至少需要1个通道

RMAN> RUN { ALLOCATE CHANNEL c1 TYPE disk FORMAT = '/db01/BACKUP/usr0520.bak'; BACKUP DATAFILE '/db01/ORADATA/users01.dbf';}

------------

原来以为那啥,结果别人只是拿你当一个调剂的小菜,调剂下自己的心情,给了点阳光你就灿烂,原来只是自己一厢情愿而已。见多了,就习惯了。

2008年1月3日星期四

Oracle学习笔记20080102

直连式ORACLE SERVER通过ORACLE的LDAP共享式ORACLE SERVER可攀登性:链接管理。基本结构就是客户点链接connection manager server,然后server再链接ORACLE服务器高级链接安全:高级安全安全:ORACLE网络服务器和防火墙可接近的:异种服务器可接近的:外来的程序(external procedures)

ORACLE网络结构Oracle Net ArchitectureORACLE网络链接oracle链接网络基于:网络设置,本地代码,应用程序,网络协议。拥有以下链接类型,CS,JAVA,BS。没有中间件的情况下是通过网络协议互联的。用CS模式,用到中间件的需要用到JDBC,直连的话IIOP和HTTP协议链接概念和术语Connectivity concepts and terminologyDatabase servicesService Name Connect DescriptorListenerService registrationService Handlers
网络连接模型Oracle Net Configuration Models局部(localized)管理,核心(centralized)管理管理网络的文件ldap.ora,listener.ora,name.ora,sqlnet.ora,tnsnames.ora
Basic Oracle Net Server Side Configuration基础网络服务器边设置
connection methods链接动作当一个链接请求从客户机向服务器发出,监听器做以下动作:产生一个进程,链接他。不干涉(hands off)在oracle shared server configuration的调度。在询问管理链接的进程或调度。
Spawn and Bequeath and Direct Hand-Off Connections产生和留下和直接的链接
Redirected Session重链接的session
服务器管理和注册Static Service Registration:The listener.ora Filelistener.ora位置是在product/admin/下listener.ora
管理jvm,IIOP和TCP/IP
Listener Control Utility (LSNRCTL)设置非默认的listenerLSNRCTL> set current_listener listener02开启和关闭,stop和start修改listener参数用set显示参数值用show
Naming Method Configuration(不好翻译)完成这个单元后应该会的Describe the difference between host naming and local service name resolutionUse Oracle Net Configuration Assistant to configure: Host Naming method Local naming method Net service namesPerform simple connection troubleshooting
Oracle Net给了5中命名行为:Host naming,Local naming,Directory naming,Oracle names,External naming
sqlnet.ora中的hostname就等同于listener.oar的global_dbname
"dbca命令建立数据库"
处理和配置ORACLE共享服务器(Usage and Configuration of the Oracle Shared Server)服务器配置(Server Configurations)Dedicated server processShared server process
ORACLE Shared server的好处减少进程数,提高and so on
确认安装Verifying Setup
特定的视图V$CIRCUITV$SHARED_SERVERV$DISPATCHERV$SHARED_SERVER_MONITORV$QUEUEV$SESSION
备份与恢复Protect the database from numerous types of failuresIncrease Mean-Time-Between-Failures (MTBF)Decrease Mean-Time-To-Recover (MTTR)Minimize data loss
失败的原因Statement failureUser process failureUser errorNetwork failurenstance failureMedia failure而已上原因各自又有不同的原因

---------------------
亲爱的妹妹要结婚了,恭喜下