Oct 30, 2008

Using UTL_FILE package to dump data to a text file

--Using UTL_FILE package to dump data to a text file
--First, you should create a dictionary and grant write privilege on this dir to the user you wanted.
--Then you can call this procedure like this: dump2text('select * from all_users','','utldir','test.txt')
--Good luck!
create or replace procedure dump2text(sp_query in varchar2,
sp_separator in varchar2 default '',
sp_dir in varchar2,
sp_filename in varchar2) authid current_user is
ol_filehandle utl_file.file_type;
cl_cursor integer default dbms_sql.open_cursor;
sl_coltext varchar2(2000);
nl_status integer;
nl_colcnt number default 0;
sl_separator varchar2(10) default '';
nl_cnt number default 0;
begin
ol_filehandle := utl_file.fopen(sp_dir, sp_filename, 'w');
dbms_sql.parse(cl_cursor, sp_query, dbms_sql.native);
for i in 1 .. 255 loop
begin
dbms_sql.define_column(cl_cursor, i, sl_coltext, 2000);
nl_colcnt := i;
exception
when others then
if (sqlcode = -1007) then
exit;
else
raise;
end if;
end;
end loop;
dbms_sql.define_column(cl_cursor, 1, sl_coltext, 2000);
nl_status := dbms_sql.execute(cl_cursor);
loop
exit when(dbms_sql.fetch_rows(cl_cursor) <= 0);
sl_separator := '';
for i in 1 .. nl_colcnt loop
dbms_sql.column_value(cl_cursor, i, sl_coltext);
utl_file.put(ol_filehandle, sl_separator sl_coltext);
if i < 2 then
sl_separator := sp_separator;
end if;
end loop;
utl_file.new_line(ol_filehandle);
nl_cnt := nl_cnt + 1;
end loop;
dbms_sql.close_cursor(cl_cursor);
utl_file.fclose(ol_filehandle);
dbms_output.put_line('total export rows: ' nl_cnt);
exception
when no_data_found then
return;
when utl_file.invalid_path then
dbms_output.put_line('invalid path');
when utl_file.invalid_filehandle then
dbms_output.put_line('invalid filehandle');
when utl_file.invalid_operation then
dbms_output.put_line('invalid operation');
when others then
dbms_output.put_line('error number: ' sqlcode
'\n error message: ' sqlerrm);
end dump2text;


Oct 28, 2008

AIX 系统安装与维护

Chap2 系统安装和维护
 
2.1系统安装
三种安装方法
2.1.1全新安装
1、        用于新机器安装或者是空硬盘上的全新安装
2、        rootvg被破坏而且没有备份,这时你可以全新安装该系统
3、        如果你想让rootvg变得小一点,可以选择全新安装。
安装完毕后,你必须重新对该新系统进行配置。
2.1.2升级安装(Migration Installion)
用于升级Aix到一个新的版本或发布版本(version or release)并且保留原有的rootvg。
有一下特点:
1、        安装过程中,决定有那些就版本的软件包必须被新版本操作系统的软件包所代替。
2、        除了/tmp文件系统外,其它文件系统,包括root vg,logical volumes和系统配置文件都会被保留,大多数情况下,用户配置文件也会被保留。
3、        非软件产品(Non-software products)保留在系统上。
4、        当从Aix 3.2版升级时,/usr/lib/dirvers, /usr/lib/microcode, /usr/lib/methods和/dev目录下的所有文件都被删除,所以支持非IBM设备的软件包要重新安装。
2.1.3保留安装(要理解为保留用户数据)
是为了保留在rootvg中的用户数据而重新安装BOS。
有以下特点:
1、 /etc/preserve.list文件,用于指定在重新安装BOS时要拷贝和保留的系统文件,在该文件中指定这些文件的全路径名。在3.1版本中,要手工创建该文件,在4.1或更高的版本中,该文件有存在可以直接编辑。
2、确定/tmp文件系统有足够的空间用于保存/etc/preserve.list文件中列举的文件。
3、本安装法缺省情况下重写/ ,/var, /usr, /tmp文件系统,所以任何在这些目录下用户数据都会丢失,这些文件系统被删除并被重新创建,所以你安装的其它软件包可能也会丢失。要把保留安装看作这些文件系统的覆盖安装,所以保留安装后要重新配置系统。
2.1.4轮替(alternate)硬盘的安装法
在4.3或以后版本才可用。
可以通过克隆现有的操作系统到第二块硬盘上,一般采用升级安装法。或者采用安装介质、备份带(mksysb)或者是NIM image,来全新安装操作系统到第二块硬盘上。安装完毕后,会被指示采用第二快硬盘的操作系统,这是重启后即可生效。
采用克隆系统的方法时,要先安装bos.alt_disk_install.rte包才能使用;如果没有采用NIM方法而是采用mksysb备份带来安装的话,则要先安装bos.alt_disk_install.image包。
2.1.5 64位内核安装
1、        先说一下bootinfo命令
-y:检查硬件为32或64位。
-K:检查系统内核,为32位或64位。
-p:检查硬件平台,如果返回32位,为32位的硬件,如果返回chrp,为64位的硬件。
2、如果机器硬件是32位的(32-bit processors),则只能安装32bit的内核,但它也可以支持64位的应用。
3、如果机器是64位的(如P630,P650),则安装时可以选择时候启用64位的内核,也就是说,64位的机器也可以安装32位内核。
4、如何转换内核, 在/usr/lib/boot目录下,有三种内核文件,unix_up, unix_mp, unix_64。
以下命令把内核从32bit转换成64bit:
#ls �sf /usr/lib/boot/unix_64  /unix
#ls �sf /usr/lib/boot/unix_64  /usr/lib/boot/unix
#bosboot �ad /dev/ipldevice
#shutdown �r
解释:ipldevice指的是IPL(initial program load)启动设备,bosboot命令用于创建与机器引导ROS(只读存储器)连接的引导映象。
5、        硬件多线程
#bosdebug �H on/off
2.2lppchk命令,用于确认安装的软件
lppchk命令用于确认安装的软件包是否和SWVPD(software vital product data)数据库信息一致。
2.3installp命令
用于安装、升级、维护软件。
2.4smit.log文件
位于每个用户的根目录下,也就是说,普通用户在其根目录(如/home/sjwh)也会有smit.log文件,只要该用户使用了smit命令。
2.5确定维护版本(maintenance level)
使用oslevel命令
-l Level: 列出早于该命令行Level参数指定的版本号的软件包。
-g: 列出高于目前维护版本的软件包。
-q: 列出已知的维护版本。
2.6升级软件包(使用smit update_all)
可以到IMB网站上下载升级包。
2.7找出包含指定命令的软件包
1、        使用whence(也可以使用which)找出该命令的全路径。
2、        使用lslpp �w命令找出包含该命令的软件包。
3、        使用lslpp �l 命令来查看该软件包的版本。
4、        也可以使用lslpp �f bos.net.nfs.client来查看该软件包包含哪些文件。


Chap3 系统初始化和启动
3.1系统初始化
在系统启动阶段,root文件系统被mount后,系统开始初始化,以下事件顺序发生
1、启动阶段(startup process)最后一步是运行init命令,注意,在系统中,init进程号为1。
2、        init命令试图读取/etc/inittab文件。
3、        如果inittab文件存在,则init命令试图定位initdefault。
a、        如果inittab中有指定,那就按inittab指定的运行级别。
b、        如果没有指定,则要求用户从控制台中输入一个运行级别号。
c、        如果用户输入S,s,M,m,则系统进入维护运行级别。
4、        如果/etc/inintab文件不存在,则init缺省把系统置入维护运行级别。
5、        init命令每隔60秒读取/etc/inittab文件,因此如果/etc/inittab被改动,则60秒后/etc/inittab文件里新的命令行将会被执行。
3.2/etc/inittab文件
    1、格式:Identifier:Runlevel:Action:Command
#cat /etc/inittab
好好研究一下
2、可以使用以下命令来修改编辑/etc/inittab,当然,也可以直接用vi编辑器。
chitab, lsitab ,mkitab,rmitab
3、/etc/inittab各条目的顺序
SRC(system resource controller)尽可能考前;tcp/ip必须在NFS之前。
3.2.1telinit命令
telinit命令和init命令的区别,一样的。
3.3初始化的支持
3.3.1使用bootlist命令
-m mode:指定启动模式,支持三种模式,normal, service, both or prevboot。
但有些机型不支持prevboot模式
F85:/usr/sbin #bootlist -m prevboot -o
0514-220 bootlist: Invalid mode (prevboot) for this model
-o:输出
bootlist用于列出启动或改变启动设备的顺序,但系统启动时,它会从启动设备列表中依次去寻找包含有boot image的设备,并从该设备来启动系统。
#bootlist �m both  �o 
#bootlist �m normal cd0 rmt0 hdisk0
或者创建一个文件,#bootlist �m normal �f filename
3.3.2定位boot逻辑卷所在位置
系统默认的BLV(boot logical volume)为hd5,但可能被改动过。可以查找lv类型为boot的逻辑卷,即为BLV。
3.3.3 进入一个不能启动的系统
如果一个系统不能启动,这时要进入该系统查看原因,必须借助于安装光盘或系统备份带等有包含boot image的可引导的介质。
1、如果是PCI架构,听到滴声后按F5键,如果是早期的产品,有钥匙,则要把钥匙转动service档。
2、插入安装介质后,重新启动机器后,按下F5,这时系统从安装介质启动,几分钟后,系统进入"BOS Installation and Maintenance"界面,这时LED上显示"c31"。
3、选择3"Start Maintenance Mode for system recovery" ->;"Access a root volume group"->;选择"Access this volume group and start a shell"或者"Access this volume group and start a shell before mounting file systems        "
4、采取适当的措施进行系统数据修复,使得系统能够正常启动。
3.3.4启动时LED上的代码
LED上显示的代码根据主机型号不同而不同。
1、        E1F1表示系统定义的控制台已经被激活。
2、        201:破坏的引导映象(boot image)
a、        进入系统维护模式,检查/和/tmp文件系统空间
b、        确定引导硬盘lslv �m hd5
c、        重新生成引导映象bosboot �ad /dev/hdiskn
d、        检查错误日志中是否有CHECKSTOP错误,如果有,可能硬件问题。
e、        重启机器。
3、223-229:无效的启动顺序(bootlist)
a、        先用service模式启动机器,如果可以启动成功并进入系统,则用bootlist来查看和改变启动顺序。
b、        如果还不能进入系统,则用启动光盘进入维护模式,使用bootlist来查看并改变启动顺序。
4、551,555,557:破坏的文件系统、文件系统日志等
a、        采用3.3.3节的步骤,选择"mount文件系统前进入rootvg"
b、        检查和修复文件系统
#fsck �y /dev/hd1
#fsck �y /dev/hd2
#fsck �y /dev/hd3
#fsck �y /dev/hd4
#fsck �y /dev/hd9var
c、        重新格式化文件系统日志
#/usr/sbin/logform  /dev/hd8
d、        查找启动盘lslv �m hd5
e、        重新生成引导映象
#bosboot �ad  /dev/hdiskn
5、552,554,556:破坏的超级块或破坏的ODM数据库
a、        重复第4种中的步骤a和b
b、        如果fsck提示超级块受破坏,则恢复超级块
#dd count=1 bs=4k skip=31 seek=1 if=/dev/hdn of=/dev/hdn
c、        重建文件系统日志设备
#/usr/sbin/logform  /dev/hd8
d、        如果还没解决,则继续
e、        你的ODM被破坏,这时选择3.3.3节中"mount文件系统前进入rootvg"
f、        mount /(root)和/usr文件系统
#mount /dev/hd4 /mnt
#mount /usr
g、        拷贝系统配置信息到一个备份目录
#mkdir  /mnt/etc/objrepors/backup
#cp /mnt/etc/objrepors/Cu*  / mnt/etc/objrepors/backup
h、        从RAM文件系统拷贝配置文件过来到系统
#cp /etc/objrepos/Cu*  /mnt/etc/objrepos
i、        umount所有文件系统#umount all
j、        使用lslv �m hd5来确定启动硬盘
k、        保存干净的ODM到启动卷(boot logical volume)中去
#savebase �d /dev/hdiskn
savebase是将"设备配置"数据库的基本定制设备设备信息保存到引导设备中。
l、        重启,如果还不想,则要重装BOS。
6、        553:破坏的/etc/inittab文件
a、        进入维护模式
b、        检查/,/var,/tmp文件系统空间
c、        检查/etc/inittab文件,看是否是空的inittab文件,或是错误的条目。
d、        检查/etc/environment,/bin/sh,/bin/bsh,/etc/fsck,/etc/profile,/.profile等文件
e、        重启机器。


