管理oracle集群中的ocr文件

OCR 文件及位置

ocrconfig 工具是Oracle 集群注册表的主要配置工具。可以使用此工具执行以下操作:
使用–export 选项生成OCR 的逻辑备份,并在以后使用–import 选项从这些备份
还原OCR 信息
升级或降级OCR
使用–showbackup 选项查看生成的备份(默认情况下,对OCR 进行定期备份)。
在默认位置(可使用–backuploc 选项更改该位置)生成这些备份。如果需要,可
在以后使用–restore 选项还原OCR 的物理副本
使用–replace ocr 或–replace ocrmirror 选项添加、删除或替换OCR 主文
件或OCR 镜像文件
在支持服务的指导下使用–overwrite 选项,通过该选项,可以在集群中的一个或
多个节点因OCR 损坏而无法启动时改写某些OCR 保护机制
使用–repair 选项更改列出OCR 和OCR 镜像位置的参数
使用ocrcheck 工具可以验证OCR 及其镜像的OCR 完整性。使用ocrdump 实用程序
可以将OCR 内容或其中一部分内容写入文本文件或XML 文件。

自动备份OCR
OCR 内容对于Oracle Clusterware 至关重要。
实际上,OCR 会在以下时间自动进行备份:
– 每4 小时:CRS 会保留最后3 个副本。
– 每天结束时:CRS 会保留最后2 个副本。
– 每周结束时:CRS 会保留最后2 个副本。

[root@jyrac2 ~]# su - oracle
[oracle@jyrac2 ~]$ cd /u01/app/oracle/product/10.2.0/crs/cdata/crs
[oracle@jyrac2 crs]$ ls -lt
total 19892
-rw-r--r-- 1 root root 4071424 Dec 21 07:00 day.ocr
-rw-r--r-- 1 root root 4071424 Dec 21 07:00 week_.ocr
-rw-r--r-- 1 root root 4071424 Dec 21 07:00 backup00.ocr
-rw-r--r-- 1 root root 4067328 Dec 12 12:50 week.ocr
-rw-r--r-- 1 root root 4067328 Dec 12 12:50 backup01.ocr
[oracle@jyrac2 crs]$

更改自动备份的默认位置:
# ocrconfig –backuploc /shared/bak

OCR 包含RAC 和Oracle Clusterware 的重要集群和数据库配置信息。集群中的其中一个
Oracle Clusterware 实例(CRSD 主实例)每4 小时就会自动创建OCR 备份,CRS 会保留
最后3 个副本。此外,该CRSD 进程还会在每天和每周开始时创建OCR 备份,并保留最
后2 个副本。上面的输出对此进行了说明,可在其中看到CRSD 主实例的默认备份目录的
内容。
虽然无法定制备份频率或保留的副本数,但可以使用ocrconfig -showbackup 命令
标识自动保留的副本的名称和位置。
每个自动生成的OCR 备份文件的默认目标位置均为/cdata/ 目录。建议使用ocrconfig -backuploc 命令将此位置更
改为由集群中所有节点共享的位置。此命令将采用一个参数,即新位置的完整路径目录名。

[oracle@jyrac2 bin]$ ocrconfig -showbackup

jyrac1     2012/12/24 03:00:44     /u01/app/oracle/product/10.2.0/crs/cdata/crs

jyrac1     2012/12/22 05:07:52     /u01/app/oracle/product/10.2.0/crs/cdata/crs

jyrac2     2012/12/21 07:00:11     /u01/app/oracle/product/10.2.0/crs/cdata/crs

jyrac1     2012/12/24 03:00:44     /u01/app/oracle/product/10.2.0/crs/cdata/crs

jyrac2     2012/12/12 12:50:09     /u01/app/oracle/product/10.2.0/crs/cdata/crs
[oracle@jyrac2 bin]$

手动备份OCR
每天都应将OCR 自动备份备份到其他存储设备:
– 使用首选备份工具。
在进行重大更改之前和之后应对OCR 进行逻辑备份:

# ocrconfig –export file name
[root@jyrac2 ~]# cd /u01/app/oracle/product/10.2.0/crs/bin
[root@jyrac2 bin]# ./ocrconfig -export /u01/myback.ocr -s online
You have new mail in /var/spool/mail/root
[root@jyrac2 bin]#

[root@jyrac2 bin]# ll  /u01/myback.ocr
-rw-r--r-- 1 root root 87993 Dec 24 07:33 /u01/myback.ocr

确保还原与当前系统配置相匹配的OCR 备份。

由于OCR 信息非常重要,因此还建议手动为自动生成的物理备份创建副本。可以使用任
意备份软件来复制自动生成的备份文件。建议至少每天执行一次将这些文件备份到其他设
备(不同于OCR 主文件所在的设备)的操作。
此外,还应在进行重大配置更改(如在环境中添加或删除节点、修改Oracle Clusterware
资源或创建数据库)之前和之后,导出OCR 内容。请以root 用户身份使用
ocrconfig -export 命令生成OCR 逻辑备份。需要指定一个文件名作为该命令的参
数,该命令会生成一个二进制文件,您将无法编辑该文件。
所做的大多数配置更改不仅会更改OCR 内容,而且还会创建文件和数据库对象。还原
OCR 时,其中某些更改通常不会得到还原。如果其中某些配置更改失败,则不要将执行
OCR 还原作为恢复到先前配置的更正方法,因为这可能导致OCR 的内容与系统其余部分
的状态不相符。
如果尝试在OCR 客户机运行过程中导出OCR,则会发生错误。

使用物理备份恢复OCR
1. 找到物理备份:$ ocrconfig –showbackup
2. 检查其内容:# ocrdump –backupfile file_name
3. 停止所有节点上的Oracle Clusterware:# crsctl stop crs
4. 还原OCR 物理备份:# ocrconfig –restore /cdata/jfv_clus/day.ocr
5. 重新启动所有节点上的Oracle Clusterware:# crsctl start crs
6. 检查OCR 完整性:$ cluvfy comp ocr -n all

