一,什么是ODU
ODU全称为Oracle Data ba se Unloader ,是用于Oracle 数据库紧急恢复的软件,在各种原因
造成的数据库不能打开或数据删除后没有备份时,使用ODU抢救数据,最大限度地减少数
据丢失。
现实中总会有很多的意外,数据被意外删除、硬件问题导致数据库损坏、错误地格式化了
ASM磁盘等等,在没有备份的情况下,ODU能够通过直接访问Oracle 数据库数据文件或直
接访问ASM磁盘,恢复出所有完好的数据,以避免所有数据丢失造成的损失。
二,odu功能特点
01, 不需要运行Oracle 数据库软件,ODU直接读取数据库文件和ASM磁盘进行数据解析。 在由于硬件问题或人为误操作引起数据损坏时,Oracle 数据库软件为遵行数据完整性和 一致性原则,往往不能打开数据库对数据库进行访问,而ODU可以绕过Oracle 数据库 软件,直接从Oracle 数据库文件和ASM磁盘中解析数据,从而恢复数据。
02, 支持ASM,能够直接从ASM磁盘中解析数据。即使Oracle 数据文件存储在ASM磁盘 中,ODU仍然能够直接从ASM磁盘中读取数据,即使由于硬件或错误地FORMAT 导 致ASM磁盘头部数据损坏而导致ASM 磁盘组不能加载时,ODU仍然能够从ASM中 恢复数据。 03, 支持从ASM磁盘组中直接抽取出数据文件和其他任意存储在ASM磁盘组中的文件, 并保存为文件。比如可以将ASM磁盘组中的在线日志文件、控制文件等文件抽取出来 保存到文件系统中。 04, 多版本Oracle 支持,支持的Oracle 数据库版本包括7, 8i,9i, 10g, 11g 。 05, 自动检测数据文件的表空间号和文件号,在只知道数据文件名而不知道数据文件所属表 空间等信息时,ODU能够自动获取这些信息。 06, 在有SYSTEM 表空间的情况下,自动解析和获取数据字典信息。这样使用ODU恢复 的数据能够生成与原来一样的用户名以及列类型。 07, 支持各种类型的表,包括普通的HEAP 表,IOT 表和聚簇(CLUSTER)表。 08, 支持类似于SQLPLUS 的DESC 命令,以显示表的列定义。 09, 支持10g 及以上的大文件(BigFile) 表空间。 10, 可以列出表的分区和子分区,并能够指定只需要恢复的分区和子分区。 11, 支持表被Truncate 后的数据恢复。由于表被Truncate 之后,只能使用备份或database 级的flashb ac k(10 g 以上的新功能)才能恢复Truncate 的数据。在没有备份、备份不可 用或Data base Fl ashb ack 没有开启时,将不能使用正常的方法来恢复数据。ODU可以在 Truncat e 的表的空间没有被占用的情况下恢复出Trunca t e 之前的数据。 12, 支持表被Drop 之后的数据恢复,如果表被Drop 同时Drop 的表之前的空间没有被占用, 则可以使用ODU恢复被Drop 的表之前的数据。 13, 支持压缩表,ODU能够恢复Oracle 压缩表的数据。 14, 支持在没有SYSTEM 表空间和数据字典损坏的情况下恢复数据,在没有数据字典可用 时,ODU能够自动判断数据的类型。 15,支持IOT 表的恢复: 9 支持普通IOT 表 9 支持压缩IOT 表 9 支持IOT 表溢出段 9 支持IOT 表分区(包括子分区) 16,支持多种平台的数据库和跨平台数据恢复,包括AIX 、LI NUX、HPU X 、SOLARI S 、 WINDOWS所有主流的操作系统和平台。这里包括有两种含义,第一是ODU有多个平 台的版本,能够在所有主流的操作系统上运行;其二是能够在一个平台上恢复其他平台 上的Oracle 数据库数据,比如在可以将AIX 系统上的Oracle 数据文件复制到Li nu x 系 统上,然后使用Li nux 系统的ODU来恢复,反之亦然。 17,支持的数据类型包括:NUMBER, CHAR, VARCHAR2, NCHAR,NVARHCAR2, LONG, DATE, RAW, LONG RAW, BLOB, CLOB, TIMESTAMP (9i+) , BINARY FLOAT, BINARY DO UBLE (10g +) 。 18,恢复的数据能够以纯文本和DMP文件两种格式存储。以纯文本导出时,能够自动生成 建表所需的SQL 语句和SQLLDR 导入所需的CONTROL 文件(.CTL) ,以DMP文件 格式存储的数据,能够使用Oracle 自带的imp 命令导入到数据库中。 19,支持同一个库中不同的块大小的数据文件。 全面支持LOB 字段: 9 支持CLOB、NCLOB和BLOB 9 CLOB 支持Bi g En di an 和Little E n di an 字节序 9 支持LOB 分区,子分区 9 支持同一个表中,不同LOB 列使用不同CHUNK SIZE 的情况 9 CLOB 数据可以导出到与其他列相同的文件中,或存储到单独的文件中 9 LOB 列在没有SYSTEM 表空间的情况下仍然能够导出 20, 支持多种字符集之间的转换,能够正确的转换CLOB 、NCLOB、NVARCHAR2 列类型 的数据到与数据库相同的字符集。 ODU全面支持64 位系统,支持超过4G大小的数据文件。 21, 支持复制操作系统命令不能复制的坏文件。由于存储硬件问题导致数据库中数据文件 部分损坏,并且此时操作系统的相关操作不能正常读取该文件时,可以使用ODU复制 这样的文件到其他位置,以替换掉损坏的文件或存储阵列。
三,安装使用
01,初步使用
软件下载:https://files.cnblogs.com/files/kingle-study/odu_433_linux_x86.tar.gz
解压软件
tar zxvf odu_433_linux_x86.tar.gz [oracle@standby2 odu]$ ll total 2272 -rwxrwxrwx 1 oracle oinstall 87 May 24 15:46 asmdisk.txt -rwxrwxrwx 1 oracle oinstall 559 Apr 7 2011 config.txt -rwxrwxrwx 1 oracle oinstall 118 Mar 22 2011 control.txt drwxr-xr-x 2 oracle oinstall 4096 May 15 2009 data -rwxr-xr-x 1 oracle oinstall 2306912 Apr 7 2014 odu
ODU软件解压后,通常有下列文件和目录: odu ODU 可执行文件,这是ODU主程序。 config txt ODU 配置文件。 control.txt ODU 控制文件,用于在数据恢复时指定使用的Oracle 数据库文件。 asmdisk.txt ASM 磁盘信息设置文件,用于在数据恢复时指定使用的ASM磁盘组磁盘。 lib ODU 软件库文件目录,在某些平台上没有此目录。 data ODU 默认的数据目录,用于存储ODU恢复出来的数据。
02,软件使用
编辑文件
[oracle@standby2 odu]$ cat control.txt #ts fno rfno filename block_size is_big_file header_offset blocks 0 0 0 /oradata/oracle01/sysaux01.dbf 0 0 0 /oradata/oracle01/system01.dbf 0 0 0 /oradata/oracle01/temp01.dbf 0 0 0 /oradata/oracle01/undotbs01.dbf 0 0 0 /oradata/oracle01/users01.dbf
写上数据文件的路径
然后运行odu主程序
[oracle@standby2 odu]$ ./odu Oracle Data Unloader:Release 4.3.3 Copyright (c) 2008-2014 XiongJun. All rights reserved. Web: http://www.oracleodu.com Email: magic007cn@gmail.com loading default config....... byte_order little block_size 8192 block_buffers 1024 db_timezone -7 Invalid db timezone:-7 client_timezone 8 Invalid client timezone:8 asmfile_extract_path /asmfile data_path data lob_path /odu/data/lob charset_name US7ASCII ncharset_name AL16UTF16 output_format text lob_storage infile clob_byte_order big trace_level 1 delimiter | unload_deleted no file_header_offset 0 is_tru64 no record_row_addr no convert_clob_charset yes use_scanned_lob yes trim_scanned_blob yes lob_switch_dir_rows 20000 db_block_checksum yes db_block_checking yes rdba_file_bits 10 compatible 10 load config file 'config.txt' successful loading default asm disk file ...... grp# dsk# bsize ausize disksize diskname groupname path ---- ---- ----- ------ -------- --------------- --------------- -------------------------------------------- load asm disk file 'asmdisk.txt' successful loading default control file ...... ts# fn rfn bsize blocks bf offset filename ---- ---- ---- ----- -------- -- ------ -------------------------------------------- 1 2 2 8192 76800 N 0 /oradata/oracle01/sysaux01.dbf 0 1 1 8192 89600 N 0 /oradata/oracle01/system01.dbf 3 1 1 8192 7552 N 0 /oradata/oracle01/temp01.dbf 2 3 3 8192 73600 N 0 /oradata/oracle01/undotbs01.dbf 4 4 4 8192 640 N 0 /oradata/oracle01/users01.dbf load control file 'control.txt' successful loading dictionary data......done loading scanned data......done ODU>
ODU> save control The file write completed. ODU> exit ODU> 保存文件,这时候在在目录下面生成一个新的文件
[oracle@standby2 odu]$ ls
asmdisk.txt config.txt control.txt data odu oductl.txt odu_trace.txt