Chap 4 硬件安装和配置管理
4.1查找硬件架构
RS6000和pSerial服务器有以下架构:
rs6k                Micro Channel-based uni-processor models
rs6ksmp        Micro Channel-based symmetric multiprocessor models
rspc                ISA-bus        models
chrp                PCI-bus models
可以使用#bootinfo �p来确认系统的硬件架构,或者使用#lscfg可以显示"Model Architecture:   "。
可以使用lscfg,lsdev,lsattr来查看系统的硬件设备配置。
4.1.1使用lscfg命令
4.1.2使用lsdev命令
4.1.3使用lsattr命令
4.1.4例子
4.2适配卡和设备的配置
1、支持三招总线类型(bus type):SCSI,PCI,ISA
2、集成的设备(Integrated devices如SCSI设备)在系统启动时自动被配置,它是通过写入NVRAM的有效数据传递到操作系统来生效的。而PCI设备在系统启动时被配置,只要系统上装载有该设备的驱动。而ISA设备则必须手工来配置。
4.3展示安装的设备
使用smit lsdev或lsdev命令来查看。
注意:预定义ODM数据库有定义同样类型的设备的缺省属性,只要系统安装时有一种同类设备安装在系统上,例如,如果系统配有一个磁带机,那么有很多类型的磁带机都会在预定义ODM库中定义。因为他们的驱动都会装载到系统上。
可以使用lsdev �P来查看。
4.4配置新设备
4.4.1PCI设备的配置
1、如果在系统中添加一个PCI设备,那么使用cfgmgr或者在系统启动中就会自动配置该设备,只要该设备的驱动有安装在系统上。
2、热插拔槽和适配卡
首先要确认槽和适配卡都支持热插拔。
在添加、删除或更换热插拔适配卡时,要记住都要使用系统命令先把槽的供电关掉(turn off slot power)。有两个命令:lsslot和drslot,前者展示插槽的属性,后者动态重新配置插槽。
要添加一个热插拔PCI适配卡时,先用drslot命令使插槽处于Action state。然后插入适配卡,在使用该命令使插槽供电。这样,就可以使用cfgmgr来配置该适配卡啦。
在移除适配卡前,要先用rmdev等命令来删除系统中的配置,这样才能够在ODM库中删除该卡的相关定义。
4.4.2ISA设备的配置
    1、系统集成的设备如SCSI控制器和集成的ISA设备如键盘、鼠标(可以使用#lsdev �Cc adapter �s isa来展示) 都会自动被配置。然而,非集成的ISA设备如ISA卡(插在ISA槽中)则必须手工配置。
2、配置ISA设备必须确定BUS I/O range,IRQ等因素,并且可能需要用跳线方式或者采用该卡的管理配置软件来配置。
3、        可以使用#lsdev �Cc adapter �s isa来展示ODM库中预定义的ISA卡类型。
4、        安装ISA适配卡的驱动,使用smit devinst_isa来安装device.isa软件包。
5、        查看并记录已配置在系统里的ISA卡的配置
#lsdev �Cc adapter �s isa
#lsresource �l apm0
#lsattr �El apm0
其中apm0是一块多端口的ISA卡,lsresource命令展示该卡的配置信息。也可以使用lsattr命令。
6、使用smit isa安装配置ISA卡时可以试安装看配置信息是否可用,然后在真正安装到系统中去。
4.4.3 128端口异步适配卡的配置
一个128异步适配卡,最多可以连接8个远程异步节点单元(remote asynchronous node(RUN) units),每个单元可以支持16个设备。
可以采用EIA 422,直连cable,EIA422/EIA232异步modem,或者DSU/CSU设备来连接。菊花链(daisy chain)结构,注意单元要依次按序编号,既靠得适配卡越近编号越小。
RAN指示灯编码:AC(表示activity),En(Error Node表示node number不正确)
4.5添加一个tty设备
使用smit tty来添加,注意要确定终端类型。
添加完毕后,这时/dev目录将会创建该设备特殊文件,同时在/etc/inittab文件中添入该getty条目,以便系统可以激活该终端,而且在系统的customized ODM(CuDv)中也会加入相应的配置信息。
也可以使用mkdev命令,使用#redev �l <tty name>; -d是删除该终端。当然,不能删除正在使用中的终端设备。
4.6添加一个磁带机设备
一般,可以使用cfgmgr命令来自动配置。也使用smit tape来添加一个磁带机设备,注意要确定该设备的Block size大小。当然,可以设置为0,它可以自动找出磁道介质的block大小并读出该磁介质。也可以使用mkdev命令。

Chap 5 Object Data Manager(ODM)
ODM有很多作用,最重要的是维护系统的配置信息、系统组件设备和关键的产品数据库。它比采用文本文件形式更强健、安全并且可以共享。
它管理以下系统数据:
    设备配置信息
    smit的展示信息
    安装和升级过程中的关键产品数据(vital product data)
    通讯配置信息
    系统资源信息
ODM信息保存在以下三个目录:/usr/lib/objrepos,/usr/share/lib/objrepos,/etc/objrepos
在设备配置区域,ODM保存有所有pv、vg和lv等的信息,所有,要理解import和export一个vg时,ODM库关于该vg信息是如何变化的。
5.1ODM命令
关于对objects操作的命令:
odmadd:添加objects到一个object class
odmdelete:删除objects从一个object class
odmget:展示objects信息
odmchange:改变指定的object信息
关于对object classes操作的命令
odmcreate:创建空的object classes
odmdrop:删除整个object class
odmshow:展示一个object class的描述

Chap 6:Storage management,LVM,and file systems
6.1概念
Pv, vg, lv, lp四个概念
6.1.1逻辑卷存储的限制
Storage components        Limitations
Vg        255个/系统
Pv        32个/vg
PPs        1016个/PV,256MB,4.3.1版以后可以设置为1016的几倍。但改动后该vg就不能import到4.3.0或更低版本的系统中去。
#chvg �t 2 datavg  #lsvg datavg (MAX PPs per PV: 2032)
Lv        256/vg
Lp        35512/lv
Aix 5.2L版本有更好的扩展。
6.2管理pv
6.2.1配置新硬盘
3种办法
办法1:关机,插入硬盘,加电开机。
办法2:不用关机,插入硬盘后,运行cfgmgr命令
办法3:确定硬盘的以下信息,用mkdev命令来配置新硬盘
        Subclass, type,parent name,where connected。
        #mkdev �c disk �s subclass �t type �p parentname \ -w whereconnected �a pv=yes
        其中pv=yes参数使disk成为pv并且在硬盘上写了boot  record和唯一的PVID。
    可以用#lsdev �Cc disk
hdisk2 Defined   20-58-L      SSA Logical Disk Drive
#mkdev �l hdisk2
一般我们是采用第二种方法。
6.2.2使硬盘成为PV
Chdev命令通过指定唯一的PVID,来使disk成为系统中的一个PV。
    #chdev �l hdisk1 �a pv=yes
    在HACMP环境下,不能随意更改共享pv的PVID。
6.2.3更改pv的属性
1、设置可分配限制(allocation permission)
#chpv �a    
2、设置可用性(availability)
#chpv �v
   a: avaible
   r: unavaible
chpv其他用法:
-c: clean the boot record
-C HdiskName: clears the owning volume manager from a disk
-h: set hotspare
注意:使用chpv命令时需要使用/tmp目录的空间。
6.2.4删除PV
#rmdev �l hdsik1
6.2.5列举PV的相关信息的几个命令
#lspv
#lsdev �C �c disk          
#lspv hdisk1                  列举PV的属性。
#lspv �l hdisk1                列举PV内的logical volume
#lspv �p hdisk1
6.2.6移植一个PV里的内容
使用migratepv命令,注意只能在一个vg内操作,不能跨越vg来移植一个PV的内容。
基本步骤如下:
把新的pv加入到该vg上,利用migratepv命令或smit migratepv菜单来实现。移植前确认目标pv上有足够的剩余空间。
如果移植的PV中包含有hd5(boot逻辑卷),则必须进行一下操作:
#migratepv �l hd5 SoureDiskNumber DesinationDiskNumber
#bosboot �a �d /dev/DesinationDiskNumber
#bootlist �m normal DesinationDiskNumber
then
mkboot �c �d /dev/SourceDiskNumber
注意事项:
1、        migratepv命令不能使用在concurrent模式下的vg
2、        migratepv命令不能移植条带化的lv,需要采用cplv和rmlv的方式来移植该lv
3、        需要root用户或者是system组成员才能使用migratepv。
4、        移植hd5完毕后,如果是4.2之前的版本,要记得用mkboot �c 来清理源盘上的启动记录(boot record)。对于Aix 4.3或5L 5.2版,是或可以不用。
6.3管理vg
6.3.1添加一个vg
创建一个vg应确定的要素:
vg名称,vg里包括的pv,vg里pv的最大数,pp size,系统重启时是或激活。
可以使用smit mkvg菜单或者使用mkvg命令。
但smit mkvg没有提供一下选项:
1、        命令行提供 �d参数指定最大数量的pv数,smit采用默认值32
2、        命令行提供 �m参数指定pv的最大大小,这将决定有多少个PP可以使用,smit采用默认的1016(MAX PPs per PV: 1016)
3、        smit总是默认使用-f参数去强制创建vg。(4.3是这样,但5.2有本选项)
注意:要成功添加一个vg时根目录至少要有2MB空间。
6.3.2改变vg的属性
1、改变vg激活属性
#chvg �ay newvg
#chvg �an newvg
2、解锁vg(如果系统突然crash,这是LVM命令异常中断,vg可能会被锁。)
#chvg �u newvg
3、        添加一个pv
#extendvg newvg hdisk3
注意:如果要添加的硬盘已经属于一个还没有varyon的vg,则这时系统会提示你是或确认继续。
4、        删除一个pv
#reducevg myvg hdisk3
注意:reducevg提供-d 和-f参数,-d还删除该pv上的所有lv,可能会导致某个lv数据的一致性,如果那个lv跨越该pv的话,-f确认直接删除,没有经过确认。
5、        删除一个pv的标记(reference)
如果没有用reducevg vg pv命令来先删除一个pv的话,而直接移除一个物理硬盘的话,则在VGDA里还有pv的标记(reference),
6、        同步设备配置信息数据库(ODM)
一般情况下,ODM库里有关设备配置信息会和逻辑卷控制块(logical valume control blocks)里LVM信息和位于PV里的VGDAs信息保持一致,但有时不当操作会造成信息不一致。
#synclvodm rootvg
6.3.3Importing和exporting一个vg
exportvg命令从一个系统的ODM库中删除该vg的定义,但不会删除该vg上的任何用户数据,同样,importvg在系统的ODM库中加入了该vg的定义。
#exportvg myvg
#importvg �y myvg hdisk2
也可以使用smit exportvg和smit importvg来操作。
注意:
1、如果该vg名在系统中已被使用,则importvg时会报错,这是可以在命令行中指定另一个唯一名(指和系统中任一vg名都不一样,即在一个系统中,vg名是不能重复的),
或者在importvg命令行中不要指定-y参数或vg名,这是系统会为其自动指定一个唯一的vg名。
2、import进来的vg中包含的lv名可能和原来系统中的lv名产生冲突(名字一样),这是importvg会改变imported的lv名字,但会包错误信息。
3、在一个系统中移走vg前记得要先做exportvg的操作,否则在原系统的ODM库中还保留该vg的相关信息,该vg从新系统中移回原系统可能就会导致ODM库的信息和该vg的实际信息不一致。
4、        smit exportvg命令删除/etc/filesystems中有关文件系统的标记,但保留mount points在系统中;importvg命令同样在新系统中的/etc/filesystems文件中定义相关的文件系统信息。(如果没有冲突)
5、        如果一个vg包含有paging space并且该paging space是活动的,这要先把该paging space置于不活动状态,才可以export该vg。可以使用命令#chps �a n paging_space_name,然后重启机器使该paging space不活动。(在5.2版中不要重启机器)。
6.3.4varying on and varying off 一个vg
varyonvg命令的步骤:
1、        系统读取一个vg上每个pv的VGDA信息。
2、        每个VGDA上的头信息和时间戳被读取,只有时间戳跟VGDA一致才有效。
3、        如果quorum(a majority of VGDAS)是有效的,则继续,或者,vary on失败。
4、        系统采用最新的VGDA(即有最近时间戳的)并且把它刷新到其它VGDA上。
5、        (在mirroring镜像有使用时),如果有任何stale分区,则调用syncvg命令来同步该分区。
varyonvg命令参数使用
1、-f参数,强制varyon,即使发现不一致。
2、-n参数,不调用syncvg命令,防止坏的镜像copies回写到好的copies。
3、-s参数,到维护模式,可以对该vg操作,但lv不能打开(不能有I/O)。
varyoffvg命令使用前,要确定在其上的所有lv要先关掉(closed)。同样有-s参数到维护模式。
6.3.5管理一个vg
1、        列出vg
#lsvg
#lsvg �o
2、        列出一个vg的属性
#lsvg rootvg
3、        列出vg中的lv
#lsvg �l rootvg
4、        列出vg中的pv
#lsvg �p rootvg
6.3.6重组一个vg
reorgvg命令用于重新组织一个vg里的pp分布,根据每个lv的分配属性(allocation characteristics)。
#reorgvg [-I] VolumeGroup [LogicalVolume…..]
首先该vg必须varyon并且有空余的partitions,并且相应的lv的可重分配标记必须置为y,可以使用chlv �r命令来改动该标记,或者该lv将忽略。
注意:
1、        对条带化的lv不进行重组。
2、        在4.2或更新的版本,如果使用reorgvg命令不带任何参数,这只重组第一个lv(即lvvg �l VolumeGroupName中的第一个)
3、        -i参数指定pv名从标准输入读取,如
#echo "hdisk4 hdisk6" | revorgvg �I vg02 lv203 lv205
表示只有包含有lv203和lv205的hdisk4和hdisk6才对该相应的lv做重组。
6.3.7同步一个vg
如果一个lv copy是stale状态的,则可以用syncvg命令来同步该lv。
syncvg可以指定是lv、pv、或者是vg,但要考虑时间花费。
#syncvg �p hdisk4 hdisk5
表示同步hdisk4和hdisk5中的镜像拷贝。
#sysncvg �v vg04 vg05
表示同步vg04和vg05的拷贝。  不同vg中可以有拷贝?
6.3.8在一个vg内移动一个lv
    基本思路:把一个新的pv加入到vg中,采用migratepv souredisk targetdisk做法。
6.3.9把一个预定义的pv加入到一个vg中
记住,要先把该预定义hdisk变为可用,再加入到vg中,或者不能成功。
#mkdev �l "hdisk4"
hdisk4 Available     
mkdev(Adds a device to the system) 与chdev(Changes the characteristics of a device)区别:
(也是一个硬盘添加使用的过程)
s80:/# lsdev -Cc disk
hdisk0 Available 10-60-00-8,0 16 Bit SCSI Disk Drive
hdisk1 Available 10-60-00-9,0 16 Bit SCSI Disk Drive
hdisk2 Defined   20-58-L      SSA Logical Disk Drive
mkdev有两种用法,一种是添加一个设备,但要指定该设备的连接信息,也可以制作一个可用的已预定义过的设备(可以用#lsdev �Cc disk 列出)。
s80:/# mkdev -l hdisk2
hdisk2 Available
但这时候还没配置为pv,也就是说,要使用
S80:#chdev �l hdisk2 �a pv=yes
这是就可以把该硬盘(pv)加入某个vg中去。
6.4管理lv
6.4.1添加一个lv
1、使用mklv命令行:
几个参数:
-c copies:拷贝数,缺省为1。
-t type:lv的类型,类型为JFS (JFS2),JFSLOG(JFSLOG2)和paging,还有boot类型。
但boot类型不能是条带化,做日志型的lv,还要用logform来格式化该lv。
    #logform /dev/logdev
2、使用smit mklv
6.4.2删除一个lv
该lv必须为closed状态,即如果有文件系统必须umount下来。
6.4.3减少lv的大小
即使是5.2版本中,也不能直接reduce。
步骤:
1、        备份该lv的数据
2、        删除该lv
3、        重建lv,减少lv的大小
4、        恢复数据
6.4.4增大lv的大小
使用extendlv命令或者smit extendlv快捷方式来增加lv的大小。也可以采用扩大文件系统的方式来扩大相应的lv的大小,因为扩大了文件系统同时也就扩大了该相应的lv的大小。
注意,单独扩大lv后,相应的fs并没有扩大。
6.4.5拷贝一个lv
1、使用命令行cplv
#cplv �v myvg �y newlv oldlv
本命令行拷贝oldlv到myvg上newlv上。如果没有指定vg名,则会在同一个vg上创建新的lv。如果存在了一个lv,existinglv。
#cplv �e existinglv oldlv
注意:不用拷贝大的lv到小的lv上。
2、使用smit cplv
有三种选项:拷贝到一个存在的lv,拷贝到一个用户创建的lv,拷贝到一个系统创建的lv。
注意:如果你在使用cplv时碰到以下错误:cplvestination logical volume must have type set to copy.使用chlv命令来改变lv的属性:
#chlv �t copy <Destionation Logical Volume Name>;
6.4.6列举lv
1、列举系统所以lv
#lsvg | lsvg �il
2、列举某个lv属性
#lslv newlv
6.4.7lv的大小
6.4.8lv的其他属性
1、Intra-disk(盘内)分配策略
五个区域:outer edge,outer middle,center,inter middle,inner edge。
平均寻道时间。
如果有大量顺序读写(sequential reads or writes)应该放在outer edge,因为那里单个trace里有更多的data block。
如果lv有Mirrored Writed Consistency(MWC),则也要放在outer edge,因为MWC cache就在那里。
2、盘间分配策略
The maximum range setting:尽量把一个lv的pp分布到尽可能多的物理硬盘上。
The minimum range setting:尽量把一个lv的pp分布到尽同一个的物理硬盘上。
为增加数据的可用性,可以把lv镜像,这是pp的分布由条带化(strict)这个参数来决定,由一下几个设置:
y: 每个pp位于不同的pv上。
n:拷贝的pp可以唯一同一个或不同的pv上
s: 每个拷贝(副本)的所有pp不能和第二或第三拷贝的pp位于同一个硬盘上。这样就可以进一步减少由于硬盘故障而引起数据丢失的可能性。(4.3.3版本或以上支持)
所以,对于一个镜像的lv,要仔细考虑设置Range和Strict参数,例如,对于一个镜像的lv,如果range设置为minimum而strict设置为yes,则这些pp会分布到不同的pv上,但如果strict设置为no,则主pp和拷贝pp都会分布到同一个pv上。
3、I/O读写顺序策略
在镜像的情况下,要让主pp和拷贝pp位于不同的硬盘上,这样既增加数据可用性又可以提高性能。
Sequential:所有读都是指向主pp,而写是连续的,先写到主pp上,完成后再写到第二快硬盘上(既第二份pp上)。
Parallel:根据镜像硬盘的繁忙程度来平衡读操作,但写操作是并发的。
在5.1版本还引进一下两个策略:
Parallel/sequential: 读操作总是在主拷贝,但写操作是并发的。
Parallel/round robin:与Parallel策略类似,但它不是总是先检查主拷贝,而是轮循检查两个拷贝,写操作一样是并发的。
4、写操作确认策略
就是通过每次刚写入的数据进行读操作以测试或确定写操作是否成功,但会严重影响硬盘的写操作性能。
6.5管理文件系统(JFS)
Aix支持三种文件系统:JFS, NFS,CDRFS(CD-ROM file system)
JFS把lv分成固定大小的单元称为logical blocks。
超级块:位于第1和第31个logical block中,其中第31个是备份副本。该超级块保存文件系统的信息:如文件系统大小(以512byte计),文件系统的名称,文件系统日志设备地址,版本号,还有文件系统名称。
6.5.1文件系统属性
1、        Number of I-nodes(number of bytes per i-node)
JFS支持从512到131072的值。
问题的关键是JFS限制文件系统最多只能又2的24次方(16MB)。
2、        Allocation group size(分配组大小)
分配组大小范围为8MB到64MB,每一种有nbpi范围。
3、        文件系统片断可选址(fragment addressability)
支持四个可选址单元大小:512,1024,2048,4096,而最大支持到可选址为28-bit数字,既可以支持到2的28次方。
4、        文件系统的最大大小
由NPBI*2的24次方和Fragment Size*2的28次方的最小值决定。
5、        JFS文件系统日志
JFS文件系统日志最大到256MB。
6.5.2 JFS2文件系统属性
    1、比较:     
Function        JFS        JFS2
单个文件大小        64GB        1TB
Nbpi        固定,文件系统设定        动态,只是受限于磁盘空间
目录组织方式        线性(Linear)        B树(B-tree)
压缩        有        没有
缺省文件模式的SGID        SGID=on        SGID=off
配额        支持        不支持
2、兼容性
在Aix版本4中,不能mount上JFS2文件系统,就是不支持JFS2文件系统啦。
3、移植
只能做数据拷贝移植,不能做直接转换。
4、64位系统支持JFS2文件系统
在安装64位机器系统时,可以选择enable 64-bit kernel和JFS2,这样rootvg的文件系统就是JFS2的啦。
6.5.3创建一个文件系统
使用smit crjfs时有3个选项注意:Fragment Size, Number of bytes per inode, Allocation Group Size。
注意:在Aix中所有的I/O都是以4KB为单位,但在文件系统中采用512 byte为单位是为了保留和其它Unix系统的一致性。还有创建文件下都是以整数个PP为单位的。
6.5.4mount一个文件系统
1、mount一个文件系统是使得一个文件系统可以进入并被使用的唯一办法。
注意:1、when a file system is mounted over a directory, the permissions of the root directory of the mounted file system take precedence over the permission of the mount point.
2、mount点的目录权限至少要设置为111,要不然可以会发生Permission denied的现象。
2、使用命令行方式,可以mount所有的文件系统:
#mount {-a|all}
3、也可以使用smit mount,这时要指定"Directory over which to mount",这时你只能选择你创建文件系统时所创建的mount point。
4、自动mounting
有两类文件系统
a、        有一类是系统启动时所需的,这些文件系统(都是系统的文件系统如/, /usr, /var, /tmp等文件系统),它们在系统启动过程中明显地被自动mount。它们不是由后来执行地启动脚本/etc/rc(进行多用户环境的启动阶段)来mount的,rc脚本中即使执行了mount all命令。同样,当umount all命令执行时他们也不会umounted。它们在/etc/filesystems中由定义:mount=automatic
b、        另一类是用户定义的(包括系统的/home文件系统),它们是在执行rc脚本时被mount的,或者是使用mount all被mount上来,他们在/etc/filesystems中由定义:mount=ture
创建文件系统时可以通过指定"Mount Automatically at system restart"项,或者可以命令行#chfs �A yes来改变该属性。
5、展示装载上的文件系统
#mount
如果只是要显示系统中的文件系统,则要
#lsfs
6.5.5删除一个文件系统
#mount   
#umount filestem_name
#smit rmjfs或者使用命令行#rmfs filesystem_name,可以添加-r参数来同时删除转载点(mount point)。
6.5.6加大文件系统的大小
Aix可以动态增大一个文件系统的大小。
命令行
#chfs �a size=new_size_in_512-byte_blocks file_system_name
文件系统就变成新定义的大小。
也可以用smit chjfs来做
6.5.7检查文件系统的一致性
采用fsck命令,由-f, -p �t File, -y等参数。
注意:缺省情况下,/, /usr, /var, /tmp文件系统的检查属性是设置为False的(check=false),这是因为这四个文件系统在启动过程中已经被fsck检查并且mount上来啦,而不是在后来的多用户启动阶段/etc/rc脚本里去做fsck。
6.5.8初始化JFS日志设备
JFS日志设备储存文件系统元数据(metadate)的变化并且可以在系统崩溃后恢复时用户回滚没完成的操作,可以使用logform命令来初始化一个lv作为JFS的日志设备。
Logfrom只能对关闭的lv操作,并且将该lv的所有数据。
6.5.9添加JFS logs
JFS log能确定文件系统的完整性,当不能确定该文件系统上数据的完整性,也就是说,可能会丢失一定的数据,如果I/O还没有完全刷新到文件系统中去,这是突然系统崩溃,则数据会丢失,当文件系统应该还是可以用的。
步骤:
1、        建一个jfslog类型的lv
2、        格式化该lv  
#/usr/sbin/logform  /dev/userlog
3、        改变文件系统的日志设备,可能原来时系统的log=/dev/hd8
#chfs �a log=/dev/userlog  /userlv
6.6文件系统的故障修复
6.5.1超级块受破坏
1、        如果在使用fsck或mount命令时系统提示一下信息,则可能超级块被破坏(或者脏)
fsck: Not an Aix 4 file system
fsck: Not a recognized file system type
mount: invalid argument
2、        从备份超级块中恢复
#dd count=1 bs=4k skip=31 seek=1 if=/dev/lv00 of=/dev/lv00
3、        再用fsck修复该文件系统
#fsck �p /dev/lv00
4、        用fsck检查文件系统完整性
#fsck /dev/lv0
如果有问题,会有相关信息显示。
5、        如果还不能解决问题则可能要从备份中去恢复数据啦。
6.6.2不能umount文件系统
umount一个文件系统时提示:Device busy or A device is already mounted or cannot be unmounted
1、使用fuser命令检查该文件系统
#fuser �xc /fib (or fuser /dev/fiblv)
2、使用genkex命令来查看加载的kernel extensions。
3、该文件系统内还挂接有没有卸装的文件系统,先卸载内嵌的文件系统。
4、        用户可能使用该文件系统里的某个目录作为他们的工作目录,采用以下命令
#find  /fib �type d �exec fuser �u { } \;
6.6.3使用df或mount命令时挂住
主要是使用NFS时会产生这种问题,检查网络连通性和网络文件系统的可用性。包括检查nfsd守护进程。
6.6.4删除一个被锁住的应用文件
原因就是该文件正在使用,找出使用该文件的进程,kill该进程,就可以删除该文件。
#fuser /mydir/myfile
myfile 10477
#kill �9 10477
#rm myfile
6.6.5文件系统满
可能会导致各种各样的问题,比如/home文件系统满,则启动CDE时就会有问题。这是你要选择用命令行登录先处理该文件系统满的问题。

Chap 7 smit快速路径
    这一章就不用写啦,主要要自己都练习,多用用。
Chap 8 问题确定
8.1 启动日志工具(boot logging facility)
    1、系统启动日志信息默认记录到/var/adm/ras/bootlog(/var/adm/ras/目录下还记录了很多其它alog日志如bootinst.log,nimlog,dumpsymplog,conslog共五种类型等。)它通过rc.boot启动脚本调用alog命令来把启动日志生成到日志文件里。
2、alog创建并维护创建自标准输入的固定大小的日志文件。
命令用法:
#alog �f LogFile [-o]              显示日志文件的内容
#alog �f LogFile | [ [-q ] [-s Szie] ]   将数据记录到指定的日志文件
#alog �t LogType �V              显示指定日志类型的冗余值
#alog �L [ -t LogType]             显示指定日志类型的当前属性
3、查看boot日志,可以使用smit alog_show或alog命令来查看。
#alog �o �t boot
8.2错误日志工具
8.2.1软件服务辅助包
包括bos.rte.serv_aid和bos.sysmgt.serv_aid包,前者包含errlog子例程和error守护进程,后者包含errclear,errdead,errloger,errpt等命令
8.2.2管理错误日志
1、配置一个错误日志文件(/var/adm/ras/errlog)
    a、显示当前错误日志文件名、文件大小和缓冲区大小,这些信息配置在错误日志配置数据库中。
    #/usr/lib/errdemon �l
    b、改变日志文件名为/var/adm/ras/errlog.test
    #/usr/lib/errdemon �i /var/adm/ras/errlog.test
    c、改变日志文件大小
    #/usr/lib/errdemon �s 8192
    d、改变buffer大小
    #/usr/lib/errdemon �B 16384
    如果改动的buffer大小比原来大,那么马上生效,如果比原来小,则要等到系统重启后error守护进程(/usr/lib/errdemon)重启。而且注意buffer设置不能太大也不能太小。
2、启动和关闭错误日志守护进程
    #/usr/lib/errstop
    #/usr/lib/errdemon
3、清理错误日志
可以使用errclear命令行或者smit errclear来清理日志。
#errclear �d S 0   清理所有软件报错。
4、使用errpt显示日志报告
    #errpt �N hdisk0
    #errpt �a �j  ErrorID
5、拷贝错误日志到软盘或磁带机
    #ls /var/adm/ras/errlog | backup �ivp
    #ls /var/adm/ras/errlog | backup �ivpf /devrmt0
6、日志维护
    使用errlogger可以记录一个操作员信息日志,如
    S85:/ #errlogger "Error log cleaned "
    S85:/ #errpt
IDENTIFIER TIMESTAMP  T C RESOURCE_NAME  DESCRIPTION
AA8AB241   0329105505 T O OPERATOR       OPERATOR NOTIFICATION
8.3 系统dump工具
当系统发生不可意料的中断时系统dump拷贝相应的核心设备到dump设备,dump设备可以配置成磁带机或者一个系统中的逻辑卷,有两个dump设备。(为什么要有两个)。
默认情况下主dump设备是/dev/hd6(同时也是paging space),第二个dump设备是/dev/sysdumpnull。
Dump可以有系统触发或有用户触发,当dump发生是,系统可能挂住或者重启,取决于我们怎么设置"Automatically REBOOT system after a crash"选项。
8.3.1管理一个dump设备
用sysdumpdev命令来动态配置dump设备。
1、        显示当前dump设备及相关设置
#sysdumpdev �l
2、        改变主dump设备到/dev/hd9
#sysdumpdev  -P �p /dev/hd9
3、        估计当前系统dump的大小
#sysdumpdev �e
4、        显示前一个dump的状态信息
#sysdumpdev �L
上述命令也可以在smit dump中来做。
8.3.2系统触发的dump
一个系统触发的dump是写入主dump设备。
要理解LED面板上闪烁的888错误信息。
当面板显示888时,如果按下reset键,这时可能会显示102,表明发生了一个不可意料的系统挂住。这时再按下显示的"mmm"代表Crash code,再按下reset显示的"ddd"代表System dump codes。注意,这时显示的代码和3.3.4(启动时显示的LED代码不一个意思)
Crash codes: (P198-199)
    000:不可意料的系统中断
200-208:
700rogram interrupt
System dump codes:
    0c0: dump成功完成
    0c3: dump被抑制
    0c4: dump完成不成功,没有足够的空间,部分dump可用
    0c5: dump没法开始
    0c7: Network dump正在进行中
    0c8: dump disabled.系统没有配置一个dump设备
    0c9: 系统触发的dump开始。
8.3.3用户触发的dump
1、使用sysdumpdev �e检查dump需要的大小和使用lsps �a检查dump设备大小,确定时候需要扩大dump设备的大小。
2、开始dump
有三张方式用户可以触发dump,使用sysdumpstart命令,在把机器切换到service mode,(使用#sysdumpdev �K )使用按键组合:<CTRL>;+<ALT>;+NUMPAD1>;,或者按下reset键。
3、确定一个系统dump
使用crash命令,其中KernelFile是当前系统内核文件,如/usr/lib/boot/unix。
#crash SystemImageFile KernelFile
在crash交互模式下,可以使用stat子命令来确定dump文件的详细信息以便确定dump是否成功。
4、拷贝系统的dump
使用pax命令,它可以支持三种格式的输出,pax、cpio、ustar。
用法:
创建一个大于2G的文件tmp.pax包含有/home/soft.tar和/home/temp.tar
#pax �x pax �wvf tmp.pax /home/soft.tar /home/temp.tar
拷贝dump文件dump.out到磁带机rmt0
#pax �wvf /dev/rmto dump.out
解包/home/test.tar 到当前目录
#pax �rvf /home/test.tar
拷贝test.tar文件到/tmp目录
#pax �rw test.tar /tmp
其实,用法跟tar差不多,当记住,-r参数表示从标准输入读,-w表示写入标准输出。
5、        snap命令
收集系统信息(其实是由lslpp、errpt等命令生成)打成pax格式包,缺省输出到/tmp/ibmsupt目录。可以使用-d参数指定输出目录。比如
#/usr/sbin/snap �gfkD �o /dev/rmt0


Chap 9系统备份和恢复
9.1保存信息(备份数据)
可以使用多种多样的方式,如mksysb系统命令,还可以使用tar、cpio、dd和backup命令,还可以使用savevg命令来备份非rootvg(用户定义的vg)
9.2系统备份带的展现
系统备份带最前面有三个blocksize=512的image:BOS Boot image,mkinsttape image和dummy.toc。
1、BOS boot image:包含一份系统内核和设备驱动的拷贝用于从备份带中启动用,是由命令bosboot命令产生的。
2、miinsttape image:包含三个重要文件
./tapeblksz文件包含磁带设备设置block大小。
./bosinst.data文件包含定制的BOS安装过程。
./image.data文件包含BOS安装过程中系统的设置信息,比如rootvg中lv和文件系统的大小,命名等。你可以在使用mksysb命令之前定制该文件,也可以在备份过程中使用mksysb �i命令来生成一个新的./image.data到磁带中去,同样也生成在该系统的根目录下。在smit mksysb同样也有这样的选项(是否创建新的image.data)。
image.data文件里有以下参数要注意:SHRINK、BOSINST_FILE、EXACT_FIT。
3、dummy.toc文件。
注意:
1、        mksysb备份rootvg中所有的mounted的文件系统,它不备份裸设备。
2、        可以使用/etc/exclude.rootvg来排除不想备份的文件,文件系统或目录,使用-e参数才能使mksysb使用这个文件。
3、        做系统备份时/tmp文件系统至少要有8-12MB空间。
4、        如果你的磁带不做压缩时你可以使用-p参数。
9.3校验系统备份
可以使用smit方式,也可以使用 restore命令。
但如果bosinst.data文件中PROMPT设置为NO时,这时会做系统恢复。
9.3.1使用smit校验一个备份带
使用smit lsmksysb来展示备份带的内容。
9.3.2使用restore命令来校验一个备份带
mksysb命令实际上时调用backup命令来完成的,所有如果不想用smit的话,就要使用restore命令来校验一个系统备份带。
由于备份数据是从第四个block(文件标记file marker)写起的,所有要使用tctl命令来控制磁带的移动。
1、        倒带
#tclt �f /dev/rmt0 rewind
2、        把磁带倒到第四个file marker
#tclt �f /dev/rmt0 fsf 3
3、        读取磁带的内容并重定向到一个临时文件中去。
#restore �Tvqf /dev/rmt0.1 >; /tmp/mksysb.log
也可以跳过第2步直接读取:
#restore �s4 �Tvqf /dev/rmt0.1 >; /tmp/mksysb.log
9.4保存用户数据
9.4.1备份用户数据
backup命令可以单独用来备份rootvg或其它vg上的用户数据,用法如下:
backup �i  [-f Device] [-o] [-q] [-v]
-i:从标准输入中读取
-f:指定输出设备
-v:显示备份过程中的信息
如要备份/home/xtjk中的文件:
#cd /home/xtjk
#find . �depth | backup �ivf /dev/rmt0或
#find . �print | backup �ivf /dev/rmt0
恢复时要到当前目录/home/xtjk下,使用restore命令
注意:不能直接使用backup �i命令如#backup �ivf /dev/rmt0 /home/xtjk来备份数据,否则会挂住。
9.4.2备份用户vg
savevg可以用来备份用户定义的vg中的所有文件,前提是该vg必须是varyon,而且文件系统必须mount。
可选命令参数:
-e:指定不备份的文件,在/etc/exclude.vgname中定义
-f Device:指定备份设备,默认采用/dev/rmt0
-i:通过调用mkvgdata命令来产生data file(是否就是uservg.data,类似mksysb产生的image.data)。
如:#savevg �if /dev/rmt0 myvg
9.4.3备份裸逻辑卷
使用dd命令。
1、        确定磁带的block size大小
#tclt �f /dev/rmt0 status
2、        如有需要,改变磁带的block size大小
#chdev �l rmt0 �a block_size=<tape block size>;
3、        备份裸lv到磁带设备
#dd �if=/dev/lvname of=/dev/rmt0 ibs=512 obs=<tape block size>;
9.5恢复信息
9.5.1恢复rootvg
使用mksysb备份带可以恢复整个rootvg。
1、        检查系统是否支持从磁带启动
#bootinfo �e       
是否返回1。
2、        改变service模式下启动顺序
#bootlist �m service rmt0
#bootlist �m service �o
3、        放入备份带,重启机器,听到嘀声后按F5,系统采用service模式,从备份磁带引导,进入选择安装或恢复rootvg菜单选择。
9.5.2恢复非rootvg的vg
使用restvg命令,还可以通过改动/tmp/vgdata/uservg/uservg.data文件,采用这个工具来缩小该vg中的文件系统大小。
#restvg �f /dev/rmt0
9.5.3恢复文件系统
使用restore命令可以用来恢复使用backup命令做过备份的文件系统。
1、        显示备份磁带的内容
#restore �Tvf /dev/rmt0
2、        恢复使用backup �i命令做过的备份的数据
#restore �xvf /dev/rmt0 /home/xtjk
3、        恢复整个文件系统备份
#restore �rvf /dev/rmt0 /data
9.5.4恢复时的错误
9.5.5确定块大小(block size)
当磁带块大小设置不当时,会碰到读磁带时有问题。
确定磁带块大小有两个办法。
1、        使用tcopy命令
#tcopy /dev/rmt0
2、        使用dd命令
#dd �if=/dev/rmt0 bs=128k count=1 | wc �c
3、        改变块大小设置
#chdev �l rmt0 �a block_size=1024


Chap 10 系统性能
10.1使用topas命令
topas是Aix系统的性能健康工具。
命令参数:
-d NumberOfHotDisks:显示的硬盘的数量
-i:间隔时间
-n:显示网络接口的个数
-p:显示的最大进程数
如:#topas �i5 �n �p10
在topas命令屏幕下,还可以使用子命令。
10.2使用vmstat命令
10.2.1Paging活动统计
数据分析:
1、        比较大量的pi和po意味着大量的paging活动,可能是内存瓶颈引起。
2、        过高的fr:sr比例可能预示着内存瓶颈,当并没有一个确定的比例。
10.2.2CPU统计
数据分析:
1、        估计CPU负载的一个因子可以看run队列的大小。
2、        在当用户系统中,us+sy大于90%或者在多用户系统中,该值大于80%都意味着CPU负载较大。
3、        wa值大于40%意味着磁盘子系统是繁忙的或者该工作负载是disk-intensize。
10.2.3确定固定存储的I/O
使用#vmstat �s命令,从page ins,paging space page ins和page outs,paging space page outs来计算一个系统存储的由VMM触发的I/O(不包括paging space I/O),就是纯粹写入和写出硬盘存储的I/O。
pages ins �paging space page ins
pages ous- paging space page outs
vmstat �s统计量是从系统初始化以来(就是重启)开始的。
10.3使用iostat命令
10.3.1CPU的状态
数据分析:
1、高的iowait意味着内存不够或者是效率不高的I/O子系统。可以采用以下办法来优化。
a、        减少同一个物理硬盘上的活动lv或文件系统的数据,平衡PV上的I/O。
b、        让一个lv尽量跨不同的pv。
c、        创建多个JFS logs,并把它指定由于某些特定的文件系统。
d、        备份和恢复文件系统以减少碎片。
2、可能有些应用就是属于高I/O的。
10.3.2磁盘统计
要打开系统的"Continuously maintain Disk I/O history"。
10.4使用vmtune命令
本命令和相关资源放在/usr/samples/kernel目录下。
该命令只能由root来执行,通过vmtune改动调整过的变化一直保持到下次重启,也就是说,如果要是机器重启后调整还能生效的话,要把vmtune命令写入启动脚本文件如inittab里面。
10.5控制资源使用
10.5.1使用nice和renice命令
注意两者的区别,nice是使命令处于一个新的优先级下,如:
#nice �n 15 cc �c *.c
而renice使改变一个运行中进程的优先级,既降低优先级用-5,提高优先级用+5。
#renice �n �5 16308
其中16308使进程号。
10.5.2工作负载管理(workload manager-WLM)
10.6lv的性能
使用lv �m命令可以检查lv中个PP分区的分布,如果由多个copies(最多3个),都可以显示出来,如果发现PP分布不连续,则可能影响lv的性能,可以使用reorgvg命令来重新组织lv中PP的分布。
#reorgvg rootvg hd10opt
#lsvg �m hd10opt
10.6.2对顺序I/O读写调整系统
由两种技术可以用来调优具有大量属性读写操作的系统性能:条带化和VMM调节。
VMM调优的建议值:
Minpgahead  2
Maxpgahead  16×number of disk dirvers
I/O requests  Equal to maxpgahead
Maxfree和minfree参数设置必须经过调查一下系统的情况后,在作出调优。如
Minfree 128
Maxfree minfree_maxpgahead
10.7交换分区的管理
10.7.1太小的交换分区
系统可以会由各种各样的提示。
10.7.2管理要点
1、        不要在一个物理硬盘上建立多于一个的交换分区(paging space)
2、        要避免在一个负载较重的物理硬盘上建立交换分区。
3、        尽量使每个交换分区都基本一样大小。
4、        不要让一个交换分区分布到不同的硬盘上,如果需要,在另一个硬盘上建立一个新的交换分区。
5、        把逻辑分区分布到不同的硬盘控制器所在的硬盘上。
10.73管理缺省的交换分区(hd6)
减小hd6交换分区的大小:基本思路,采用替换法,hd6->;paging00->;hd6,但要重启两次机器。注意:在4.2.1及以后的版本中,不能把交换分区设置低于32MB。
步骤:
1、        创建一个临时的交换分区paging00
#mkps �a �n �s 30 rootvg hdisk0
2、        改变hd6的属性,使其在重启后不激活。
#chps �a n hd6
3、在启动脚本/sbin/rc.boot中把激活hd6改为激活paging00。
swapon /dev/hd6改为swapon /dev/paging00
4、改变dump的主设备(因为默认就是hd6)
#sysdumpdev �P �p /dev/paging00
5、重新创建boot image
#bosboot �a �d /dev/hdisk0
6、        重启机器
7、        删除hd6
8、        创建新的交换分区hd6,但大小可以减小到你想要的大小(本例为120MB)
#mklv �t paging �y hd6 rootvg 30
9、        改变dump的主设备为hd6
10、        改变/sbin/rc.boot脚本
把swapon /dev/paging00改为swapon /dev/hd6
11、        在硬盘中重建boot image。
12、        改变hd6属性,让它在系统重启后可以指定激活,同时改变paging00属性,让其在系统重启后不激活。
#chps �a y hd6
#chps �a n paging00
13、        重启机器并删除paging分区。
在5.1版本中可以使用chps �d命令来动态减小hd6交换分区的大小,它创建了一个临时的boot image和一个临时的/sbin/rc.boot指定到临时的主交换分区,以便系统总是可以安全的重启。
不建议把hd6移植到别的vg上。
可以使用migratepv来移植hd6到同属于rootvg的另外一块硬盘上。
#migratepv �l hd6 hdisk0 hdisk1
10.7.4动态使交换分区不活动
在5.1版本中,可以使用swapoff或smit swapoff来使一个交换分区不活动。
       
Chap 11 Networking
11.1 适配卡、接口、和配置问题
11.1.1添加一个网络适配卡(network adapter)
如果系统不支持热插拔卡,则要关闭和重启系统。
1、        检查系统上已安装的适配卡
#lscfg |grep �i adaper
2、        检查已定义的接口
#lsdev �Cc if
3、        关闭系统并下电(对于支持热插拔功能的系统,则不用关闭系统)
4、        安装新的网络适配卡
5、        加电到正常模式
6、        系统启动时自动运行cfgmgr命令,会自动检测新装的网络适配卡并且添加相应的接口。
注意:如果系统运行完cfgmgr命令后,提示一下信息:系统里没有安装某设备驱动包
则你必须把这些驱动包安装到系统中去。
7、        重新运行lscfg 和lsdev确认网络适配卡已经正常地添加到系统中去。
11.1.2移除一个网络适配卡
在移除一个网络适配卡之前,要记得先用ifconfig命令来删除系统中该网络适配卡和网络接口的定义。
ifconfig Interface [  AddressFamily [ Address [DestinationAddress ] ] [Parameters… ]  ]
主要参数:
alias:网络接口别名
delete:删除接口的网络地址
detach:从网络接口列表里删除一个接口
down:使网络接口不活动
mtu Value:设置mtu值
netmask Mask:网络掩码
up: 激活接口
步骤:操作之前,确认没有应用或进程在使用你准备要移除的网络接口上,同时系统可能需要重启机器。
1、        使接口不活动
#ifconfig Interface down
2、        删除网络接口列表里所有的网络接口定义
#ifconfig Interface detach
3、        从系统中删除网络接口定义
#redev �dl Interface
4、        删除网络适配卡的定义
#rmdev �dl Adapter
5、        关闭系统并下电
6、        移除该网络适配卡
7、        系统加电
11.1.3适配卡和接口配置问题
网速(Ring and media speed)配置问题
更正网速问题步骤:
1、        从网管那里获得正确的网络速度
2、        移除所有的网络接口
#ifconfig Interface detach
3、        使用smit chgtok-令牌环网卡(或者smit chgnet-以太网卡)
有相应的Ring speed或Media speed选项。
线缆类型配置问题:
smit tcpip里有Your CABLE Type选项
网络接口的MTU大小问题:
网络包长度可以从60 bytes到65535 bytes大小不等,缺省情况下,16Mb的令牌环网络接口的传输包大小是1492 bytes,而一个以太网接口是1500 bytes大小。
在同一个本地网中,网络通信包需要同样大小的MTU。
调整MTU大小步骤:
1、        检查一个网络接口的MTU大小
#lasttr �El Interface
2、        使网络接口不活动
#ifconfig Interface down
3、        用ifconfig来调整MTU值
#ifconfig Interface mtu Value
如:#ifconfig en0 mtu 1500
也可以用chdev命令来调整MTU
#chdev �l Interface �a mtu=Value
11.2 TCP/IP
11.2.1 TCP/IP 的初始化
/etc/rc.tcpip脚本:
与tcp/ip有关的守护进程:inetd、gated、routed、named、timed、rwhod。
注意:在一台主机里不能同时运行gated和routed守护进程,或者会带来不可意料的结果。
还有一些进程是从/etc/rc.tcpip脚本去启动的:lpd、portmap、sendmail、syslogd。
注意:如果在系统启动的时候/etc/rc.tcpip脚本在/etc/inittab中没有被初始化,而且你有一个图形界面,则要确认你的/etc/rc.dt(也是在/etc/inittab脚本里)没有被初始话,或者你的控制台会被挂起,而且由于telnet、rlogin等连接通讯工具没有被初始化,所以你没办法恢复。
11.2.2启动和关闭tcp/ip守护进程
1、        启动和关闭某一进程
#startsrc(stopsrc)  �s Daemon
2、        关闭所有的tcp/ip守护进程
#stopsrc �g tcpip
3、        像在系统启动过程中(IPL)过程中启动所有的tcp/ip守护进程一样,
#/etc/rc.tcpip
注意:不要用#startsrc �g tcpip命令来启动所有的tcp/ip守护进程,因为这样会启动定义在ODM中的所有属于tcpip组的守护进程,包括routed和gated服务进程。
11.2.3inetd守护进程
#列出inetd里启动的子守护进程
#lssrc �ls inetd
刷新inetd进程
#refresh �s inetd
11.2.4inetd及其子进程的错误
1、        首先用ping检查网络的连通性
2、        检查inetd是否有启动起来,包括它的子守护进程如telnet、ftp、rlogin、rexec等。
3、        如果以上都没有问题,则要检查是否虚终端(pseudo-terminal)是否够用。
#smit chgpty
缺省情况下,但一个rloing、telnet、rsh命令在系统中打开一个会话时,或者在图形终端中打开一个shell窗口时,系统会产生(spwan)一个虚终端会话。
11.3 IP地址、网关和子网
11.3.1 IP地址
A、B、C、D类地址
Netstat命令:
-rn:可以查看网络接口的路由表。
-in:可以查看网络接口信息,包括MTU大小、IP地址、流经网络接口(流入、流出)的数据包数量。
改变网络接口的状态:
1、        使网络接口不活动
#ifconfig tr0 down
#netstat �ni  可以看到该接口带*号,但#netstat �rn没变化
2、        删除网络接口
#ifconfig tro detach
这时,用netstat �ni或-rn都看到变化。
3、        重新激活或添加原来删除(detached)的网络接口
#ifconfig tr0 up
11.3.2网关
使用traceroute命令
定义一个缺省网关
#route add net 0 9.3.1.74
(或者也可以用#route add default 9.3.1.74)
11.3.3子网及子网掩码的问题
不同子网的网络地址是不能相连通的。
11.4网络配置文件
本节讨论的所有文件需要权限设置为600并且所有者是root。
1、/etc/resolv.conf和/etc/netsvc.conf文件
作为DNS(域名服务)的配置文件,前者指定域名服务器的IP地址(注意是IP地址而不是hostname),并且指定该系统所在的域。
后者指定域名解析(for sendmail,the gethostbyname,gethostaddr,and gethostent subroutines,and alias resolution for sendmail)的顺序。
缺省顺序:
1、        BIND/NDS(named, 使用/etc/resolv.conf文件)
2、        NIS
3、        Local /etc/hosts文件
格式如下:
#cat /etc/netsvc.conf
hosts = nis,local,bind
也可以指定环境变量NSORDER来指定解析顺序:
#echo $NSORDER
NSORDER=local,bind
2、/etc/hosts
指定主机名和别名(aliases)和IP地址的对应关系。
3、$HOME/.netrc
用于指定rexec和ftp命令自动登录的认证信息,该文件用明文存储了登录口令。所有远程系统的口令信息对于有root权限的用户是暴露的。
4、/etc/hosts.equiv和$HOME/.rhosts文件
用于定义信任主机(远程主机用户登录本地主机时不要提高口令认证)
文件格式如下:
[+|-] HostName [+|-] UserName or @NetGroup
注意:由于文件是从上往下顺序读的,因此条项的顺序不同可能导致不同的结果。
如:为了允许用户ethan从主机H70登录则:
ethan H70
11.5 输出X-Windows和图形应用
在Aix中,可以通过指定DISPLAY环境变量来输出X-Windowns会话和图形应用到别的系统上。
DISPLAY环境变量格式:
HostName:Number.Screen
11.5.1启动X-Windows应用失败
检查以下三项:
1、        DISPLAY环境变量是否设置
2、        X-Windows 服务是否已经启动
3、X-Windows准入控制已经启用,则要确认远程系统在准入列表(access control list)
中。
对于第三条,可以使用xhost +命令:
#xhost +
#xhost +H70A
H70A being added to access control list
#xhost
access control enabled,only authorized clients can connect INET:H70A
11.6网络高级配置选项
11.6.1ARP缓存
arp命令,-a和-d选项。
11.6.2检测网络瓶颈
1、使用spray命令:
-c Count:指定发送数据包的数量
-d Delay:指定发送发送数据包中间的时延,以毫秒记
-i: 指定使用ICMP代替RPC协议来回应数据包。
#spray H70A �c 1200 �d 2
2、使用netstat命令:
可以使用#netstat �i来查看,使用-Zi来清零网络接口的统计信息。
3、        使用topas命令
#topas �d0 �i0 �p0
11.6.3 no命令介绍
no {-a | -d Attribute | -o Attribute [=NewValue] }
-a:列出属性值
-d Attribute:设置属性值回缺省值
-o Attribute [=NewValue]: 设置属性值为一个新的指定值,如果没有指定New Value,则显示属性的原有值。
比如:
1、        IP forwarding
#no �o ipforwarding   (maybe output 0)
#no �o ipforwarding=1
2、        Route revalidation(路由重定向)
#no �o routerevalidation=1
11.6.4网络调优
网络传输也是使用实际内存作为communication pool(包括mbufs和clusters)
thewall:mbuf pools分配到的最大数量的内存(以kB为单位),在no命令里称为thewall参数。
还有其它好几个参数,这里就不细写。

Chap 12 打印机
12.1打印机的colon文件
打印机和打印机数据流属性存放在colon文件中,这些文件位于/usr/lib/lpd/pio/predef和/var/spool/lpd/pio/@local/custom/目录下,前者保存预定义数据库,后者保留定制数据库。
12.2远程打印
使不同的机器可以共享打印机。基于TCP/IP网络协议和lpd守护进程。
12.2.1/etc/hosts.lpd文件
定义远程可以使用本地打印机的机器名,它和/etc/hosts.equiv类似,但权限没有/etc/hosts.equiv大。
格式如下:
+                        表示远程所有机器都可以使用本地机器上的打印机
HostNmae    表示可以使用本地打印机的远程主机名
-HostNmae
+@NetGroup         表示可以使用本地打印机的网络组
-@NetGroup   表示不可以使用本地打印机的网络组
注意:注释符号不能放在主机名前面。
12.2.2控制lpd守护进程
可以选择Now,At system restart时或同时启动或关闭lpd守护进程。同时,你也可以选择让lpd运行在Debug,Syslog,both Debug and Syslog模式下。
命令:startsrc ,stopsrc , lssrc , refresh , traceson , traceoff。其中tracerson使打开跟踪(tracing)
12.3虚打印机
12.3.1有关虚打印机的文件
/usr/sbin/mkvirpt
/etc/qconfig                        配置文件
/usr/lib/lpd/pio/predef/*
/var/spool/lpd/pio/@local/custom
/usr/lib/lpd/pio/etc/*.attatch                        包含附加类型文件
/usr/lib/lpd/pio/etc/*.config                        包含该打印机的配置文件
/usr/spool/lpd/pio/@local/ddi*                包含摘要虚打印机属性文件
12.3.2关键命令
smit mkpq
smit chpq  :改变虚打印机
smit rmpq
lsvirprt    :改变或列出虚答应机属性
smit chvirprt: 改变虚打印机属性
一个虚打印机实际上就是一个打印机的简单接口,它提供以下功能:
1、        初始化打印机
2、        为filters提供一个hook或接口
3、        格式化ASCII数据
4、        转换打印代码
5、        重置打印机到预定义状态
6、        调用程序发送开头和结尾页
7、        在任务结束时发送一个form feed
8、        确认一些文件空间,比如/tmp
它并不做:产生任何打印机语言命令,比如PCL等,也不检查数据格式的准确性,也不自动识别数据的格式。
12.3.3创建一个虚打印机
smit mkpq或者直接使用mkvirprt命令来创建。
smit printer ->;printer spooling ->;Add a print queue
12.4远程打印过程中问题
12.4.1  0781-374错误信息
但要发送一个打印任务到远程打印服务器杀过那却提示:A remote host refused an attempted connect operation。
在远程打印服务器上启动lpd服务进程。
12.4.2 0781-202错误信息
当你在打印客户端使用lpstat时显示:0781-202 youre host does not have line printer access。
这时要在打印服务器编辑/etc/hosts.lpd,把客户端主机名加入。
12.4.3如何进行远程跟踪(remote trace)
使用iptrace工具可以进行远程跟踪,其命令格式如下:
iptrace �p printer -a -b �s source_host �d dest_host /tmp/trace.out
启用iptrace命令后,打印到远程打印机上:   #enq �Pqueue_name filename或者#lsstat �Vqueue_name,然后查看/tmp/trace.out文件是否增长,如果没有,可能iptrace命令没有用好,可以重启iptrace命令,然后对trace.out文件进行如下处理:
#ipreport /tmp/trace.out >; /tmp/report.out
12.5过虑器(filters)
过滤器功能可以使用命令行、脚本或者一个虚打印机来处理。
(略)
12.6清除和组织打印队列在Aix中挂起
Aix中在/etc/qconfig来定义队列,它并转换成一个二进制文件/etc/qconfig.bin。当qdaemon正在打印时,它被加载入内存,因此,对/etc/qconfig任何修改都要等到原有的打印队列完成后,新的队列进入后才能生效。
当一个大任务或者一个队列处于DEV_WAIT状态时,对队列的任何改变(/etc/qconfig)都有可能导致队列挂住(hang)。
1、        查看队列的状态
#lpstat
2、        如果有队列处于DEV_WAIT状态下,则停止qdaemon服务进程
#stopsrc �c �s qdaemon
(题目:如果有队列处于STOPPED状态,则要重启qdaemon服务进程。课后题目)
3、        使用lpstat或evq �sA来查看DEV_WAIT状态的任务,等待所有RUNNING的队列打印完毕,不要担心处于QUEUED状态的队列,因为在Aix 4或更高版中并不显示。
4、        清除处于DEV_WAIT状态的任务。
5、        如果还不能清除该任务,则查看/var/spool/lpd/std目录,查看带p.开头的文件,它记录了qd进程的进程号,把这些进程杀掉。
6、        这样,应该就可以清除干净,这时可以启动qdaemon服务进程啦。
总结:任务在打印时不要随意改变或添加打印队列,在做任何改变后要重启qdaemon进程。
12.7清除一个打印任务
要删除一个打印任务,
1、        查看打印队列的状态
#lpstat �v lpforu
2、        使用以下任一命令来删除一个打印任务(队列)
#qcan �P lpforu �x 3
#cacel 3
#lprm �P lpforu 3
#enq �P lpforu �x 3
表示删除Job号为3的任务。
3、        使用qchk来检查打印队列
#qchk �P lpforu
其中lpforu是虚打印机名
12.8 holding和释放打印任务
使用qhld命令,加-r为释放该任务。
#qhld -#13 �P lpforu    表示holding任务号为13的打印任务
#qhld �r -#13 �P lpforu  表示释放任务号为13的打印任务
12.9打印过程中的问题解决
12.9.1 qdaemon不会启动
检查/etc/qconfig是否有错误行。
升级后qdaemon,enq和digest不匹配。
12.9.2不能添加打印队列
可能是文件系统空间/tmp满。
12.9.3满的文件系统
12.10设置缺省的打印机
可以使用smit qdefault来设置或者使用定义LPDEST环境变量来设置
1、        使用smit qdefault来设置
2、        设置LPDEST=NewValue; export LPDEST或者setenv LPDEST=NewValue


Chap 13异步点对点协议
作为SLIP的一种替换选择,PPP提供了一种基于点对点介质上传送多协议数据包的标准方法。它包含以下三层:
包装多协议数据包的方法,PPP支持TCP/IP网络层协议
链路控制层(LCP)
网络控制层,PPP支持IPCP(Internet Protocol Control Protocol)用于协商一个TCP/IP连接。
13.1配置一个异步PPP服务端
要有以下六个步骤:
1、        设置PPP连接控制配置
2、        分配PPP IP地址
3、        设置特定的PPP拨入ID
4、        添加TTY端口
5、        配置modem
6、        启动PPP
13.2设置PPP控制连接
要设置以下几项:
PPP subsystem name
Max server connection: 即可以拨入(当前机器作为服务端)的客户端连接数。
Max client connections:同时可以拨出的连接数。
Max demand Interfaces: 最大数量的同时的对等连接数。
Max IP interfaces:    系统的PPP接口,等于max server connections,max client connections,和max demand connections的总和。
Max async HDLC attachment: 当前允许激活的PPP会话
可以使用smit ppp来设置这些参数。
设置完毕,会产生/etc/ppp/lcp_config文件,该文件记录这时设置参数。
13.3指定PPP IP地址
1、        选择一个未使用的IP地址
2、        把远程的(拨入方)机器的IP地址和主机名加入本机的hosts表中
3、        使用smit ppp来添加PPP IP地址,就是配置Starting Remote IP address未远程主机的IP地址。
4、        选址添加一个服务器接口
5、        这时会产生一个if_conf文件,/etc/ppp/if_conf
6、        确定要打开ipforwarding功能,缺省情况下,它是关闭的。
#no �a | grep ipforwardng
#no �o ipforwarding=1
7、        启用ARP代理,使所有到client的数据流都可以路由到本主机上(服务端)
语法:arp �s type hostname  harware address  pub
#arp �s 802.3 10:0:5a:8c:3c:fa pub
8、        确定ARP
13.4添加一个PPP登录用户
1、        使用smit user添加一个用户,属于uucp组
2、        设置该用户属性,不能远程登录,别人不能su
3、        改变用户密码
4、        在用户的.profile添加执行pppattachd一行
exec /usr/sbin/pppattachd server 2>;/dev/null
5、        使该用户登录时不要更改口令
#pwdadm �f NOCHECK pppuser
6、        在/etc/ftpuser添加该用户名,使其不能ftp。
13.5添加tty端口
先添加一个tty终端,接着吧tty加入/etc/uucp/Devices文件
1、        编辑/etc/uucp/Device文件
2、        加入以下一行
Direct tty# -baud-rate direct
如:Direct tty3 � 9600 direct
3、        保存退出。
11.4配置拨号modem
11.5开始PPP控制服务进程
使用startsrc和lssrc 等来控制pppcontrold服务进程
13.5 Aix PPP客户端
13.5.1配置一个PPP客户端
比如,在/etc/ppp/lcp_config可以配置如下:
server_name  goofy
lcp_server    0
lcp_client     1
lcp_demand   0
num_if       1
num_hdlc     1
其它一样配置tty和配置拨出modem等步骤。
接着启动PPP控制服务进程:pppcontrold进程。
可以使用#ifconfig pp0来查看端口活动。

 

Chap 14 cron守护进程和crontab
可是使用crontab或at命令来定制定时任务,也可以使用batch命令因为它是调用at命令。
14.1at命令
at命令从标准输入读取命令行,并把结果从标准输出和标准错误mail给你,除非你进行了重定向。
格式:at �f filename �t CCYYMMDDhhmmSS Increment
可以使用noon,midnight,now来代替-t参数,以指定执行时间。
14.2at命令储存池的目录位置
位于/var/spool/cron/atjobs(crontab位于/var/spool/cron/crontabs)目录下,由每个at命令创建的定时认为所产生的文件。可以使用atq命令来查询这些任务。
#cd /var/spool/cron/atjobs
#atq
root.915213600.a                Fri        Jan 1        12:10:00 CST 2005
执行时间就是12:10:00,即at任务即将执行的时间,而用ls �l /var/spool/cron/atjobs显示的文件时间是创建该at任务文件的时间。
可是使用at �r来删除该任务。
14.2crontab文件的位置
位于/var/spool/cron/crontabs目录下,没有用户有定时认为的用户有一个和用户名同名的文件。
14.3确定任务的运行
可以使用atq命令来查看由at命令定制的定时任务。
对于crontab任务,它会产生运行日志并存储在/var/adm/cron/log文件中,包括由该定时任务的运行情况,运行时间,进程号,任务人等。而且cron守护进程也会生成邮件把标准输出和错误输出mail给该任务的所有者。除非你在crontab中进行重定向。
14.4crontab文件记录的格式
这个大家都很熟悉,不要多写啦。
14.5定制定时任务
在使用at命令时,可以巧妙的使用"嵌套",比如,为了使一个命令可以每隔一段时间如5m运行一次,编写/appl/program文件:
print program executed at `date +%H:%M >;>;/data/output
at now +5 minutes �f /appl/program >; /dev/null 2>;&1
同时开始第一个任务:
at now �f /appl/program >; /dev/null 2>; &1
这时/appl/program就是每隔5m不断运行,一直到你用at �r命令来删除该定时任务。
14.6crontab命令使用权的控制
通过/var/adm/cron/cron.allow和cron.deny文件来控制那个用户可以或不可以使用crontab命令。该文件的格式是每个用户名一行。
注意,如果cron.allow文件存在,则root用户必须在里面。
以下任一情况,用户都不能使用crontab命令
1、        cron.allow和cron.deny都不存在,这时只有root可以使用。
2、        cron.allow存在,但该用户名没有在里面
3、        cron.deny存在,但该用户名在里面。
系统默认情况下,在/var/adm/cron下都又at.deny和cron.deny文件,但这两个文件都不包含任何用户名。也就是说,在默认情况下,任何用户都可以使用at或cron。
at命令使用权限同样由/var/adm/cron/at.allow和at.deny来控制,规则如上。
14.7创建和改变crontab文件
建议使用crontab �e命令行来操作,不使用直接编辑/var/spool/cron/crontabs目录下的文件,因为那样的话,要刷新以下cron守护进程。
14.8确认定时任务的时间顺序
因为普通用户deploy没办法列出/var/spool/cron/crontabs/deploy文件内容,所以要采用crontab �l的方式来列出定时任务。
/var/spool/cron/crontab或atjobs目录的权限都是770,属主是bin:cron。
14.9检查crontab提交的时间
使用crontab �v命令可以检查crontab提交的时间,如果只是使用crontab �e来编辑,但没有改变内容,提交时间会不会改变。(经确认,会改变)
14.10删除crontab文件
可以使用crontab �r来删除本用户定制的所有定时任务,所有千万不能使用root来执行这个任务。还是使用crontab �e来编辑会比较安全。
14.11使用crontab来改变一个用户的cron文件
可以使用crontab file命令来改变一个用户的crontab内容,但要注意,此时该用户的原有内容会被该文件的内容所代替,而不是追加到后面去。
$crontab �l >; deploy.schedule
用另外一个用户登录,
$crontab  /deploy/deploy.schedule

Chap 15编辑和查看文件和字符串
15.1vi文本编辑器
三个模式:命令模式,文本输入模式,最后一行(last-line)模式。以及如何切换。
vi参数。
vi的用法(略)
15.3查看文件和字符串设置
cat的用法
    用来连接或显示文件内容。
1、        连接多个文件
#cat /etc/passwd /etc/hosts >; yourfile
2、        隐瞒有关不存在文件的错误信息
#cat �q /passwd
3、        追加文件到另外一个文件的后面
#cat /etc/filesystems >;>; yourfile
4、        添加从终端输入的内容到一个文件
#cat >;>; yourfile
Create new user bob.
Ctrl+D
5、        连接多个文件,同时从键盘输入添加内容
#cat /etc/passwd - /etc/hosts >;yourfile
6、        连接多个文件包括从一个命令的输出
#ls | cat /etc/passwd - >;yourfile
15.3.1使用pg命令查看文件
从指定的文件名参数中去读取一个文件并输出到标准输出中去,如果你指定一个"-"作为参数或没带任何参数是,它从标准输入中读。
15.3.2使用view命令查看文件
view=vi �R,即以只读模式开始vi编辑器。
15.3.3使用echo命令
echo [ String … ]
1、        显示一条包含特殊字符的信息
echo "\n\nGone to lunkch.\nWill be back at 2:00."
将会在屏幕上跳开三行并显示以下信息:
Gone bo lunch.
Will be back at 2:00.
2、        使用带有模式匹配字符的echo命令
echo The back-up files are: *.bak
3、        添加单一行文本到一个文件
echo Remember to set the shell search path to $PATH. >;>;notes
4、        写一条信息到标准错误输出中去
echo Error:file already exists. >;&2
15.3.4使用file命令来决定一个文件类型
语法:file [-m MagicFile] [-f Filelist] [File…]
其中,MagicFile是指magic file,缺省情况下是/etc/magic文件,Filelist是指带有文件列表名字的文件。
#lf >; file.test
#file �f file.test
15.3.5在目标文件或二进制文件中使用strings命令。
在一个对象或二进制文件中查找可打印的字符串。一个字符串是四个或更多可打印字符的任意系列,以换行符或空字符结束。


Chap 16 shell和shell脚本
16.1 Korn shell或者POSIX shell
POSIX: portable operating system interface for computer environments,便携式计算机环境操作系统接口(标准)。Korn shell符合这一标准。
Korn shell(也是通常所说的POSIX shell)和Bourne和C shells有同样的特征,如I/O重定向,变量替代等。
16.2Bourne shell
bsh命令跑的就是Bourne shell。
Bourne shell既可以作为一个login shell也可以作为一个login shell下的一个subshell。只有login命令才能调用(call)Bourne shell作为一个login shell。Login通过使用特殊格式的命令格式-bsh,来调用Bourne shell,这样Bourne shell首先查找并执行/etc/profile和用户目录下的.profile。一旦执行完毕,该shell就就绪于标准输入。
16.3C shell
csh命令启动一个C shell。它的语法有的向C程序语言。
相应要查找和执行的环境变量是:/etc/csh.cshrc,/etc/csh.login和用户目录下的.cshrc和.login文件。只有root用户才能修改/etc/csh.cshrc和/etc/csh.login文件
/etc/csh.login和$HOME/.login文件只有在登录时运行一次,他们一般用于定义环境变量,需要只执行一次的命令或者设置终端参数。
/etc/csh.cshrc和$HOME/.cshrc不仅在登录时运行,而且每次csh命令或C shell脚本执行时都会激发。他们一般用于定义C shell字符,比如别名和变量。
16.4受限的shell
rsh或bsh �r命令启动一个受限的shell。
他们相比于bsh命令,有以下四个限制:
不能改变目录(使用cd命令)  可以往下一层吗,(经确认,也不行)
不能试着PATH和SHELL变量参数
不能执行含有/的路径或命令名
不能重定向输出
16.5设置shell环境
当一个用户登录时,它会执行用户环境文件并拥有这些环境一直到它正式退出 。
用户shell环境文件有两种类型,一种是控制整个系统所有用户的,就是/etc/profile和/etc/environment文件,另一种是对单个用户的,就是$HOME/.profile和/$HOME/.env文件。但是.env有效的前提是在用户的.profile里要指定export ENV=$HOME/.env。
/etc/profile,/etc/environment和.profile文件在登录是运行一次,但是,.env文件在每次打开一个新shell或一个窗口时都会运行。
16.5.1 /etc/profile文件
系统用户登录时执行的第一个文件,该文件定义了变量,文件生成的掩码,终端类型等。
16.5.2 /etc/environment文件
系统基本的环境变量。
16.5.3 .profile文件
    定义你个人的工作环境,在用户根目录下。可以覆盖/etc/profile文件中定义的变量。同样对于C shell或Korn shell,你可以使用.cshrc或.kshrc文件来定制你的C shell或Korn shell。
16.5.4 .env文件
在.profile文件中设置export ENV=$HOME/.env。该文件用于定义你个人的工作环境。可以覆盖/etc/environment文件中的定义。
16.5.5通过命令行改变环境
可以通过命令行来改变用户的环境,为了检查个人环境变量,使用echo命令,如:
#echo $LANG
en_UK
注意$字符的使用,它指明后面的字符串时一个shell变量,而不是字符串本身。
16.6创建和执行一个shell脚本
16.6.1脚本执行的注意点
1、创建并执行脚本的一般步骤,一般用编辑器编辑完一个脚本后,有两种执行方式,一种可以直接采用shell命令(如ksh,bsh,或csh)带该脚本来执行该脚本,还有一种是把该文机变成可执行文件,进行执行。
2、关于脚本运行时是在哪种shell下运行的,有三种情况,一种是以可执行文件命令行来直接执行该脚本文件的,这时就是用户所在的shell环境;第二种是可以在脚本文件中指定特定的shell来运行,如在开头指定#!/usr/bin/ksh。第三种,即使在脚本文件开头有指定特定的shell,但如果采用shell命令,比如使用#ksh myscript,那么该文本就是运行在Korn shell。
16.6.2创建一个脚本
1、一般格式如下:
指定#!/usr/bin/ksh
脚本注释
搜索路径
脚本变量或变元
标准输入、输出和标准错误输出
退出
2、重定向
三种I/O类型:stdin(0),stdout(1)和stderr(2)。标准输入一般来自于键盘输入,标准输出一般到屏幕,标准错误也是到屏幕。但你可以进行重定向。
2>;      表示重定向标准错误输出
1>;&2    表示重定向标准输出到标准错误输出
2>;&1    表示重定向标准错误输出到标准输出
16.6.3测试shell脚本
    可是使用ksh带参数来方便地调试你的脚本,如-n参数检查脚本地语法错误但不运行他们,-u参数运行脚本中的命令,但
查找一个ksh命令说明。
 
感谢Juilya 圣骑士整理了本文.From: 中国Linux/Unix社区


Oct 27, 2008

网站计算排名指数

各字段说明
第一项
排名

Index 指数, 影响, Page 总分, BlogInfluence, Technorati (调整后) 的名次加总后排序

Index指数前面是计算出来的分数,后面蓝色字的是排名
分数是将 Google Web Page(含 http:// 及 不含) + Google Link + YahooLink + Blogger Search (link 与 url 加总) 及 Technorati (link, blog,url 先加总) 先取 log 再相加。
影响前面是计算出来的分数,后面蓝色字的是排名
分数是将 Google 加上 Blogger 及 Technorati 的总合 然后与 Yahoo Link相乘,再开根号
Page总分前面是计算出来的分数,后面蓝色字的是排名
分数是将 Google Web Page (W and W/OUT http://) + Google Link +Yahoo Link +
Blogger Search + Technorti
重视度
Attention
前面是计算出来的分数,后面蓝色字的是排名
分数是订阅人数 加 网摘人数
第二项
[!]前面是计算出来的分数,后面蓝色字的是排名
分数是原始的
Blog Influnece 分数
GoogleGoogle 搜寻出来含 http://xn--ihqsfv2oelf1kh45dq4m Web Page 数量
LinkGoogle 及 Yahoo 用 link:搜寻出来之数字
第三项
TechnoratiTechnorati 的排行, Blog 连结数,来源数与网项数 (但系统排名是经过调整)
Blogger透过 Blogger Search找到的连结数
Bloglines透过 Bloglines 阅读 Feed (RSS,Atom, ...) 的人数
Deliciousdel.icio.us 摘录 Blog网址的人数
Furl透过 Furl找到的连结数
HemiDemi透过 HemiDemi找到的书签数
MyShare在 MyShare 加入这 Blog这网址数
BlogLook加入我的观察的数字
MyZilla加入这 Blog 网址的数
第四项
活跃度由文章发表数取 log计算出之数值
上周上周文章数
近四周四周内文章数
今年今年发表的文章总数

Oct 26, 2008

BI与搜索技术的融合趋势与技术

Note: BI理应包含着seach功能.我想还应该不仅限于文本搜索.下面这篇文章是Solo Feng从网上搜集整理的.FYI.
 
有价值的信息分散在企业的各个角落,这是信息管理领域早已公认的事实,同时也是多年来未被攻克的一个难题。在BI(商业智能)的数据挖掘技术不断演进的同时,隐藏于一个简单Web页面之后的企业搜索技术的介入,有望为企业用户提供一条快速、简单且更加理想化的信息访问通道。
在BI世界里,敏捷、准确地制作报表并分析是恒定不变的法则,但是在数据的实时展现和信息获取的易用性方面,BI与用户的实际期望值之间一直存在距离。虽然各大BI厂商都力图把自己的产品打造得更贴近客户需求、界面更友好,但BI报表定制对绝大多数的企业员工而言,依然是一个神秘的领域。企业业务信息的掘取似乎是那些统计学大腕才能胜任的工作。最近几年来,BI厂商一直在寻找让BI应用更加平民化或大众化的方法,但直到BI与企业搜索技术交叠之后,才使用户看到了BI应用下行的最绚丽曙光。
数据随时展现
作为传统BI的用户,一家名为Blue Cross Blue Shield的美国保险公司以前只能在一个固定的周期内生成BI报表,这些报表按模板索引,每两周或在每个月分发给固定邮件列表的用户。这种刚性的数据管理所导致的问题是,如何处理那些不在邮件列表中的用户请求?这些用户通过何种途径才能访问相关的报表?
BI与搜索的结合帮助这家公司找到了向更多员工交付BI报表的有效方法。在部署了IBM Web-Sphere Content Discovery之后,通过BI系统与企业级搜索应用的集成,公司成功扩大了BI数据的访问范围。与BI报表定时推送相比,新系统支持员工实时通过一个门户界面检索存储在不同报表中的BI信息,而这种检索通过简单的文本搜索即可实现,不需要编写专业的查询语句。
早期用户已经体验到这种技术融合对业务数据分析能力的提升。一位政府客户就表示,BI与搜索的融合对分布式组织具有极强的吸引力。他指出,"BI+搜索"的解决方案能够让身处不同地域的用户访问不同的独立数据库成为可能,并且平滑升级到BI和文本数据的高级检索。同时用户可以享受到超越以往的数据下钻体验,比如总公司点击地图中的某个省,就可以下钻到省公司的数据库进行分析并定制报表,这种数据展现形式远远超越了传统BI的数据交付。
数据"无来源"获取
"有了搜索技术,用户不必知道信息来自何方",这是搜索为BI领域带来的革命性改变。具体来说,就是用户在进行BI数据访问时,并不需要了解在企业搜索引擎背后数据收集、数据过滤、报表定位以及报表重建等步骤是怎样运作的。他们所要做的只是熟悉企业搜索引擎的使用方法,了解它和基于Web的消费类搜索引擎的细微差异,以及如何使用它的高级搜索选项。
这种"无来源"的数据获取方式使结构化与非结构化数据向"统一信息搜索"的目标大大前进了一步。"作为企业重要的决策支持工具,BI与企业搜索技术的结合符合技术发展的趋势,这样企业不仅能够获得经营汇总信息,发现问题后还可以立即下钻查看合同文档、Email记录、相关法律法规等。" SAS中国区解决方案经理张天峰说。
回顾BI的技术发展史,传统BI 主要提供结构化信息的搜索。但对于非结构化数据的搜索,一些BI厂商提供的文本挖掘技术覆盖能力有限。在技术的区分方面,结构化数据搜索主要包含数值计算和分析技术,非结构化数据主要围绕关键词、主题词或元数据的搜索,其核心技术仍是结构化查询。企业搜索技术将帮助企业解决非结构化数据检索问题。其关键作用是扩大数据查询和分析的范围,建立结构化与非结构化查询结果的关联关系,有效弥补BI数据挖掘和文本挖掘技术的不足。
"无来源"数据获取的理想化图景是,企业搜索引擎将成为用户访问企业所有信息的统一入口,BI与搜索的集成系统能够屏蔽结构化数据与非结构化数据的差异,无论数据存储在什么位置,系统都能够按照用户在搜索引擎中输入的查询请求交付所需的数据,用户并不需要知道这些数据存储在企业IT系统的什么位置。而在现阶段,企业搜索引擎主要关注对HTML、PPT、PDF等企业文档的检索,对于这些文档导向的数据资源,一些搜索引擎可以做出关于语义或数据的智能化判断。
黏合剂的制造者
前面提到了BI与搜索融合的两大好处,即让BI数据更易于访问,以及整合结构化与非结构化数据。但就目前BI或搜索厂商的实现能力看,BI与搜索的融合仍是一个需要不断充实和完善的理想框架,其中的技术难点我们将在后面展开讨论。但令人振奋的是,在这一技术交互地带,已经聚集了现今最主流的搜索和BI厂商,厂商之间的频繁合作大大增加了两种技术融合的黏性。
Google OneBox for Enterprise(简称Google OneBox)的推出曾被一些分析家评价为"划时代事件"。这款于2006年4月面世的产品使Google的专用搜索设备除文本之外还可以搜索保存在数据库和数据仓库中的结构化数据。Google OneBox发布后,众多BI厂商旋即展开了针对该产品的集成计划。目前,已经建立其BI产品与Google OneBox之间链接的厂商包括:Cognos、InformationBuliders、甲骨文、SAS、海波龙(Hyperion)和Business Objects。Business Objects在2006年5月推出了基于Google OneBox的企业级搜索解决方案,并计划在2007年上半年推出一套对其BI数据进行文本搜索的工具。海波龙在2007年2月推出了HyperionSystem 9 Smart Search for Google,该产品支持基于Hyperion System 9知识库的报表、仪表盘、财务报表的定制,同时能够实现对企业中多种非结构化数据(例如邮件、办公文档、文本文档、PDF文档)的搜索。
在Google OneBox表现出强劲凝聚力的同时,IBM和微软也相继发布了与此相关的新的产品和特性,同时厂商之间围绕BI与搜索的合作还迅速激发了联动效应。2006年12月,IBM和Yahoo共同发布名为Yahoo版IBM OmniFind的免费企业搜索应用,Cognos宣布其Cognos 8 Go!搜索引擎与OmniFind进行链接。Fast Search and Transfer公司将其企业搜索平台与Cognos 8 BI解决方案结合,实现向员工直接交付企业内容。2007年1月,Information Buliders推出WebFocusMagnify,这是一种索引结构化数据并在搜索结果中提供BI报告的搜索导航工具。另外,X1Technologies的X1企业搜索平台支持对电子邮件、桌面文档等非结构化信息的检索,并且能够与后端搜索建立联邦关系。
融合的高难度
BI与搜索技术融合的构想一经提出,就被寄予了厚望。人们希望这种融合能够解决那些长期悬而未决的问题。以Google OneBox为代表的企业级搜索产品的成熟更是让BI行业发生了很多改变,但我们也必须正视这一领域所面临的困难。
传统BI所实现的结构化数据搜索无法向用户提供上下文关联信息。比如,用户可以打开一
个库存数据库,但是却无法获得数据库之外像货品照片、库存位置地图等关联信息。有专家表示,这样的问题最终会通过元数据搜索的介入而得到解决,就像在数据库领域XML所获得的成功一样。但是在目前,海量的结构化数据与非结构化数据的结合仍是一个难题。
非结构化数据搜索的挑战在于,如何驾驭如此庞大、高容量的文档信息。以一个拥25000名员工的企业为例,每个员工每个工作日处理70封邮件,那么该企业每年出于法规遵从目的需要存储的邮件数量就达5亿封,还要保证这些邮件是可搜索的。加上其他需要存储和搜索的HTML、Word、EXCEL、PPT文档,搜索指令仿佛"大海捞针"。
作为一位资深BI人,神州数码移动事业部的刘庆认为,BI与搜索的融合不是单纯易用性的改进,需要解决的关键问题包括实施成本、技术标准化等。他表示,在2006年曾经有国内的企业有意尝试企业文档的搜索,但真正把搜索系统与BI系统结合起来的用户很少。"两年之后,我们可能会看到比较成功的案例,而BI与搜索的深度融合可能要在5年以后。"刘庆说。
虽然现有的解决方案已经能够支持企业对BI与搜索系统的同步部署,但刘庆强调,分步实施仍是最佳选择。"实施者需要协调BI和搜索的部署特性,BI项目强调以客户应用为中心,而搜索强调技术标准化,在技术融合过程中需要加以调和。同时还应该考虑好系统集成之后推什么应用,是报表还是数据钻取?对客户而言,现实的做法是先把BI系统做好,这样搜索才有价值。"他说。真正的融合应该是无缝的,BI与搜索在现阶段的融合表现显然距离这一标准还有很大距离。
其中,结构化和非结构化数据搜索怎样自然结合是症结之一。SAS的张天峰在BI行业拥有近15年的从业经历。他表示,结构化和非结构化信息的搜索技术是截然不同的,非结构化搜索的技术也有进一步的细分。非结构化数据搜索应该被更加准确地定义为文件检索技术,包含检与索两个方面。检就是文档归类,在这一领域,SAS等厂商所提供的文本挖掘(Text Mining)技术正趋向于成熟;索就是搜索,目前最成熟的是以Google为代表的蜘蛛(Spider)技术。
"企业实施'BI+搜索'项目的难点体现在,如何把两种不同的技术自然地'缝合'起来。开发人员必须熟练掌握这两种技术,目前,同时掌握两种搜索技术的人才并不多。同时,要完整呈现不同层面、种类的关联信息,并做出科学的决策,这需要大量的定制开发工作,在目前的情况下实施难度还很大。这些都决定了BI与搜索结合尚不自然的现状。"张天峰说。
门户当道
尽管推进困难重重,但BI与搜索的融合已成一个明确的技术方向。在BI领域,搜索技术炙手可热。Gartner的一位分析师说:"从没见过BI厂商如此急切地寻找搜索技术,今天不会向你谈论其BI软件与企业搜索产品集成的BI厂商是太少见了。"另一方面,搜索厂商也在积极拓宽企业级搜索引擎的覆盖范围,企业BI系统中高质量的结构化数据正好弥补了其搜索的数据源。因此,无论是BI厂商还是搜索厂商,都在寻找合适的落脚点,企业门户正是这样一个能够兼顾双方利益、兼容不同技术框架的战略选择。
"应该说,目前市场上我们所见到的'BI+搜索'的产品基本上都是围绕门户展开的"张天峰说。文章前面提到的产品大都集中在门户和内容管理方面,在门户平台之上,结构化与非结构化数据搜索、乃至更高层次的信息检索技术形成了多种集成化的解决方案。
在结构化数据的语义关联方面,一些BI软件已经通过模板的使用和数据关联定义等方法,部分地解决了在结构化数据查询中提供上下文关联信息的问题。以此为基础,一些企业级搜索引擎,比如Google、X1,可以将检索出的结构化数据交付BI系统,然后将其结果与自身的搜索索引项建立联邦性的关联。与此同时,BI厂商也在不断强化数据的挖掘和定向交付能力。比如Information Builders支持从流程交易环节获取数据,并且使之对Google企业搜索引擎可用。
而在目前,面向结构化和非结构化数据查询结果的联邦技术有望成为BI与搜索技术融合的一个关键部件。
安全与算法问题
在技术演进带来搜索容量提升、BI软件覆盖范围扩大等可喜成果的同时,信息安全问题更加无法逃避。当企业的IT部门在企业范围内部署了搜索工具,并使之与BI决策分析系统连接起来,数据泄漏的风险随之陡然增大。BI分析与搜索功能集成后,企业员工将获得更多的数据查询途径,但跨系统数据的访问控制问题也随即出现。人们发现,为不同部门、级别的员工在这个集成化的系统中定义权限并不容易。
其实,在BI领域,访问控制机制是非常成熟的。目前最需要解决的问题是,如何保证BI与搜索集成之后的系统能够交付员工需要的所有数据。同时准确地屏蔽那些机密的、不在权限允许的范围之内的数据。有安全专家认为,在理想的技术框架下,单点登录(SSO)技术可以解决向员工交付所需完整数据的问题,LDAP访问目录服务器可以解决访问权限控制的问题。但在实际部署时,数据泄漏的问题仍然会在执行环节出现,系统中的很多数据所接受的访问控制并没有被企业范围的访问机制所严格限制。
一些"BI+搜索"解决方案简单地在BI包后面或其他的后端应用中添加用户信任机制,并且依赖这些应用内置的访问机制去限制反馈结果。这种做法显然不够全面,在实际部署时,企业安全策略的调整,在BI系统中搜索引擎添加位置的选择,都是访问控制环节需要关注的细节问题。
在参与技术融合的问题上,每个厂商都是自己的切入角度,而这往往是基于其专有技术的。这在一定程度上导致了目前这个领域所展开的技术研发并不是非常秩序化的,正如前面提到的技术标准化问题。今天,厂商之间已经围绕搜索运算法则展开了较量。
Google一直努力在企业级搜索领域确立如Web搜索世界中的"权威"地位,并表示不会公开自己的算法。而IBM则宣称新推出的基于企业搜索引擎内部相关权重因子的新算法。有关的因子包括客户点击特性、格式、文档进入位置、元数据等。很多产品还提供增强特定文档或URL相关性的方法,以便他们在既定搜索中占据首位。针对企业搜索的特性,一些软件还允许企业针对某些特定术语进行个性化定制,以方便企业实现对关键业务词汇的定向搜索。"在这个领域,你会遇到各式各样的问题,它们与Web搜索有很大不同。比较幸运的是,在这里你至少不会遭遇到有些企业利用卑鄙的手段欺骗你的算法的情况。"Google企业级产品部门的一位负责人风趣地说。
特别提示:
"用Google式的搜索引擎覆盖整个企业环境"听起来容易,但事实却并非如此。在实施"BI+搜索"项目时,你必须了解以下事实:
■ 厂商演示的魔术般的功能实际上需要付出艰苦的幕后工作,比如将数据查询映射到企业的数据集合。
■ 企业需要帮助员工在企业内部找到重要报告的搜索算法。
■ 不同的部门(例如,财务或销售)具有不同的搜索要求。
■ 务必进行访问控制,使员工不能非法访问企业的敏感信息。
■ 企业可能已经拥有了各种嵌入在不同应用和门户中的搜索引擎。
■ 购买者必须在不同的技术中做出选择:从Google的搜索专用设备到分析非结构化数据的文本挖掘工具。
■ 目有市场上有很多厂商,这些厂商正在寻求利用科研领域的高级搜索技术解决企业问题的方法。
编看编想:BI为什么爱搜索?
咫尺,亦是天涯。BI与搜索的融合之路并不像想象中那样接近,也不会这般遥远。也许在今天看来,这个话题太前瞻了。但是在近期内,这又是BI领域无法回避的焦点。有人认为,这是BI厂商希望搭上最近流行的搜索应用,进行新一轮的炒作。但当我们细细品评技术融合过程中的艰难与收获,我们发现,这种融合是完全符合IT应用逻辑和顺应潮流的。在驾驭结构化和非结构化数据的问题上,数据库通过技术获得了成功,而BI为什么不可以?何况这正好与企业搜索技术的前进路线不谋而合。
现阶段BI与搜索的融合过程的确会遇到很多障碍,双方都要不断磨砺,才能达到和谐互融。我们不得不正视的是,虽然BI与搜索的交集越来越大,但这个领域要花费一定的时间才能确立规则。BI面向结构化数据的数据分析,以及企业搜索针对非结构化数据的广义文本挖掘,已经汇集到以企业门户为载体的内容管理平台。但在统一的界面背后,不同类型数据的挖掘、分析、展现、控制的过渡和衔接仍显得突兀。比如Google OneBox只提供一个公共接口,在实现数据展现终端合并的同时,数据抽取和分析的过程仍是分离的。因此,在肯定融合趋势的前提之下,如何实现数据交付全过程的完整结合,应是当前BI与搜索融合技术研发的第一要务。
收件人: zhu_feng@vanceinfo.com Solo Feng Collected.
主 题: BI与搜索技术的融合趋势与技术
时 间: 2008-10-27 11:22

How to connect to the Oracle server via PLSQL developer tool with out installation Oracle Client.

/*不用安装Oracle Client,Plsql developer 连接到Oracle server.
1: Seach the following files at your ORACLE server end. and copy those
files to a folder. for example: D:\oraclient
oci.dll
ocijdbc10.dll
ociw32.dll
orannzsbb10.dll
oraocci10.dll
oraociei10.dll
/*if have not found, then plsql develop tools can login via any
account and password. you should seach and download it by google or
baidu:)*/
sqlnet.ora
tnsnames.ora
classes12.jar
ojdbc14.jar

2、create a file: tnsnames.ora in the previous folder. eg. D:\oraclient.
like this:
oracledata =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)

3、Config the env. add TNS_ADMIN=D:\oraclient. if you have install the
oracle client. it should be listed under %ORACLE_HOME%/network/admin/。

4、Set the language env. NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK
or AMERICAN_AMERICA.US7ASCII
5、Open your PLSQL developer and set the connection string. then save
it and quit.
check tools->preferences->connection
Oracle Home=D:\oracleclient
OCI library=D:\oracleclient\oci.dll

6、Ok, you can try it now, enjoy it!!! if have any issue, please feel
free contact me: Gtalk & Gmail: zhouxiangzhen@gmail.com

LiFan take about 之"最"

by Lifan
就要上班了,赶快抓住休闲时光的尾巴,总结一下我4年海外生活所游历的地方和感受.欧美15个国家,100多个城市,总结了如下我心中的之"最":
 
综合指数最高的城市
巴黎.国际大都市去了不少:米兰、巴塞罗那、柏林、纽约...既适合短期旅游,又适合长期居住,文化、艺术、历史、建筑、娱乐、美食各方面综合指数最高的城市非巴黎莫属.当然这纯属个人意见.巴黎博物馆、美术馆林立,各种风格的建筑比比皆是,文化艺术氛围浓厚;歌剧、表演、展览丰富多彩;吃的方面更不用说,不仅能享受到法国美食,欧洲其它国家、北非、美洲、亚洲风味的餐馆也随处可见;巴黎也是世界时尚的焦点,从国际大牌到中档品牌的服装设计得都是那么漂亮.所以,巴黎又被称为"艺术之都","美食之都","时尚之都".巴黎的美还在于它的鹅卵石的小巷,路边的咖啡馆...不过,巴黎也有些我不喜欢的地方,比如说房子太贵,人比较冷淡(大城市都如此),再就是冬天下雨.CIMG0817
 
公共交通最便利的城市
还是巴黎.这里我只想谈地铁,因为地铁速度快,又不会堵车.巴黎有14条市区地铁线路Metro和5条城郊线RER,四通八达,非常方便.站与站的距离不是很远,因而在巴黎市区的任何一个地方,方圆500米内总会有一个地铁站.不用说市内的各个名胜古迹,连郊区的凡尔塞宫、枫丹白露,地铁都能到,而且都是出了站,走上3、4分钟就到了.我还没去过伦敦,不过地铁系统比较发达的马德里、纽约、芝加哥和香港都比不上巴黎的地铁方便.CIMG1970
 
最美丽的城堡
新白天鹅城堡.欧洲,特别是法国、德国、西班牙,有很多历史悠久又美丽的城堡和宫殿.好多童话故事都是参照欧洲的城堡,比如白雪公主,灰姑娘等.单说外观,不谈内部的豪华,我觉得最漂亮的是德国的新白天鹅城堡.白色的城堡耸立在高高的山上,其四周环山和湖泊,有着梦幻般的美丽.难怪迪斯尼会选它作为其城堡的原形.照片 065CIMG2001
 
最漂亮的宫殿花园
凡尔塞宫花园.欧洲的宫殿一般都个自己的御花园.凡尔塞宫后花园,和其宫殿一样著名,其面积之大,是全欧洲最负盛名的皇家园林.全园广植花圃、树林、还有人工运河、样式精美的雕像和大型喷泉. 这般漂亮的花园,常年吸引着大批的游客.照片 029
 
最美丽的海滩
戛纳beach迈阿密beach.可惜在法国的时候没时间去Nice欣赏其美丽的石沙滩,但戛纳作为Cote d'Azur另一迷人城市,其海滩也非常美丽.照片 007
Miami Beach也是全球著名度假胜地,那淡蓝绿色的海水在蓝天白云下,真是美得令人陶醉.多希望自己能住在迈阿密,这样就可以常去如此美丽的海滩了!当时同去迈阿密的朋友说,到过了Miami Beach,对别的海滩都没兴趣了.DSC02060
 
最有"主题"的城市
奥兰多拉斯维加斯.美国人知道自己的历史和文化无法和欧洲相比,为了吸引国内外游客,便建设了2个最具特色和主题的城市-奥兰多与拉斯维加斯.
在奥兰多,Disneyland, Universal Studios, Sea World,水上乐园等各种主题公园都有.像Disney和Univeral还都有好几个parks.因此要想在这儿把各个游乐园玩个遍的话,就要待上小2周的时间.CIMG2459
拉斯维加斯是世界上最著名的赌城.之前这里只是一片沙漠,建成为赌城后便变为了吸引无数游客的不夜城."赌"就是这里的主题.CIMG3828
 
最不想离开的地方
希腊的Satorini.去过不少地方,这个在爱琴海上的美丽岛屿是最使我去了后不想离开的地方.很多希腊的明信片和旅游介绍都是用的Satorini的照片.岛上只有2种主要颜色:蓝和白.蔚蓝的天空,碧蓝的大海和蓝色的屋顶,还有就是白色的房屋.美得真让我想在此度过余生.CIMG0731
 
最"大"的国家
美国.这里的大,并不是指国土面积.当然,美国在面积上也确实比较大.但我想说的是Everything in America is larger.美国人的体型大:美国是胖子比例最高的国家;人大开的车自然也大:在路上跑的大多是SUV,Mini Van,Hummer或是加长卡迪拉克,因而停车位也都比较大;衣服的size大:美国的S相当于欧洲的M和中国的L;食物、饮料的size大:快餐店里汉堡和可乐的size都比别的国家的大,餐厅里点的牛排,量也比其它国家的大.所以这也使美国人的胃更大了.结果恶性循环:美国人大吃东西的量就大,食物的size大使得人的size更大.
 
最不用花钱游览的城市
华盛顿.华盛顿的博物馆和纪念碑众多,从国家美术馆到历史博物馆,从国会大厦到林肯纪念堂,全部都是免费参观.真是个穷游者的好去处.CIMG3185
 
除了以上的之"最",还有:
  最最值得参观的博物馆-卢浮宫
  鸽子最多的广场-威尼斯的圣马可广场
  最爱罢工的国家-法国
  最发达,最人性化的国家-德国
  世界性组织最多的城市-日内瓦
  ......
 
我算是个博爱的人了,我喜欢每一个我去过的地方.无论是哪个国家和城市,都有它自己独特的魅力!
From Friend Lifan's live space: lifanlifan.spaces.live.com

Oct 25, 2008

Oracle -- How to export a table to a plane file by UTL_FILE

--author; Zhou xiangzhen
--created: 2008-10-25
--function: export table to a plane file
--you should call this procedure like this: dump2text('select * from all_users','|','EXPORTTABLEDIR','test.txt')
--
CREATE OR REPLACE procedure dump2text(sp_query     in varchar2,
                                      sp_separator in varchar2 default '|',
                                      sp_dir       in varchar2,
                                      sp_filename  in varchar2) authid current_user is
  ol_filehandle utl_file.file_type;
  cl_cursor     integer default dbms_sql.open_cursor;
  sl_coltext    varchar2(2000);
  nl_status     integer;
  nl_colcnt     number default 0;
  sl_separator  varchar2(10) default '';
  nl_cnt        number default 0;
begin
  ol_filehandle := utl_file.fopen(sp_dir, sp_filename, 'w');
  dbms_sql.parse(cl_cursor, sp_query, dbms_sql.native);
  for i in 1 .. 255 loop
    begin
      dbms_sql.define_column(cl_cursor, i, sl_coltext, 2000);
      nl_colcnt := i;
    exception
      when others then
        if (sqlcode = -1007) then
          exit;
        else
          raise;
        end if;
    end;
  end loop;
  dbms_sql.define_column(cl_cursor, 1, sl_coltext, 2000);
  nl_status := dbms_sql.execute(cl_cursor);
  loop
    exit when(dbms_sql.fetch_rows(cl_cursor) <= 0);
    sl_separator := '';
    for i in 1 .. nl_colcnt loop
      dbms_sql.column_value(cl_cursor, i, sl_coltext);
      utl_file.put(ol_filehandle, sl_separator || sl_coltext);
      if i < 2 then
        sl_separator := sp_separator;
      end if;
    end loop;
    utl_file.new_line(ol_filehandle);
    nl_cnt := nl_cnt + 1;
  end loop;
  dbms_sql.close_cursor(cl_cursor);
  utl_file.fclose(ol_filehandle);
  dbms_output.put_line('total export rows: ' || nl_cnt);
exception
  when no_data_found then
    return;
  when utl_file.invalid_path then
    dbms_output.put_line('invalid path');
  when utl_file.invalid_filehandle then
    dbms_output.put_line('invalid filehandle');
  when utl_file.invalid_operation then
    dbms_output.put_line('invalid operation');
  when others then
    dbms_output.put_line('error number: ' || sqlcode ||
                         ' error message: ' || sqlerrm);
end dump2text;
/

--
Thanks
Xiangzhen



Oct 24, 2008

AIX LVM比较

卷组描述区(VGDA)、卷组状态区(VGSA)和逻辑卷控制块(LVCB)构成了LVM的配置数据
1.
VGDA:卷组描述区。
位于所有硬盘起始的部分,VGDA记录着卷组中每个逻辑卷(LV)的逻辑分区(LP)与物理分区(PP)的映射关系。主要用于更新ODM。
VGSA:卷组状态区。
主要用于描述VG中PV和PP的状态信息,在激活一卷组时,VGSA可以确定卷组中那些物理分区(PP)是无效的(或陈旧的),哪些物理卷已丢失,进而确定卷组中的物理卷是否可用。

LVCB:逻辑卷控制块。
位于所有LV的起始部分,包含与LV有关的信息,如LV的大小、类型、最后更新时间等。卷组中的每个PV至少都有一个VGDA,VGDA能对该PV进行自我描述,每个LVM命令都可以同步卷组中所有PV的VGDA,从而使卷组中每个PV的VGDA都保持相同的时间戳,如果其中一个PV错误导致无法运行,则就无法更新同步VGDA。在把一个硬盘变成物理卷时(使用mkdev命令)就在这个硬盘的开始部分保留一个存放VGDA的空间,当把这个物理卷加入到一个卷组中时(使用mkvg或extendvg)才将该卷组的信息写进这个物理卷的VGDA中。当把一个PV从所属VG中删除时(使用reducevg命令),同时从这个PV的VGDA中清除该卷组的信息。

描述LVM的构成信息不会存放在一个地方,还会存在于系统的各个地方,AIX的大多数系统配置都会存放在ODM数据库中,所以已配置的VG,LV和PV的信息都会保存在ODM数据库中,所以当导入(import)一个卷组时,就会把要导入卷组的VGDA信息保存在ODM数据库中,相反,导出(export)一个卷组时,就会把这个卷组的VGDA信息从ODM数据库中删除。

关于PVID:PVID是PV的物理标识符,这个PVID是系统随机生成的,而且是可变的。
硬盘在未被定义为PV之前是没有PVID号的。当系统进行cfgmgr后,系统就会为硬盘分配一个名字和PVID号。
如果想手工清除PVID号用chdev -l hdiskn -a pv=clear.重新生成pvid号用cfgmgr或chdev -l hdiskn -a pv=yes.

ODM:ODM数据库用与描述物理设备相同的方式描述VG和LV,它影响VGDA、VGSA、LVCB中的信息。LV在ODM中处于Defined状态,而物理设备则处于Available状态。
在/etc/vg目录中保存有VGID,
可用#lqueryvg �p hdiskn �At查询VGID
可用#lqueryvg [�g VGID|-p PVname] [-NsFncDaLPAt]查询PVID
可用#getlvcb �AT hdn查询LVCB信息
可用 #ipl_varyon �i显示系统中的PV,PVID及PV所属的VG的VGID

2.
当VG中有两个PV,且两个PV互为镜像时,如一个PV上的VGID毁坏了,
可用#chvg -Q n vgname命令恢复,
然后用#varyonvg vgname将VG挂在系统上即可。

3.当ODM中的有关VG的信息毁坏时,
可用#varyoffvg vgname,
#exportvgvgname,
#importvg �y vgname �f hdiskn
#varyonvg vgname命令重建ODM中的VGDA项。

4.当PV上的VGDA毁坏时(此问题通常是由于从系统中卸载一块PV而未事先将
其从VG中卸载),应先找出丢失PV的PVID,然后将丢失的PV重新加入ODM
中,再将此PV从VG中卸载,最后从系统中删除此PV。
具体步骤为:
#lqueryvg �p hdiskn �At从VGDA查找所有PV的PVID
#lspv从ODM和VGDA中查找所有PV的PVID
#dd if=/dev/hdiskn count=1|od �x|grep 0000200
查找系统中实际存在的所有PV的PVID)命令找出丢失PV的PVID
#odmget �q "name=hdiskn" CuDv >>/tmp/hdiskx.add
#odmget �q "name=hdiskn" CuAt >>/tmp/hdiskx.add
从ODM中取出系统中实际存在的PV的信息
#vi /tmp/hdiskx.add
#odmadd /tmp/hdiskx.add
将编辑好的文件加入到ODM中(用丢失的PV的Pvname和PVID替换文件中的
Pvname和PVID)
#lslv �l hdn
查看hdn上的LV分配情况(In Band:表示在LV中部的LP占全部LP的比例)
#lslv �m hdn
查看hdn上的LP-PP-PV的对应情况
#reducevg vgname hdiskx
#rmdev hdiskx
将丢失的PV从系统中删除。(可用extendvg �f vgname hdiskn命令加新的
PV至VG中)。

5.当ODM中的有关Rootvg的信息毁坏时,可用下面的scrīpt文件恢复ODM中
的VGDA信息。
#vi scrīpt
PV=/dev/ipldevice
VG=rootvg
cp /etc/objrepos/CuAt /etc/objrepos/CuAt.$$
cp /etc/objrepos/CuDep /etc/objrepos/CuDep.$$
cp /etc/objrepos/CuDv /etc/objrepos/CuDv.$$
cp /etc/objrepos/CuDvDr /etc/objrepos/CuDvDr.$$
lqueryvg �Lp $PV |awk '{print $2}' |while read Lvname;
do
odmdelete �q "name=$Lvname" �o CuAt
odmdelete �q "name=$Lvname" �o CuDv
odmdelete �q "value3=$Lvname" �o CuDvDr
done
odmdelete �q "name=$VG" �o CuAt
odmdelete �q "parent=$VG" �o CuDv
odmdelete �q "name=$VG" �o CuDv
odmdelete �q "name=$VG" �o CuDep
odmdelete �q "dependency=$VG" �o CuDep
odmdelete �q "value1=10" �o CuDvDr
odmdelete �q "value3=$VG" �o CuDvDr
importvg �y $VG $PV#igonre lvaryoffvg errors
varyonvg $VG
#./scrīpt hdiskn

6.迁移Rootvg时应注意:
重新创建BLV(BootLV),更改Bootlist,更改系统的DUMP设备。
迁移Rootvg的步骤:
#smit mksysb
先备份Rootvg,然后将新硬盘安装至系统
#bosboot �ad /dev/newdisk
在新硬盘上创建BLV
然后更新系统的Bootlist(参看系统安装说明)并重启
#mkboot �c �d /dev/olddisk
将欲移出的硬盘上的Boot记录删除
#savebase [-d /dev/newdisk]
将设备配置库中的设备信息保存在新硬盘上
#sysdumpdev �p /dev/sysdumpnull
激活临时的DUMP设备
#sysdumpdev �p /dev/hd6
重置系统的DUMP设备
#migratepv olddisk newdisk
将旧硬盘上的LV迁移至新硬盘上
#reducevg vgname olddisk
将旧硬盘从Rootvg中迁移出来
#rmdev �dl olddisk
将旧硬盘从系统和ODM数据库中删除
#extendvg [-f] vgname newdisk
将新硬盘加入到Rootvg中。

7.从Rootvg中卸载PV的步骤:
#migratepv �l lvname 欲卸载PV 保留PV
将在欲卸载的PV上的,与Rootvg有关的LV迁移至保留在Rootvg中的PV上
#backup �u �0 �f /dev/rmtn /fsname
将欲迁移至新VG的FS备份下来
#rmfs /fsname
删除欲卸PV上的FS
#reducevg rootvg 欲卸载PV
将欲卸载的PV从Rootvg中卸下
#mkvg �y 'newvg' 欲卸载PV
在此PV上创建新的VG
#varyonvg newvg
将新VG挂在系统上
#smit crfs
#mount /fsname
将FS安装在新VG上
#cd /fsname
#restore �rvf /dev/rmtn /fsname
#rm restoresymtable
将FS恢复到新VG上(以上步骤不适用于迁移BLV和系统DUMP设备)。

8.在同一VG中迁移FS:
#migratepv �l lvname 源PV 目标PV

9.在不同的VG间迁移FS:
#smit crfs
在目标VG上创建一与源FS大小相同的临时FS
#mount /tempfs
将临时FS安装目标VG上
#cd /sourcefs
#find . � print|tar cvf /tempfs
将源FS的内容拷贝至临时FS
#smit crfs
#mount /newfs
在目标VG上创建一与临时FS大小相同的新FS
#cd /tempfs
#find . �print|tar cvf /newfs
将临时FS的内容拷贝至新FS
#rmfs /tempfs
将目标VG中的临时FS删除。(源FS和新FS可以同名)。

10.在不重新创建和删除VG的基础上,更改VG名:
#umount �a
卸载所有属于VG的FS
#varyoffvg VG_Name
#exportvg VG_Name
卸载VG
#smitty importvg
装载VG,在VG name域中输入新的VG名,在PV name域中输入属于此VG的任一块PV名
#mount FS_Name
装载所有属于此VG的FS

AIX 存储笔记

1.基本概念:
PV 物理卷:普通的直接访问的存储设备,有固定的和可移动的之分,代表性的就是硬盘。
vg 卷组:AIX中最大的存储单位,一个卷组由一组物理硬盘组成,也就是由一个或多个物理卷组成。
pp 物理分区:是把物理卷划分成连续的大小相等的存储单位,一个卷组中的物理分区大小都相等。
lp 逻辑分区:适映射物理分区的逻辑单位,一个逻辑分区可以对应一个也可以对应多个物理分区。
lv 逻辑卷:是指卷组中由多个逻辑分区组成的集合,逻辑卷中的逻辑分区是连续的,但是对应的物理分   区是不连续的,可以在一个磁盘上,也可以在不同的磁盘上。
fs 文件系统:是指在AIX系统中面向用户的存储空间。一个逻辑卷只能创建一个文件系统,也就是说一个    文件系统对应一个逻辑卷,如果删除逻辑卷也将删除文件系统。


2.存储结构:
逻辑卷lv 不能被直接访问,是生设备(裸设备),逻辑卷上建文件系统,文件系统可以被用户访问,是熟设备。文件系统里建目录,目录下建文件。
物理卷,卷组,物理分区,逻辑卷,逻辑分区,逻辑卷是面向操作系统的概念
文件系统,目录,文件是面向用户的概念。 

3.LVM的配置数据
卷组描述区(VGDA):描述卷组中的所有物理卷和逻辑卷的对应关系
卷组状态区(VGSA):记录卷组中物理卷和物理分区的状态信息,在卷组激活时,确定哪些物理分区可用
逻辑卷控制块(LVCB):位于每个逻辑卷开头,包含逻辑卷的信息,占用数百个字节

LVM管理命令就是对VGDA内容的更新,当一块硬盘变成PV时,这个硬盘开始保留一部分空间存放VGDA信息,当把它加入卷组中时,开始将卷组信息写入VGDA区域,当把它从卷组删除时,也同时清除VGDA数据,这个数据还存在于AIX系统的ODM库中,当导入一个卷组时,把VGDA信息写入ODM,导出时删除。 

4.磁盘Quorum
卷组的每一个物理卷至少包含着一份VGDA和VGSA。当一个卷组只有一块硬盘时,这块硬盘存有两份VGDA和VGSA,当这个卷组由两块硬盘时,其中一块存有两份,另一块存有一份,当卷组由三块以上硬盘时,每块硬盘存有一份。  如果磁盘Quorum存在,则必须保证卷组有51%以上的VGDA/VGSA可以正常访问。淡然也可以关闭磁盘Quorum。

5.逻辑存储管理的限制
VG数:每个系统最多255个VG
PV数:对于普通卷组,每个VG最多32个PV,对于大VG,每个卷组最多128个PV
PP数:每个PV最多有1016个PP
LV数:对于普通VG,每个卷组最多255个LV,对于大VG,每个VG最多512个LV
LP数:每个LV最多有32512个LP
PP和LP的大小:1M到1024M 必须是2的幂次方
LP映射PP的数量:一个LP可以映射1-3个PP

6.物理区域的分布
外边缘(Outer-Edge):存放很少访问的数据
外中间(Outer-Middle):创建逻辑卷时默认的位置
中间(Center):磁盘搜索时间最短,速度最快。
内中间(Inner-Middle):比中间稍慢一些
内边缘(Inner-Edge)存放很少访问的数据

7.向系统添加一块硬盘

方法一:
添加硬盘后起动机器,自动运行cfgmgr,直接查看结果,如果没有识别再手工配置。
#cfgmgr -v
#lspv
#chdev -l hdisk2 -a pv=yes

方法二:
系统不能重起时,县查看原有硬盘,然后安装新硬盘,检查新设备,配置新设备
#lspv
#cfgmgr -v
#lspv
#chdev -l hdisk2 -a pv=yes
#mkdev -c disk -s scsi -t 670mb -p scsi3 -w 6,0 -a pv=yes
#smit makdsk

8.修改物理卷属性
#chpv -a n hdisk1    禁止hdisk1在分配新的PP
#chpv -a y hdisk1    允许

#chpv -v r hdisk1    关闭hdisk1的可用性,无法通过逻辑形式读写和访问该物理卷
#chpv -v a hdisk1    允许

#chpv -c hdisk1      清除hdisk1上的引导记录
#smit chpv

9.显示物理卷信息

#lsdev -Cc disk  显示系统一定义和已配置的物理卷
#lspv            以不带任何参数的形式显示系统中所有物理卷信息 
#lspv hdisk0     显示一个物理卷hdisk0的属性
#lspv -l hdisk0  显示物理卷hdisk0上分布的逻辑卷。
#lspv -p hdisk0  显示物理卷上每个逻辑卷物理分区的分布情况,同时显示逻辑卷类型和文件mount点。
#lspv -M hdisk0  显示物理分区和逻辑分区的对应情况。

10迁移物理卷上的内容:

a.确定系统中有哪些磁盘可用
#lsdev -Cc dev
#lspv
#extendvg rootvg hdisk5

b.检查卷组中包含哪些磁盘,确认源磁盘和目标磁盘在同一个卷组中,
#lsvg -p rootvg
c.确定目的盘上有足够的空间存放源盘的内容
#lspv hdisk0 |grep "USED PPs"
#lspv hdisk5 |grep "USED PPs"
d.如果是rootvg 上的磁盘,检查引导逻辑卷是否在源磁盘上
#lspv -l hdisk0 |grep hd5
#megratepv -l hd5 hdisk0 hdisk5

e.重设系统引导记录
#bosboot -a -d /dev/hdisk5
#bosboot -m normal hdisk5
#mkboot -c -d /dev/hdisk0

f.迁移
#smit migratevg
#migratevg hdisk0 hdisk5
#migratevg -l lv01 hdisk0 hdisk5

g.删除原盘数据
#reducevg rootvg hdisk0
#rmdev -dl hdisk0
 

11.卷组管理

#mkvg -y datavg -d 6 -s 8 hdisk7 hdisk8
#smit mkvg      创建卷组是保证/etc/vg下有2M空间
#lsvg           查看系统所有VG
#lsvg -o        查看激活状态的VG
#lsvg rootvg    查看rootvg属性
#lsvg -l rootvg 查看rootvg里的LV
#lsvg -p rootvg 查看rootvg中包含的物理卷

#chvg -ay datavg 使卷组启动时自动激活
#chvg -an datavg 使卷组启动时不能自动激活
#chvg -u datavg  给卷组解锁

#extendvg datavg hdisk5
#reducevg datavg hdisk5
#varyonvg datavg
#varyoffvg datavg
#exportvg datavg
#importvg -y datavg hdisk5
#syncvg -p hdisk03 hdisk05   同步物理卷
#syncvg -v vg05 vg06         同步卷组vg05和vg06上的拷贝
#redefinevg -d hdisk0 rootvg   在ODM库中重定义卷组信息,

#swapoff paging_spce_name  使页面空间处于非活动状态
#mirrorvg -c 3 datavg   做3份拷贝的卷组镜像
#mirrorvg -S -c 3 datavg    后台同步

镜像环境中替换磁盘
#unmirrorvg datavg hdiak7   删除hdisk7上的镜像
#reduncevg datavg hdisk7    在卷组中删除hdisk7
#rmdev -dl hdisk7           在系统中删除hdisk7
#extendvg datavg hdisk7     将新盘加入datavg
#mirrorvg datavg            给卷组datavg做镜像
#unmirrorvg                 取消卷组镜像

12.逻辑卷管理

#getlvcb -TA hd2   查看逻辑卷控制块信息
#lsvg -l rootvg  查看rootvg上的逻辑卷信息
#lslv mylv        查看一个lv的详细属性
#lslv -l lv_01   显示一个逻辑卷所跨越的物理卷,以及PP在物理卷上的分布情况
#lslv -p hdisk1  显示物理卷上的逻辑卷分配图