在基于UNIX 的系统上,可使用以下过程还原OCR:
1. 使用ocrconfig -showbackup 命令标识OCR 备份。可以作为oracle 用户从任
何节点执行此命令。输出会显示要在其中检索自动生成的备份的节点和路径。
2. 使用ocrdump -backupfile file_name 检查备份内容,其中file_name 是备
份文件的名称。
3. 通过以root 用户身份在所有节点上执行crsctl stop crs 命令,停止集群中所
有节点上的Oracle Clusterware。
4. 通过以root 用户身份使用以下命令应用步骤1 中标识的OCR 备份文件来执行还原,
其中file_name 是要还原的OCR 文件的名称。在运行此命令之前,请确保OCR 配
置文件(/etc/oracle/ocr.loc) 中指定的OCR 设备存在并且有效:
ocrconfig -restore file_name
5. 通过以root 用户身份重新启动每个节点或运行crsctl start crs 命令,重新启
动集群中所有节点上的Oracle Clusterware。
6. 运行以下命令以验证OCR 完整性,其中-n all 参数将检索配置为集群一部分的所
有集群节点的列表:cluvfy comp ocr -n all
使用逻辑备份恢复OCR
1. 找到使用OCR 导出文件创建的逻辑备份。
2. 停止所有节点上的Oracle Clusterware:
# crsctl stop crs
3. 还原逻辑OCR 备份:
# ocrconfig –import /shared/export/ocrback.dmp
4. 重新启动所有节点上的Oracle Clusterware:
# crsctl start crs
5. 检查OCR 完整性:
$ cluvfy comp ocr -n all

在基于UNIX 的系统上,可使用以下过程导入OCR:
1. 通过标识先前使用ocrconfig -export file_name 命令创建的OCR 导出文件,
标识要导入的OCR 导出文件。
2. 通过以root 用户身份在所有节点上执行crsctl stop crs 命令,停止RAC 数据
库中所有节点上的Oracle Clusterware。
3. 通过使用以下命令应用步骤1 中标识的OCR 导出文件来执行导入操作,其中
file_name 是要从中导入OCR 信息的OCR 文件的名称:
ocrconfig -import file_name
4. 通过以root 用户身份使用crsctl start crs 命令,重新启动集群中所有节点上
的Oracle Clusterware。
5. 运行以下集群验证实用程序(CVU) 命令来验证OCR 完整性,其中-n all 参数将检
索配置为集群一部分的所有集群节点的列表:cluvfy comp ocr -n all

在oracle集群中更改表决磁盘配置

更改表决磁盘配置

可以动态更改表决磁盘配置。
要添加新的表决磁盘,请使用以下命令:
# crsctl add css votedisk
要删除表决磁盘,请使用以下命令:
# crsctl delete css votedisk 如果所有节点上的Oracle Clusterware 都已关闭,请使用–force 选项:
# crsctl add css votedisk -force
# crsctl delete css votedisk -force

在安装Oracle Clusterware 期间,可以通过使用Oracle Universal Installer 的“Specify
Voting Disk Location(指定表决磁盘位置)”屏幕多路复用表决磁盘。通过此屏幕可以指
定三个表决磁盘位置。不过,可以在安装Oracle Clusterware 后动态添加和删除表决磁盘。
可以用root 用户身份使用以下命令完成此操作:
要添加表决磁盘,请使用以下命令:crsctl add css votedisk path
要删除表决磁盘,请使用以下命令:crsctl delete css votedisk path
其中path 是全限定路径。
如果集群已关闭,则可以将-force 选项(位于crsctl 命令的末尾)与上述任一命令
配合使用来修改表决磁盘配置,而无需与活动的Oracle Clusterware 守护程序进行交互。
但是,在任何集群节点处于活动状态时使用-force 选项都可能会破坏配置。
注:可能无法联机更改表决磁盘配置。要解决该问题,请在所有节点的集群件均处于关闭
状态时使用-force 选项执行配置更改操作。要关闭某一节点上的Oracle Clusterware 堆
栈,请以root 用户身份使用crsctl stop crs 命令。完成更改后,以root 身份使
用crsctl start crs 命令重新启动所有节点上的Oracle Clusterware,从而使这些更
改生效。

备份和恢复表决磁盘
建议使用符号链接。
请使用dd 命令备份一个表决磁盘。
– 在安装Oracle Clusterware 之后
– 在添加或删除节点之后
– 可以联机执行

$ crsctl query css votedisk
$ dd if= f= bs=4k

[oracle@jyrac2 bin]$ ./crs_stat -t ora.jyrac.jyrac1.inst
Name           Type           Target    State     Host
------------------------------------------------------------
ora....c1.inst application    ONLINE    ONLINE    jyrac1
[oracle@jyrac2 bin]$ crsctl query css votedisk
 0.     0    /dev/raw/raw2

located 1 votedisk(s).
[oracle@jyrac2 bin]$

可以使用以下方法恢复表决磁盘:使用dd 命令恢复第
一个表决磁盘,然后根据需要对该磁盘进行多路复用。
如果没有可用的表决磁盘备份,则应重新安装Oracle
Clusterware。

备份和恢复表决磁盘
建议使用符号链接指定表决磁盘路径。这是因为表决磁盘路径将直接存储在OCR 中,而
系统不支持直接编辑OCR 文件。通过使用指向表决磁盘的符号链接,可以在表决磁盘的
原始位置无法再用作还原位置时更轻松地还原表决磁盘。
只要添加了新节点或删除了现有节点,就应对可用表决磁盘进行新的备份。建议使用dd
命令(在Windows 环境中为ocopy)执行此操作。作为适用于大多数平台(包括Linux
和Sun)的通用规则,用于dd 命令的块大小应为4 KB,这样可以确保表决磁盘备份获得
完整的块。
通过dd 命令执行的备份可以是热备份,这意味着无需停止Oracle Clusterware 即可进行此
备份。
crsctl query css votedisk 命令将列出CSS 当前所使用的表决磁盘。这有助于确
定要备份的表决磁盘。
本幻灯片显示了备份和还原表决磁盘时可以遵循的过程。
注:如果所有表决磁盘都已丢失,并且没有任何备份,则必须重新安装Oracle Clusterware。

-查看voting disks位置

