日期:2014-05-16  浏览次数:20450 次

Oracle兵器谱上古神器之-KFED
如其名是个比较internal的工具,并不被Oracle官方文档对外支持,算是属于常规兵器谱外的工具。KFED主要用来编辑和修复ASM metadata,可以在DG没有mount的情况下使用,因此在ASM无法启动、DG无法mount的时候可以尝试使用这个利器。
在10G中默认KFED是没有现成可以使用的,但是我们可以手工编译它。
0. 编译KFED
我们可以使用make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk ikfed命令来编译它,记得要在lib目录下执行编译:
[oracle@gtser1 ~]$ which kfed
/usr/bin/which: no kfed in (/home/oracle/bin:/u01/oracle/10g/product/10.2.0/db_1/bin:/usr/bin:/usr/ccs/bin:/etc:/bin:/usr/openwin/bin:/usr/local/bin:/usr/X11R6/bin:)
[oracle@gtser1 ~]$ cd $ORACLE_HOME/rdbms/lib     
[oracle@gtser1 lib]$ make -f ins_rdbms.mk ikfed                       

Linking KFED utility (kfed)
rm -f /u01/oracle/10g/product/10.2.0/db_1/rdbms/lib/kfed
gcc -o /u01/oracle/10g/product/10.2.0/db_1/rdbms/lib/kfed -L/u01/oracle/10g/product/10.2.0/db_1/rdbms/lib/ -L/u01/oracle/10g/product/10.2.0/db_1/lib/ -L/u01/oracle/10g/product/10.2.0/db_1/lib/stubs/  /u01/oracle/10g/product/10.2.0/db_1/lib/s0main.o /u01/oracle/10g/product/10.2.0/db_1/rdbms/lib/sskfeded.o /u01/oracle/10g/product/10.2.0/db_1/rdbms/lib/skfedpt.o  /u01/oracle/10g/product/10.2.0/db_1/rdbms/lib/defopt.o -ldbtools10 -lclntsh  `cat /u01/oracle/10g/product/10.2.0/db_1/lib/ldflags`    -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lnro10 `cat /u01/oracle/10g/product/10.2.0/db_1/lib/ldflags`    -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lclient10 -lnnetd10  -lvsn10 -lcommon10 -lgeneric10 -lmm -lsnls10 -lnls10  -lcore10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lxml10 -lcore10 -lunls10 -lsnls10 -lnls10 -lcore10 -lnls10 `cat /u01/oracle/10g/product/10.2.0/db_1/lib/ldflags`    -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lnro10 `cat /u01/oracle/10g/product/10.2.0/db_1/lib/ldflags`    -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lclient10 -lnnetd10  -lvsn10 -lcommon10 -lgeneric10   -lsnls10 -lnls10  -lcore10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lxml10 -lcore10 -lunls10 -lsnls10 -lnls10 -lcore10 -lnls10 -lclient10 -lnnetd10  -lvsn10 -lcommon10 -lgeneric10 -lsnls10 -lnls10  -lcore10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lxml10 -lcore10 -lunls10 -lsnls10 -lnls10 -lcore10 -lnls10   `cat /u01/oracle/10g/product/10.2.0/db_1/lib/sysliblist` -Wl,-rpath,/u01/oracle/10g/product/10.2.0/db_1/lib -lm    `cat /u01/oracle/10g/product/10.2.0/db_1/lib/sysliblist` -ldl -lm   -L/u01/oracle/10g/product/10.2.0/db_1/lib
mv -f /u01/oracle/10g/product/10.2.0/db_1/bin/kfed /u01/oracle/10g/product/10.2.0/db_1/bin/kfedO
mv /u01/oracle/10g/product/10.2.0/db_1/rdbms/lib/kfed /u01/oracle/10g/product/10.2.0/db_1/bin/kfed
chmod 751 /u01/oracle/10g/product/10.2.0/db_1/bin/kfed
[oracle@gtser1 lib]$ which kfed
/u01/oracle/10g/product/10.2.0/db_1/bin/kfed
这样我们就完成了KFED工具编译,接下来就可以正常使用它了。
1. 使用KFED命令
KFED提供了哪些命令选项呢?我们看下帮助选项就知道了。
[oracle@gtser1 lib]$ kfed -help
as/mlib         ASM Library [asmlib='lib']
aun/um          AU number to examine or update [AUNUM=number]
aus/z           Allocation Unit size in bytes [AUSZ=number]
blkn/um         Block number to examine or update [BLKNUM=number]
blks/z          Metadata block size in bytes [BLKSZ=number]
ch/ksum         Update checksum before each write [CHKSUM=YES/NO]
cn/t            Count of AUs to process [CNT=number]
d/ev