在10g(Windows)上测试BLOB数据恢复
AUL/MyDUL » http://www.anysql.net/aulmydul/aul4_blob_demo.html 2006-12-17下面是用AUL 4.0.0 Beta版本恢复Windows上10g R2数据库BLOB数据的一个演示, 首先是创建测试表:
SQL> CREATE TABLE T_BLOBDEMO
2 (
3 ID NUMBER,
4 BLOB1 BLOB,
5 BLOB2 BLOB,
6 BLOB3 BLOB
7 )
8 LOB(BLOB3) STORE AS (DISABLE STORAGE IN ROW)
9 /
Table created.
SQL> INSERT INTO T_BLOBDEMO VALUES (1, '3031323334', NULL, NULL);
1 row created.
提交后, 到SYS用户执行ALTER SYSTEM CHECKPOINT命令, 将数据写入数据文件中, 然后就可以用AUL 4来恢复了. 在上面的例子中, 我们将BLOB1字段更新为"01234"这几个字母, 来看一下恢复出来的对不对?
AUL> UNLOAD TABLE anysql.t_blobdemo;
2006-12-17 21:43:27
Unload OBJD=9966 FILE=4 BLOCK=4859 CLUSTER=0 ...
1|01234
2006-12-17 21:43:27
接下来用AnySQL来将一个图片文件(test.jpg)更新到BLOB2和BLOB3字段中:
ASQL> set queryonly false
ASQL> var p_lob blob
ASQL> define p_lob=test.jpg
ASQL> update t_blobdemo set blob2=:p_lob, blob3=:p_lob;
1 rows affected.
ASQL> commit;
Commit Succeed.
接下来再次CHECKPOINT一下, 然后用AUL 4来恢复, 指定LOB_STORAGE选项为1来将LOB存放为各自的文件:
AUL> set lob_storage 1
Current LOB_STORAGE is : 1-FILE
AUL> UNLOAD TABLE anysql.t_blobdemo to t_blobdemo.txt;
2006-12-17 21:46:42
Unload OBJD=9966 FILE=4 BLOCK=4859 CLUSTER=0 ...
2006-12-17 21:46:42
来看一下T_BLOBDEMO.TXT文件中的内容:
C:\MYDUL>cat t_blobdemo.txt
1|LOB_010012FF_1F39.dat|LOB_010012FF_1F63.dat|LOB_010012FF_1FB8.dat
再到OS中来看一下生成的文件, 第一个文件应当只包括"01234"这几个数字, 其他两个文件我将他们重命名为JPG文件, 并用图片查看工具查看, 打开完全没有问题.
C:\MYDUL>cat LOB_010012FF_1F39.dat
01234
C:\MYDUL>dir LOB*.jpg
Volume in drive C has no label.
Volume Serial Number is 5CF4-08FE
Directory of C:\MYDUL
2006-12-17 21:46 252,443 LOB_010012FF_1F63.jpg
2006-12-17 21:46 252,443 LOB_010012FF_1FB8.jpg
2 File(s) 504,886 bytes
0 Dir(s) 9,521,508,352 bytes free
将生成的SQL*Loader控制文件DIRECT=TRUE去掉, 并将ROWS=50000调小一些(如100), 进行装载:
C:\MYDUL>sqlldr anysql/anysql control=t_blobdemo_sqlldr.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on Sun Dec 17 21:49:54 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 1
现在到数据库中去看一下BLOB2和BLOB3这两个列的长度:
ASQL> select dbms_lob.getlength(blob2) len2,
2 dbms_lob.getlength(blob3) len3 from t_blobdemo;
LEN2 LEN3
------ ------
252443 252443
252443 252443
2 rows returned.
现在已经将恢复出来的数据成功装载到数据库中了, 我将会在不同的平台, 不同的数据库版本上进行这个测试. 如果你有兴趣, 也可以试试.


Recent Comments