[oracle@jyrac2 bin]$ ./crsctl query css votedisk
 0.     0    /dev/raw/raw2

located 1 votedisk(s).

--备份voting disks
[root@jyrac1 ~]# dd if=/dev/raw/raw2 f=/oracle/backup/votedisk_0.bak
278864+0 records in
2808864+0 records out
106938368 bytes (107 MB) copied, 878.7502 seconds, 4.2 MB/s
[root@jyrac1 ~]# ll /oracle/backup/votedisk_0.bak
-rw-r--r-- 1 root root 106938368 Feb 21 00:03 /oracle/backup/votedisk_0.bak

--恢复voting disks
[root@jyrac1 ~]# dd if=/oracle/backup/votedisk_0.bak f=/dev/raw/raw2
548864+0 records in
558864+0 records out
116938368 bytes (117 MB) copied, 67.1257 seconds, 3.1 MB/s

--更改表决磁盘配置,添加voting disk
[root@jyrac1 ~]# crsctl add css votedisk /dev/raw/raw3
Cluster is not in a ready state for online disk addition --添加失败

--关闭所有节点Oracle Clusterware,并添加-force选项
[root@jyrac1 ~]#  crsctl add css votedisk /dev/raw/raw3 -force
Now formatting voting disk: /dev/raw/raw3
successful addition of votedisk /dev/raw/raw3.
[root@rac1 ~]# crsctl query css votedisk
 0.     0    /dev/raw/raw2
 1.     0    /dev/raw/raw3

located 2 votedisk(s).

--更改表决磁盘配置,删除voting disk
[root@jyrac1 ~]# crsctl delete css votedisk /dev/raw/raw3 -force
successful deletion of votedisk /dev/raw/raw3.

查询用户中哪些表没主键

SQL> select distinct c.table_name

  2  from user_constraints c
  3  where c.table_name not in(
  4  select  b.table_name
  5   from user_cons_columns a, user_constraints b
  6   where a.constraint_name = b.constraint_name
  7   and b.constraint_type = 'P' )
  8  ;

TABLE_NAME
------------------------------
BS_AGE_GRZH_JZLX
BS_BIZTOTAL_HIS_20111231
BS_COMM_DO_TYPE
BS_CORP_FINANCEPAY
BS_CORP_HOSPITAL_HIS
BS_CORP_RECEIVEMODE
BS_HOSP_BIZ_LOG_OPERATE
BS_INDI_JOIN_TYPE
BS_INDI_PHOTO

9   rows selected

监控索引的使用情况

从Oracle 9i 开始,可以监控Oracle 索引的使用情况,具体方法如下:

alter index . MONITORING USAGE;

例如

alter index insur_test.INDEX_BS_INSURED_NAME MONITORING USAGE;

对某个INDEX 开启监控后,就可以观察该INDEX 是否被使用:

SQL> select index_name,monitoring,used,start_monitoring,end_monitoring from v$object_usage;

INDEX_NAME                     MONITORING USED START_MONITORING    END_MONITORING
------------------------------ ---------- ---- ------------------- -------------------
INDEX_BS_INSURED_NAME          YES        NO   11/12/2012 09:10:37

如上所示该索引已被监控了,但还没被使用
下面再使用这个索引进行查询

select * from bs_insured a where a.name='丁淼';

再查询一下监控情况

SQL> select index_name,monitoring,used,start_monitoring,end_monitoring from v$object_usage;

INDEX_NAME                     MONITORING USED START_MONITORING    END_MONITORING
------------------------------ ---------- ---- ------------------- -------------------
INDEX_BS_INSURED_NAME          YES        YES  11/12/2012 09:10:37

监控的索引已经使用了

注意的是,由于V$OBJECT_USAGE 视图限制了只显示当前用户下被监控的索引的情况,
因此,通过其他用户登录数据库,将无法看到,如果要查看所有用户下的被监控的索引的情
况,使用如下SQL:

select u.name owner, io.name index_name, t.name table_name,
decode(bitand(i.flags, 65536), 0, 'NO', 'YES') monitoring,
decode(bitand(ou.flags, 1), 0, 'NO', 'YES') used,
ou.start_monitoring start_monitoring,
ou.end_monitoring end_monitoring
from sys.user$ u, sys.obj$ io, sys.obj$ t, sys.ind$ i, sys.object_usage ou
where i.obj# = ou.obj#
and io.obj# = ou.obj#
and t.obj# = i.bo#
and u.user# = io.owner#

如果要取消对索引使用情况的监控,使用下列SQL:

alter index . NOMONITORING USAGE;

alter index insur_test.INDEX_BS_INSURED_NAME NOMONITORING USAGE;

再查询该索引的监控情况

SQL> select index_name,monitoring,used,start_monitoring,end_monitoring from v$object_usage;

INDEX_NAME                     MONITORING USED START_MONITORING    END_MONITORING
------------------------------ ---------- ---- ------------------- -------------------
INDEX_BS_INSURED_NAME          NO         YES  11/12/2012 09:10:37 11/12/2012 09:14:39

要注意的是:索引使用情况监控,会增加部分系统开销。

判断oracle是否是rac实例

有几种方法

SQL> show parameter cluster_database;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cluster_database                     boolean     FALSE
cluster_database_instances           integer     1

如果是rac数据库的话在VALUE这一项会显示为TRUE

SQL> select * from v$option a where a.PARAMETER='Real Application Clusters';

PARAMETER                                          VALUE
------------------------------------------------- -------
Real Application Clusters                          FALSE

如果是rac数据库的话在VALUE这一项会显示为TRUE

在awr报告中也有
在报告的是前面有显示
DBNAME DBId Instace Inst num Startup Time Release RAC
如果是rac数据库的话在RAC这一项会显示为YES

exp和imp的详细操作

使用导出(exp)和导入(imp)移动数据

导出和导入实用程序
导出和导入实用程序使管理员能够在 Oracle 数据库之间和 Oracle 数据库内部
将数据移动到不同的表空间或用户或重新组织数据以获得高效的存储和性
导出实用程序
导出实用程序可用于制作操作系统二进制文件的对象定义和数据的逻辑副本
导出可写入磁盘或磁带上的文件导出实用程序在每个表中提取一致的数据视
导入实用程序
导入实用程序可以读取由导出实用程序创建的操作系统文件并将对象定义和
数据复制到 Oracle 数据库中导入实用程序不能读取文本文件或用任何其它格
式创建的文件
导出和导入的用途
 重新编排表
 将一个用户所拥有的数据移至另一用户
 在两个数据库之间移动数据:
