一个韩国的Oracle数据库, System表空间的文件被删除了需要进行恢复. 还好整个的数据文件的大小只有500MB, 在免费的范围内, 不用交钱他们自已就可以恢复. 但今天被他们问了太多的问题, 有些烦了, 所以我将免费的范围缩小了, 第一, 只能免费打开2个文件了, 原来是4个, 第二, 相对文件号为1的还可免费读取前512MB, 不为1的则只能读取256MB了. 他的数据库中有CLOB字段, 还好值都不大, 而且是Enable Storage In Row的CLOB, 因此虽然丢失了System表空间, 但还是能恢复出CLOB数据的, 他们真是好运啊.
由于使用的字符集是变长的, 因此存放在CLOB中的数据是以Unicode(UCS-2)字符集存放的, 虽然恢复出来了, 但装载前还得将恢复出来的文件进行转换. 由于Unicode用两个字节来存放一个字符, 因此这中间有Byte Edian的问题. 到10g以后, Oracle的CLOB总是用Big Edian的, 而在10g以前, 则看数据库运行的平台, 运行在SUN Sparc 64平台的数据库则是Big Edian, 而运行在x86机器上的Windows或Linux则是Little Edian的.
AUL内部只提供了从Unicode到UTF8或GBK的转换, 因此不能满足这个场合, 只好不做转换恢复数据, 然后借助iconv工具来转换了. iconv工具并不支持所有的字符集, 你可以用如下命令来列出支持的字符集:
iconv -l
在这个例子中, 对所有的文件进行了如下转换:
iconv -f UCS-2BE -t 5601 src\LOB_???.dat > dest\LOB_???.dat
Windows下的iconv可以到GnuWin32项目组上去下载, 本站也可以下载.
留言 (1)
man iconv
不同的系统平台下转换的字符集是不一样的。
这个在man下有个文件可以查找。
当然,期望转换的字符集基本上都是可以互转的。
hp下还有个sconv,还图形化呢。。。
Posted by goodhawk | May 21, 2007 10:53 PM