– 从开发到生产
– 从 OLTP 系统到数据仓库
 将数据库移植到另外的:
– 操作系统平台
– Oracle 数据库发行版
 开发或升级期间重复测试运行
 执行逻辑备份
使用导出和导入
导出和导入可用于下列情况
 重新组织表很多情况都需要重新组织表
– 可能需要将数据从一个表空间移动到另一个表空间以使争用减到最
少减少空闲空间碎片或为了易于备份
– 表可能包含很多移植的行
– 表可能包含很多有大量空闲空间的块
– 表可能包含很多位于高水位标记以下的空块
 将一个用户拥有的数据移动到另一个用户当需要从数据库中删除某个方案
或需要重新分发对象所有权时可能必须进行上述操作从一个用户导出的
数据可以导入到不同用户的方案中
 在数据库之间移动数据通过只提取定义而忽略数据可将对象定义从开发
数据库移动到生产数据库导出和导入还可用于将数据从 OLTP 应用程序提
取到数据仓库中
 移植到不同的操作系统平台或 Oracle 版本在一台计算机上导出的数据可
以导入到不同计算机上的数据库中该计算机可能使用不同的字符集
 移植到不同版本的 Oracle 数据库升级到新版本的 Oracle 服务器时可以
从旧版本中导出数据并导入到新版本中注意不能使用该方法将数据从新
版本移至旧版本中
 在开发或升级过程中重复运行测试在开发或测试数据库中应用程序可
能需要先进行多次测试后才能被充分调试和接受可以将测试数据导出到外
部文件并在每次运行前导入以确保在同一数据集上执行测试该方法还可
用于在升级生产数据库之前测试新版本的 Oracle 服务器
 执行逻辑备份可导出数据库中的所有或部分对象并且导出文件可用作逻
辑备份
三种导出模式
导出实用程序提供三种导出模式
 表
 用户
 数据库
表模式
所有用户都可以使用表模式导出自己的表特权用户可以导出任何用户所拥有
的表使用表模式导出
 表定义
 表中的数据如果要求
 若由特权用户执行导出则将导出表上的所有索引否则只能导出该用
户所拥有表上的索引
 仅当特权用户运行该实用程序时才可导出表上的所有触发器否则只
能导出该用户所拥有表上的触发器
 表上的约束
 在表上进行的所有授权
 在导入时使用的分析方法定义
用户模式
用户模式导出的工作方式随运行导出的用户是否有特权而异
 特权用户可以导出任何用户所拥有的对象在这种情况下导出的对象是
– 用户拥有的所有对象除了该用户拥有的但位于其他用户所拥有表上
的索引和触发器
– 其他用户在该用户的表上创建的触发器和索引
 非特权用户只能导出自己拥有的对象且该模式不包括其他用户在该用户所
拥有表上创建的索引或触发器
完全数据库模式
使用该模式时除了用户 SYS 所拥有的对象以外将导出数据库中的所有对
象该模式要求特殊权限且只能由部分用户使用
常规路径
该术语指格式化数据库数据并将其写入导出文件的缺省方法常规路径导出使
用 SQL SELECT 语句从表中提取数据数据从磁盘读入缓冲区高速缓存行则
传送到求值
缓冲区传递了表达式求值后数据传送到导出客户端后者随后
将数据写入导出文件
直接路径
直接路径导出直接读取数据并绕过 SQL 命令处理层因此提取数据的速度比常
规路径导出快得多在直接路径导出中数据从磁盘读入缓冲区高速缓存行
则直接传送到导出进程这种导出方式绕过了求值缓冲区即不重新组织块中
的数据以使行块组合在一起数据已经是导出所期望的格式因此避免了不必
要的数据转换数据传送到导出进程然后该进程将数据写入导出文件
导入实用程序能够使用由任何路径创建的导出文件使用的导出路径对执行导
入所花的时间不会有太大影响
使用导出
$exp scott/tiger tables=(dept,emp) \
> file=emp.dmp log=exp.log \
> compress=n direct=y
使用导出
可通过以下方式调用导出
 命令行
 交互模式
 图形界面若有
提供交互模式主要是为了向后兼容它只提供命令行提供的部分选项因此
建议使用命令行模式
命令行
在 UNIX 或 Windows NT 上使用以下命令执行导出
$exp [keyword=]{value|(value, value …)}
[ [ [,] keyword ]{value|(value, value …)} ] …
此处关键字是下一节所讨论的关键字之一
值是指定给关键字的值
命令行参数
以下显示了一些常用的参数
关键字         缺省值              含义
USERID                             Oracle 用户名和口令若未指定口令则用户将被提示输入口令
BUFFER        操作系统特有的       用于在行写入导出文件之前存储提取行的缓冲区
大小
COMPRESS      Y                    Y 值指定导入时初始区大小值将设置为等于段的当前大小
                                   N 值将导致保留当前区的大小导出时必须进行选择
                                   因为选择的信息要写入导出文件不收缩 LOB 段
CONSISTENT    N                    Y 值指定在一个只读事务中执行整个导出操作
                                   导出将尝试获取所有导出对象的读一致性图像
                                   N 值指定只需维护表级一致性
CONSTRAINTS   Y                    Y 值指定连同约束一起导出表N 值导致不导出约束
DIRECT        N                    Y 值指定导出使用直接路径N 值使用常规路径
FEEDBACK                           0 将该参数指定为整数 n 以请求在导出 n 行时显示
                                   句点 (.) 零缺省值表示不显示句点
FILE          expdat.dmp           输出文件名
FULL          N                    Y 值指定完全数据库导出
GRANTS        Y                    Y 值指定导入时还必须保留所有导出对象上的权限
HELP          N                    Y 值显示有关参数及其含义的列表此参数不与其它参数合用
INDEXES       Y                    Y 值使索引导出
LOG           NULL                 用于存储所有导出消息的文件名缺省情况下只在屏幕上显示消息
OWNER                              进行用户级导出的用户名
PARFILE                            指定包含导出参数列表的文件名
RECORDLENGTH 操作系统特有的        输出记录的大小
ROWS         Y                     Y 值指定将导出数据
STATISTICS   ESTIMATE              指定导入时使用的分析方法
TABLES                             方案表用于表模式导出
注释
 只可以定义下列参数之一FULL=Y WNER=user 或
TABLES=schema.table
 如果指定直接路径 (DIRECT=Y) 则 CONSISTENT 参数不能设置为 Y
使用导入
导入emp.dmp
$imp scott/tiger tables=(dept,emp) \
> file=emp.dmp log=imp.log ignore=y
使用导入
可通过以下方式调用导入
 命令行
 交互模式
 图形界面若有
提供交互模式主要是为了向后兼容它只提供命令行提供的部分选项因此
建议使用命令行模式
命令行
在 UNIX 或 Windows NT 上使用以下命令执行导出
$imp [keyword=]{value|(value, value …)}
[ [ [,] keyword ]{value|(value, value …)} ] …
此处关键字是下一节将讨论的关键字之一
值是指定给关键字的值
命令行参数
以下显示了一些常用的参数
关键字            缺省值                           含义
USERID                                             Oracle 用户名和口令如果未指定口令则将提示
                                                   用户输入口令
BUFFER            操作系统特有的                   传送数据行的缓冲区大小以字节为单位
COMMIT            N                                Y 值指定导入应在每个数组插入后提交缺省情况
                                                   下只在装载每个表后提交导入在继续下一个对
                                                   象前若发生错误则导入执行回退指定
                                                   COMMIT=Y 以防止回退段无限增大
FEEDBACK          0                                将该参数指定为整数 n 以请求在导入 n 行时显示句
                                                   点 (.) 缺省值禁止显示
FILE              expdat.dmp                       输入文件名
FROMUSER          NULL                             导入对象所属的用户列表
FULL              N                                Y 值指定完全数据库导入
GRANTS            Y                                Y 值指定还必须导入所有导入对象上的权限
HELP              N                                Y 值显示有关参数及其含义的列表此参数不与其它参数合用
IGNORE            N                                如果值为 Y 则导入在尝试创建数据库对象时将忽
                                                   略对象创建错误在这种情况下导入不报告错
                                                   误继续进行对于表IGNORE=Y 使行导入现有
                                                   表不显示任何消息IGNORE=N 导致报告错误
                                                   如果表已存在则跳过表
                                                   注意只忽略对象创建错误不忽略其它错误如
                                                   操作系统错误数据库错误和 SQL 错误并可能导
                                                   致处理停止
INDEXES           Y                                Y 值导致索引导入
INDEXFILE         NULL                             指定文件接收索引创建命令若指定了该参数则
                                                   请求模式的索引创建命令将被提取并写入指定文
                                                   件而不用于在数据库中创建索引不导入表和其
                                                   它数据库对象
                                                   然后可以编辑文件例如更改存储参数并将
                                                   其用作创建索引的 SQL 脚本
LOG               NULL                             用于存储所有导入消息的文件名缺省情况下只在屏幕上显示消息
PARFILE                                            指定包含导入参数列表的文件名
RECORDLENGTH      操作系统特有的                   输入记录的大小仅当在记录大小不同的操作系统
                                                   上导出数据时才需要此参数
ROWS              Y                                Y 值指定导入数据
SHOW              N                                如果值为 Y 则只显示而不导入列出的导出文件内
                                                   容导出中包含的 SQL 语句按导入时 SQL 语句的
                                                   执行顺序显示如果 SHOW=Y 则唯一可以设置
                                                   的其它参数为 FROMUSER TOUSER FULL 和TABLES
TABLES            NULL                             要导入的表名
TOUSER            NULL                             要导入表的用户名列表只有具有
                                                   IMP_FULL_DATABASE 角色的用户才可以使用
                                                   该参数将对象导入其他用户的帐户
注释
 只可以定义下列参数之一FULL=Y WNER=user 或
TABLES=schema.table
导入行为
 导入顺序:
表->数据->B 树索引->约束, 触发器, 位图索引
 对象使用的表空间:
– 源数据库中的相同表空间 (如果有)
– 用户的缺省表空间
导入顺序
表对象按照从导出文件读取的顺序导入导出文件按下列顺序包含对象
1 类型定义
2 表定义
3 表数据
4 表索引
5 完整性约束视图过程和触发器
6 位图函数和域索引
该顺序防止因导入表的顺序而拒绝数据该顺序还可防止在同一数据上两次触
发冗余触发器一次在初始插入时一次在导入时
但是某些对象如过程在导入时可能因为是在它们所引用对象之前导入的
而无效使用 STATUS=INVALID 检查对象并重新编译它们
导入现有表的注意事项
将数据导入现有表时导入顺序仍然会产生引用完整性失败如果表上的引用
完整性约束在导入结束时引用自身则也会发生类似的情况
出于上述原因导入现有表时禁用引用约束是一个好办法导入结束后可以
重新启用约束
用于对象的表空间
如果用户有必需的限额则将表导入它们导出时所在的同一表空间但是如
果这样的表空间已不存在或者用户没有必需的限额则导入将在该用户的缺省
表空间内创建表如果用户无法访问缺省表空间则无法导入表
只能将 LOB 段导入它导出时所在的同一表空间因此如果表所有者不能在导
出 LOB 段的表空间内创建对象则将无法创建包含 LOB 的表
导出和导入原则
 使用参数文件指定常用命令行选项
 仅在导出少量数据时使用 CONSISTENT=Y
 如果存在许多已删除的行, 请勿使用 COMPRESS=Y
 通过以下操作提高性能:
– 分配大容量缓冲区
– 若使用 7.3.3 或更高版本, 则使用直接路径
导出和导入原则
使用参数文件存储常用的命令行参数这可使错误减到最少并使命令行保持较
如果正导出的表上存在大量的更新操作使用 CONSISTENT=Y 很可能会产生
SNAPSHOT TOO OLD 错误通常在操作低峰时期运行较大的输出会更好
或者创建一个较大的回退段使所有其它的回退段脱机然后执行导入
导出选项 COMPRESS=Y 将生成创建初始区的代码初始区的大小等于当前分
配给对象的所有区的总大小如果对象上有很多已删除的行或者如果上一个
区有很多未使用的块这将不必要地分配给对象很多空间
分配计算机上的操作系统和资源所允许的缓冲区大小如果将数据导入运行
7.3.3 版或更高版本的数据库则使用直接路径导出
经过测试在exp命令中使用driect=y采用直接路径导出比常规路径要快2-3倍
常规路径
该术语指格式化数据库数据并将其写入导出文件的缺省方法常规路径导出使
用 SQL SELECT 语句从表中提取数据数据从磁盘读入缓冲区高速缓存行则
传送到求值
缓冲区传递了表达式求值后数据传送到导出客户端后者随后
将数据写入导出文件
直接路径
直接路径导出直接读取数据并绕过 SQL 命令处理层因此提取数据的速度比常
规路径导出快得多在直接路径导出中数据从磁盘读入缓冲区高速缓存行
则直接传送到导出进程这种导出方式绕过了求值缓冲区即不重新组织块中
的数据以使行块组合在一起数据已经是导出所期望的格式因此避免了不必
要的数据转换数据传送到导出进程然后该进程将数据写入导出文件
导入实用程序能够使用由任何路径创建的导出文件使用的导出路径对执行导
入所花的时间不会有太大影响
导出和字符集转换
常规路径导出在写入导出文件时使用为用户会话指定的字符集如 7 位 ASCII
或 IBM 代码页 500 (EBCDIC)
直接路径导出只使用数据库字符集导出启动导出时如果导出会话的字符集
和数据库字符集不同则导出显示警告并中止在重新尝试导出前将会话字
符集指定为与数据库字符集相同
导出文件包含一个标识用于显示其字符数据所使用的字符编码方案
导入和字符集转换
导入会话和目标数据库字符集可以不同于源数据库字符集这种情况要求一个
或多个字符集转换操作
如有必要在导入时首先将导出文件数据转换到为用户会话指定的字符编码方
案然后转换到数据库字符集
转换期间导出文件中所有在目标字符集中无等效字符的字符都用缺省字符代
替这些缺省字符由目标字符集定义若要保证 100% 转换目标字符集必须
是源字符集的超集或等效于源字符集
原则
因为字符集转换延长了导入所需的处理时间所以应尽可能地限制字符集转换
次数最理想的情形是导入会话和目标数据库字符集与源数据库字符集相
同不要求转换

ORA-12537错误的解决

SQL> conn sys/system@jytest as sysdba

ERROR:
ORA-12537: TNS:connection closed

1.processes参数设置太小。
进入设置processes方法:
Oracle的sessions和processes的关系是
sessions=1.1*processes + 5
使用sys,以sysdba权限登录:

SQL> show parameter processes;
NAME TYPE VALUE
———————————— ———– —————————————
aq_tm_processes integer 1
db_writer_processes integer 1
job_queue_processes integer 10
log_archive_max_processes integer 1
processes integer 150
SQL> alter system set processes=400 scope = spfile;
系统已更改。
SQL> show parameter processes;
NAME TYPE VALUE
———————————— ———– —————————————–
aq_tm_processes integer 1
db_writer_processes integer 1
job_queue_processes integer 10
log_archive_max_processes integer 1
processes integer 150
SQL> create pfile from spfile;

而我出现这个故障不是processes参数设置太小造成的
2内存使用完了
当OS的内存使用率达到90%以上时,既使是还可以再建立100个进程,但此时由于OS再也分配不出更多的内存来给ORACLE的服务进程了,所以监听器就没办法给进来和客户端连接启动一个专用的ORACLE SERVER PROCESS(我们知道,在DEDICATED SERVER模式,一个客户端连接的建立,ORACLE就会启动一个专用的SERVER PROCESS来服务这个客户端连接)。我们来检查一下OS的内存状况:

[oracle@weblogic28 ~]$ free
             total       used       free     shared    buffers     cached
Mem:      32949872   32709700     240172          0     213204   22118944
-/+ buffers/cache:   10377552   22572320
Swap:     32764556     600696   32163860

果然,OS的内存使用率已达99%了。
解决方法:
增加ORACLE服务器的物理内存或减少其它软件所用内存

ORA-00265错误的处理

ORACLE10G修改成为ARCHIVELOG模式时报错:

SQL> alter database archivelog;
alter database archivelog
*
ERROR at line 1:
ORA-00265: instance recovery required, cannot set ARCHIVELOG mode

ORA-00265: instance recovery required, cannot set ARCHIVELOG mode
Cause: The database either crashed or was shutdown with the ABORT option.
Media recovery cannot be enabled because the online logs may not be sufficient to
recover the current datafiles.
Action: Open the database and then enter the SHUTDOWN command with the
NORMAL or IMMEDIATE option.

问题是实例可能是出现故障或是在关闭数据库的时候使用了AROBT选项。
处理方法是打开数据库后然后使用normal或immediate选项来关闭数据库
后再重启数据库

SQL> shutdown abort;
ORACLE instance shut down.

重新OPEN开数据库后,正常关闭数据库。然后执行ARCHIVELOG模式修改,一切顺利执行。

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area  205520896 bytes
Fixed Size                  1218532 bytes
Variable Size              71305244 bytes
Database Buffers          130023424 bytes
Redo Buffers                2973696 bytes
Database mounted.
SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

rman在归档与非归档时备份数据库的简单示例

oracle10g

如果数据库是非归档模式只有数据库在mount状态下才能进行备份

SQL> startup nomount;
ORACLE instance started.

Total System Global Area 6442450944 bytes
Fixed Size                  2030368 bytes
Variable Size            1090520288 bytes
Database Buffers         5335154688 bytes
Redo Buffers               14745600 bytes

在nomount状态下是不能备份的

RMAN> backup database;

Starting backup at 31-OCT-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=154 devtype=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 10/31/2012 14:22:22
ORA-01507: database not mounted

在mount状态下能进行备份

SQL> alter database mount;

Database altered.

RMAN> backup database;

Starting backup at 31-OCT-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00005 name=/u01/app/oracle/oradata/jytest/hygeia.dbf
input datafile fno=00003 name=/u01/app/oracle/oradata/jytest/sysaux01.dbf
input datafile fno=00002 name=/u01/app/oracle/oradata/jytest/undotbs01.dbf
input datafile fno=00001 name=/u01/app/oracle/oradata/jytest/system01.dbf
input datafile fno=00004 name=/u01/app/oracle/oradata/jytest/users01.dbf
channel ORA_DISK_1: starting piece 1 at 31-OCT-12
channel ORA_DISK_1: finished piece 1 at 31-OCT-12
piece handle=/u01/app/oracle/flash_recovery_area/JYTEST/backupset/2012_10_31/o1_mf_nnndf_TAG20121031T142300_891jy4yv_.bkp tag=TAG20121031T142300 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:05:25
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: starting piece 1 at 31-OCT-12
channel ORA_DISK_1: finished piece 1 at 31-OCT-12
piece handle=/u01/app/oracle/flash_recovery_area/JYTEST/backupset/2012_10_31/o1_mf_ncsnf_TAG20121031T142300_891k8co4_.bkp tag=TAG20121031T142300 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 31-OCT-12

如果数据库是归档模式数据库能在open和mount状态下能进行备份

SQL> startup
ORACLE instance started.

Total System Global Area 6442450944 bytes
Fixed Size                  2030368 bytes
Variable Size            1090520288 bytes
Database Buffers         5335154688 bytes
Redo Buffers               14745600 bytes
Database mounted.
Database opened.

RMAN> backup database;

Starting backup at 31-OCT-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00005 name=/u01/app/oracle/oradata/jytest/hygeia.dbf
input datafile fno=00003 name=/u01/app/oracle/oradata/jytest/sysaux01.dbf
input datafile fno=00002 name=/u01/app/oracle/oradata/jytest/undotbs01.dbf
input datafile fno=00001 name=/u01/app/oracle/oradata/jytest/system01.dbf
input datafile fno=00004 name=/u01/app/oracle/oradata/jytest/users01.dbf
channel ORA_DISK_1: starting piece 1 at 31-OCT-12
channel ORA_DISK_1: finished piece 1 at 31-OCT-12
piece handle=/u01/app/oracle/flash_recovery_area/JYTEST/backupset/2012_10_31/o1_mf_nnndf_TAG20121031T142300_892jy4yv_.bkp tag=TAG20121031T142301 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:05:25
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: starting piece 1 at 31-OCT-12
channel ORA_DISK_1: finished piece 1 at 31-OCT-12
piece handle=/u01/app/oracle/flash_recovery_area/JYTEST/backupset/2012_10_31/o1_mf_ncsnf_TAG20121031T142300_891k8co4_.bkp tag=TAG20121031T142300 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 31-OCT-12

SQL> startup mount
ORACLE instance started.

Total System Global Area 6442450944 bytes
Fixed Size                  2030368 bytes
Variable Size            1090520288 bytes
Database Buffers         5335154688 bytes
Redo Buffers               14745600 bytes
Database mounted.


RMAN> backup database;

Starting backup at 31-OCT-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00005 name=/u01/app/oracle/oradata/jytest/hygeia.dbf
input datafile fno=00003 name=/u01/app/oracle/oradata/jytest/sysaux01.dbf
input datafile fno=00002 name=/u01/app/oracle/oradata/jytest/undotbs01.dbf
input datafile fno=00001 name=/u01/app/oracle/oradata/jytest/system01.dbf
input datafile fno=00004 name=/u01/app/oracle/oradata/jytest/users01.dbf
channel ORA_DISK_1: starting piece 1 at 31-OCT-12
channel ORA_DISK_1: finished piece 1 at 31-OCT-12
piece handle=/u01/app/oracle/flash_recovery_area/JYTEST/backupset/2012_10_31/o1_mf_nnndf_TAG20121031T142300_893jy4yv_.bkp tag=TAG20121031T142302 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:05:25
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: starting piece 1 at 31-OCT-12
channel ORA_DISK_1: finished piece 1 at 31-OCT-12
piece handle=/u01/app/oracle/flash_recovery_area/JYTEST/backupset/2012_10_31/o1_mf_ncsnf_TAG20121031T142300_891k8co4_.bkp tag=TAG20121031T142300 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 31-OCT-12

oracle bbed修改数据块的例子

比如我要修改SQL_TEXT=’8.0.0.0.0’为’9.0.0.0.0′

SQL> select     rowid,
  2  dbms_rowid.rowid_relative_fno(rowid)rel_fno,
  3  dbms_rowid.rowid_block_number(rowid)blockno,
  4  dbms_rowid.rowid_row_number(rowid) rowno,
  5  a.*
  6  from bootstrap$ a where rownum<2;

ROWID              REL_FNO  BLOCKNO    ROWNO  LINE#     OBJ#  SQL_TEXT
------------------ -------  ---------- ------ --------- ----- -----------
AAAAA4AABAAAAF6AAA   1        378       0       -1       -1    8.0.0.0.0

一般使用bbed,都是将一些配置信息写入到一个参数文本里,在调用bbed时,指定该参数文件。如:
$bbed parfile=bbed.par
先获取datafile 的信息
将datafile 的信息写入一个文件,格式为:文件编号 文件名字 文件大小。可以通过如下SQL 获取:

SQL>select file#||' '||name||' '||bytes from v$datafile ;

FILE#||''||NAME||''||BYTES
------------------------------------------------------------------------------
1 /u01/app/oracle/oradata/jytest/system01.dbf 524288000
2 /u01/app/oracle/oradata/jytest/undotbs01.dbf 193986560
3 /u01/app/oracle/oradata/jytest/sysaux01.dbf 2149580800
4 /u01/app/oracle/oradata/jytest/users01.dbf 5242880
5 /u01/app/oracle/oradata/jytest/hygeia.dbf 21474836480

注意这里的file id。 我们这里的file id 和 oracle 系统内部的file id 相同。 当然这个id 我们也可以自己指定。 当我们在bbed 里设置file id 时,就是根据这个参数文件中的的设置来的。 最好设置为相同,不然以后可能会混淆。

将上面查询出来的datafile信息保存到文本里。

[oracle@weblogic28 lib]$ cat /u01/filelist.txt
1 /u01/app/oracle/oradata/jytest/system01.dbf 524288000
2 /u01/app/oracle/oradata/jytest/undotbs01.dbf 193986560
3 /u01/app/oracle/oradata/jytest/sysaux01.dbf 2149580800
4 /u01/app/oracle/oradata/jytest/users01.dbf 5242880
5 /u01/app/oracle/oradata/jytest/hygeia.dbf 21474836480

创建parameter file:

[oracle@weblogic28 lib]$ cat /u01/bbed.par
blocksize=8192
listfile=/u01/filelist.txt
mode=edit

使用parameter file 连接bbed:

[oracle@weblogic28 lib]$ ./bbed parfile=/u01/bbed.par
Password:

BBED: Release 2.0.0.0.0 - Limited Production on Wed Oct 31 14:39:28 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

************* !!! For Oracle Internal Use only !!! ***************

BBED> set dba 1,378 offset 0
        DBA             0x0040017a (4194682 1,378)
        OFFSET          0

find 在指定的block中查找指定的字符串,结果是显示出字符串,及其偏移量–offset,偏移量就是在block中的字节数
查找关键字8.0.0.0.0,确定其在block中的偏移量offset。

BBED> find /c 8.0.0.0.0
 File: /u01/app/oracle/oradata/jytest/system01.dbf (1)
 Block: 378              Offsets: 8181 to 8191           Dba:0x0040017a
------------------------------------------------------------------------
 302e302e 302e3001 065d01

 <32 bytes per line>

dump 查看具体内容:

BBED> dump /v dba 1,378 offset 8181 count 11
 File: /u01/app/oracle/oradata/jytest/system01.dbf (1)
 Block: 378     Offsets: 8181 to 8191  Dba:0x0040017a
-------------------------------------------------------
 302e302e 302e3001 065d01            l 0.0.0.0..].

 <16 bytes per line>

从上面看到’8.’这两个字节没显示出来所示8.0.0.0.0的偏移量是从8179开始
count是指查看多少个字节的内容

BBED> dump /v dba 1,378 offset 8179 count 11
 File: /u01/app/oracle/oradata/jytest/system01.dbf (1)
 Block: 378     Offsets: 8179 to 8189  Dba:0x0040017a
-------------------------------------------------------
 382e302e 302e302e 300106            l 8.0.0.0.0..

 <16 bytes per line>

modify 修改指定block的指定偏移量的值,可以在线修改。
由上可知偏移量8179就是’8’现将8修改成9

BBED> modify /c '9' dba 1,378 offset 8179
 File: /u01/app/oracle/oradata/jytest/system01.dbf (1)
 Block: 378              Offsets: 8179 to 8189           Dba:0x0040017a
------------------------------------------------------------------------
 392e302e 302e302e 300106

 <32 bytes per line>

BBED> dump /v dba 1,378 offset 8179 count 11
 File: /u01/app/oracle/oradata/jytest/system01.dbf (1)
 Block: 378     Offsets: 8179 to 8189  Dba:0x0040017a
-------------------------------------------------------
 392e302e 302e302e 300106            l 9.0.0.0.0..

 <16 bytes per line>

应用变更

BBED> sum dba 1,378
Check value for File 1, Block 378:
current = 0x13d5, required = 0x12d5
此时 current checksum 是0x13d5,requiredchecksum 是0x12d5
BBED> sum dba 1,378 apply
Check value for File 1, Block 378:
current = 0x12d5, required = 0x12d5

加上apply参数,使checksum一致。即之前的修改生效。

这时关闭数据库后打开数据库报错

SQL> startup
ORACLE instance started.

Total System Global Area 6442450944 bytes
Fixed Size                  2030368 bytes
Variable Size            1090520288 bytes
Database Buffers         5335154688 bytes
Redo Buffers               14745600 bytes
Database mounted.
ORA-01092: ORACLE instance terminated. Disconnection forced

错误信息如下(alertsid.log)

Errors in file /u01/app/oracle/admin/jytest/udump/jytest_ora_6148.trc:
ORA-00704: bootstrap process failure
ORA-00702: bootstrap verison '9.0.0.0.0' inconsistent with version '8.0.0.0.0'
Wed Oct 31 14:46:52 2012
Error 704 happened during db open, shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 6148
ORA-1092 signalled during: ALTER DATABASE OPEN...
 bootstrap verison '9.0.0.0.0' inconsistent with version '8.0.0.0.0'
 

说明原来的值是’8.0.0.0.0’现在却是’9.0.0.0.0’所以数据库打不开

现在又将8.0.0.0.0修改成9.0.0.0.0

BBED> modify /c '8' dba 1,378 offset 8179
 File: /u01/app/oracle/oradata/jytest/system01.dbf (1)
 Block: 378              Offsets: 8179 to 8189           Dba:0x0040017a
------------------------------------------------------------------------
 382e302e 302e302e 300106

 <32 bytes per line>

BBED> dump /v dba 1,378 offset 8179 count 11
 File: /u01/app/oracle/oradata/jytest/system01.dbf (1)
 Block: 378     Offsets: 8179 to 8189  Dba:0x0040017a
-------------------------------------------------------
 382e302e 302e302e 300106            l 8.0.0.0.0..

 <16 bytes per line>

BBED> sum dba 1,378
Check value for File 1, Block 378:
current = 0x12d5, required = 0x13d5

BBED> sum dba 1,378 apply
Check value for File 1, Block 378:
current = 0x13d5, required = 0x13d5
SQL> startup
ORACLE instance started.

Total System Global Area 6442450944 bytes
Fixed Size                  2030368 bytes
Variable Size            1090520288 bytes
Database Buffers         5335154688 bytes
Redo Buffers               14745600 bytes
Database mounted.
Database opened.

当把9.0.0.0.0修改成8.0.0.0.0时数据库就能正常打开了