« April 2008 | Digest首页 | June 2008 »

May 23, 2008

RMAN简明参考使用手册

出处:http://www.eygle.com/digest

以下是RMAN的简要使用参考,主要内容涉及Oracle9i,不包含之后版本信息。
部分脚本仅作参考:

一、RMAN的概念与体系结构
Recovery Manager(RMAN)是一种用于备份(backup)、还原(restore)和恢复(recover)数据库的 Oracle 工具。RMAN只能用于ORACLE8或更高的版本中。它能够备份整个数据库或数据库部件,如表空间、数据文件、控制文件、归档文件以及Spfile参数文件。RMAN也允许您进行增量数据块级别的备份,增量RMAN备份是时间和空间有效的,因为他们只备份自上次备份以来有变化的那些数据块。而且,通过RMAN提供的接口,第三方的备份与恢复软件如veritas将提供更强大的备份与恢复的管理功能。

通过RMAN,也提供了其它更多功能,如数据库的克隆、采用RMAN建立备用数据库、利用RMAN备份与移动裸设备(RAW)上的文件等工作将变得更方便简单。9i的RMAN通过增强的自动配置与管理功能,以及特有的块级别的恢复,将使备份与恢复工作变得更加快捷与完美。

9i的RMAN有如下特征特性:


  • ·自动的备份与恢复

  • ·方便的备份归档日志

  • ·自动检测新的数据文件

  • ·支持增量备份

  • ·最大限度的减少备份与恢复的错误

  • ·减少恢复的时间

  • ·在热备份中不会产生额外的redo日志

  • ·损坏数据块的自动检测

  • ·并行的备份与恢复操作

  • ·在线备份时,表空间不用置于备份模式

可以看到,在以上的一些特性中,显示了RMAN强大的功能与好处,以上功能的实现,是因为RMAN是块级别的备份与恢复,备份与恢复发生在数据库块级别,可以通过比较数据块而获得一致性的数据块,可以避免备份没有用过的块,可以检验块是否损坏等块级别的问题。

对于组成以上RMAN 的结构,说明如下:
1、RMAN 工具
也就是RMAN 命令,起源于Oracle 版本8,一般位于$ORACLE_HOME/bin 目录下,可以通过运行rman这个命令来启动RMAN 工具,用于备份与恢复的接口。
2、服务进程
RMAN 的服务进程是一个后台进程,用于与RMAN工具与数据库之间的通信,也用于RMAN 工具与磁盘/磁带等I/O 设置之间的通信,服务进程负责备份与恢复的所有工作,在如下情况将产生一个服务进程:


  • ·当连接到目标数据库

  • ·分配一个新的通道


3、通道
通道是服务进程与I/O 设备之前读写的途径,一个通道将对应一个服务进程,在分配通道时,需要考虑I/O 设备的类型,I/O 并发处理的能力,I/O 设备能创建的文件的大小,数据库文件最大的读速率,最大的打开文件数目等因素
4、目标数据库
就是RMAN 进行备份与恢复的数据库,RMAN 可以备份除了联机日志,pfile,密码文件之外的数据文件,控制文件,归档日志,spfile
5、恢复目录
用来保存备份与恢复信息的一个数据库,不建议创建在目标数据库上,利用恢复目录可以同时管理多个目标数据库,存储更多的备份信息,可以存储备份脚本。如果不采用恢复目录,可以采用控制文件来代替恢复目录,oracle 9i因为控制文件自动备份的功能,利用控制文件很大程度上可以取代恢复目录。
6、媒体管理层
Media Management Layer (MML)是第三方工具或软件,用于管理对磁带的读写与文件的跟踪管理。如果你想直接通过RMAN 备份到磁带上,就必须配置媒体管理层,媒体管理层的工具如备份软件可以调用RMAN 来进行备份与恢复。
7、备份,备份集与备份片
当发出backup命令的时候,RMAN 将创建一个完成的备份,包含一个到多个备份集,备份集是一个逻辑结构,包含一组的物理文件。这些物理文件就是对应的备份片。备份片是最基本的物理结构,可以产生在磁盘或者磁带上,可以包含目标数据库的数据文件,控制文件,归档日志与spfile文件。
备份集与备份片有如下规定:
一个数据文件不能跨越一个备份集,但是能跨越备份片
数据文件,控制文件能保存在同样的备份集上,但是不能与归档日志保存在同样的备份集上

二、启动与运行RMAN
运行要求
1、进程与内存要求
更多的进程的需要
大池的分配
2、基本环境变量需求
ORACLE_SID, ORACLE_HOME, PATH, NLS_LANG, 如果用到了基于时间的备份与恢复,需要另外设置NLS_DATE_FORMAT
3、权限要求
需要SYSDBA系统权限
如果是本地,可以采用OS认证,远程需要采用密码文件认证
4、版本要求
RMAN 工具版本与目标数据库必须是同一个版本,如果使用了恢复目录,还需要注意
·创建RMAN 恢复目录的脚本版本必须等于或大于恢复目录所在数据库的版本
·创建RMAN 恢复目录的脚本版本必须等于或大于目标数据库的版本

基本运行方法
9i默认是nocatalog,不使用恢复目录,使用命令rman即可进入RMAN 的命令行界面,如

[oracle@db oracle]$ $ORACLE_HOME/bin/rman
Recovery Manager: Release 9.2.0.4.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
RMAN>

连接目标数据库,可以用如下类似命令
RMAN>Connect target /

如何运行RMAN 命令
1、单个执行

RMAN>backup database;

2、运行一个命令块
RMAN> run {
2> copy datafile 10 to
3> '/oracle/prod/backup/prod_10.dbf';
4> }

3、运行脚本
$ rman TARGET / @backup_db.rman
RMAN> @backup_db.rman
RMAN> RUN { @backup_db.rman }

运行存储在恢复目录中的脚本
RMAN> RUN { EXECUTE SCRIPT backup_whole_db };

4、SHELL脚本,如果在cron中执行,注意设置正确的环境变量在脚本中
[oracle@db worksh]$ more rmanback.sh
#!/bin/ksh
#set env
export ORACLE_HOME=/opt/oracle/product/9.2
export ORACLE_SID=test
export NLS_LANG="AMERICAN_AMERICA.zhs16gbk"
export PATH=$PATH:$ORACLE_HOME/bin
echo "-----------------------------start-----------------------------";date
#backup start
$ORACLE_HOME/bin/rman < connect target
delete noprompt obsolete;
backup database format '/netappdata1/rmanback/tbdb2/%U_%s.bak' filesperset = 2;
exit;
EOF
echo "------------------------------end------------------------------";date

三、RMAN的自动配置

Oracle 9i可以配置一些参数如通道,备份保持策略等信息,通过一次设定可以多次使用,而且,设置中的信息不影响脚本中的重新设置。RMAN 默认的配置参数,通过show all 就可以看出来。

RMAN> show all;
RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
CONFIGURE BACKUP OPTIMIZATION OFF;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR TYPE DISK TO '%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE MAXSETSIZE TO UNLIMITED;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/9.0.2/dbs/snapcf_U02.f';

1 备份策略保持
分为两个保持策略,一个是时间策略,决定至少有一个备份能恢复到指定的日期,一个
冗余策略,规定至少有几个冗余的备份。

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 5 DAYS;
CONFIGURE RETENTION POLICY TO REDUNDANCY 5;
CONFIGURE RETENTION POLICY TO NONE;

在第一个策略中,是保证至少有一个备份能恢复到Sysdate-5 的时间点上,之前的备份将标记为Obsolete。第二个策略中说明至少需要有三个冗余的备份存在,如果多余三个备份以上的备份将标记为冗余。NONE 可以把使备份保持策略失效,Clear 将恢复默认的保持策略。

2通道配置与自动通道分配
通过CONFIGURE 配置自动分配的通道,而且可以通过数字来指定不同的通道分配情况。

CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/U01/ORACLE/BACKUP/%U'
CONFIGURE CHANNEL n DEVICE TYPE DISK FORMAT '/U01/ORACLE/BACKUP/%U'

当然,也可以在运行块中,手工指定通道分配,这样的话,将取代默认的通道分配。

Run{
allocate channel cq type disk format='/u01/backup/%u.bak'
......
}

以下是通道的一些特性
读的速率限制
Allocate channel ...... rate = integer
最大备份片大小限制
Allocate channel ...... maxpiecesize = integer
最大并发打开文件数(默认16)
Allocate channel ...... maxopenfile = integer

3控制文件自动备份
从9i开始,可以配置控制文件的自动备份,但是这个设置在备用数据库上是失效的。通过如下的命令,可以设置控制文件的自动备份
CONFIGURE CONTROLFILE AUTOBACKUP ON;

对于没有恢复目录的备份策略来说,这个特性是特别有效的,控制文件的自动备份发生在任何backup或者copy命令之后,或者任何数据库的结构改变之后。
可以用如下的配置指定控制文件的备份路径与格式
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR TYPE DISK TO '%F';

在备份期间,将产生一个控制文件的快照,用于控制文件的读一致性,这个快照可以通过如下配置
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/9.0.2/dbs/snapcf_U02.f';

4设置并行备份
RMAN支持并行备份与恢复,也可以在配置中指定默认的并行程度。如
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
指定在以后的备份与恢复中,将采用并行度为4,同时开启4个通道进行备份与恢复,当然也可以在run的运行块中指定通道来决定备份与恢复的并行程度。
并行的数目决定了开启通道的个数。如果指定了通道配置,将采用指定的通道,如果没有指定通道,将采用默认通道配置。

5 配置默认IO 设备类型
IO 设备类型可以是磁盘或者磁带,在默认的情况下是磁盘,可以通过如下的命令进行重新配置。

CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE DEFAULT DEVICE TYPE TO SBT;

注意,如果换了一种IO设备,相应的配置也需要做修改,如
RMAN> CONFIGURE DEVICE TYPE SBT PARALLELISM 2;

6配置多个备份的拷贝数目
如果觉得单个备份集不放心,可以设置多个备份集的拷贝,如

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
如果指定了多个拷贝,可以在通道配置或者备份配置中指定多个拷贝地点
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/backup/%U', '/u02/backup/%U';
RMAN>backup datafile n format '/u01/backup/%U', '/u02/backup/%U';
3.7备份优化
可以在配置中设置备份的优化,如
CONFIGURE BACKUP OPTIMIZATION ON;
如果优化设置打开,将对备份的数据文件、归档日志或备份集运行一个优化算法。
同样的DBID,检查点SCN,ResetlogSCN 与时间
正常离线,只读或正常关闭的文件
归档日志
同样的线程,序列号RESETLOG SCN 与时间
3.8备份文件的格式
备份文件可以自定义各种各样的格式,如下
%c 备份片的拷贝数
%d 数据库名称
%D 位于该月中的第几天 (DD)
%M 位于该年中的第几月 (MM)
%F 一个基于DBID 唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,
其中IIIIIIIIII 为该数据库的DBID,YYYYMMDD 为日期,QQ 是一个1-256 的序

%n 数据库名称,向右填补到最大八个字符
%u 一个八个字符的名称代表备份集与创建时间
%p 该备份集中的备份片号,从1 开始到创建的文件数
%U 一个唯一的文件名,代表%u_%p_%c
%s 备份集的号
%t 备份集时间戳
%T 年月日格式(YYYYMMDD)
四、用RMAN备份
RMAN可以用来备份主或备用数据库,如表空间、数据文件、归档日志、控制文件、服务
器文件与备份集。
9
4.1文件拷贝
原始文件的拷贝,有点类似于OS热备份,可以拷贝整个数据文件到另外一个地点,但
是结果仅仅只能写入到硬盘,而且单独的文件是分开的。
一个文件拷贝的例子
run {
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
copy # first
datafile 1 to '$HOME/prd1.dbf',
datafile 2 to '$HOME/prd2.dbf';
copy # second
datafile 3 to '$HOME/prd3.dbf';
sql 'alter system archive log current';
}
4.2备份与备份集
RMAN 的常规备份是产生只有RMAN 才能识别的备份集,所以,除了copy 命令之外
的其他备份,都是RMAN 产生的备份集以及对应的备份片。
一个备份数据库的例子,开启两个通道,将数据库备份到磁带
run {
allocate channel t1 type 'SBT_TAPE';
allocate channel t2 type 'SBT_TAPE';
backup
filesperset 2
format 'df_%t_%s_%p'
database;
}
RMAN 也可以实现多个镜相的备份
Run{
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
SET BACKUP COPIES 3;
BACKUP DATAFILE 7 FORMAT '/tmp/%U','?/oradata/%U','?/%U';
};
以下是常见的备份归档的例子
RMAN>sql 'alter system archive log current';
RMAN>backup archivelog all delete input;
RMAN> backup archivelog from time '01-jan-00' until time '30-jun-00';
RMAN> backup archivelog like 'oracle/arc/dest/log%';
10
RMAN> backup archivelog all;
RMAN> backup archivelog from logseq 20 until logseq 50 thread 1;
RMAN> backup archivelog from scn 1 until scn 9999;
在RAC环境中,因为数据库是共享的,所以可以连接到一个实例就可以备份整个数据库,
但是,因为归档日志可以备份在本地,所以RAC归档日志的备份就变的复杂一些,我们可
以通过连接到两个实例的通道来备份两个实例的归档日志。
run{
ALLOCATE CHANNEL node_c1 DEVICE TYPE DISK CONNECT 'sys/pass@dbin1';
ALLOCATE CHANNEL node_c2 DEVICE TYPE DISK CONNECT 'sys/pass@dbin2';
sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';
backup archivelog all delete input format '/u01/dbbak/%U_%s.bak' filesperset = 5;
}
4.3 常见备份参数
1、Keep参数可以长期的保持特殊的备份或者拷贝,让它们不受默认备份保持策略的影响,

RMAN> BACKUP DATABASE KEEP UNTIL TIME
2> "to_date('31-MAR-2002','DD_MM_YYYY)" nologs;
RMAN> BACKUP TABLESPACE SAMPLE KEEP FOREVER NOLOGS;
其中NOLOGS 表示可以不保留该备份以来的归档日志,默认是LOGS,表示保留该备份以
来的参数,如果想让该备份永久有效,可以使用FOREVER参数。
2、Tag参数指明了备份集的标志,可以达到30 个字符长度,如

RMAN> BACKUP DEVICE TYPE DISK DATAFILE 1 TAG
2> "wkly_bkup";

在Oracle 92 版本以后,RMAN 自动提供一个TAG,格式为TAGYYYYMMDDTHHMMSS
如TAG20020208T133437,通过备份标志TAG,也可以很方便的从备份集进行恢复,如
Restore database from tag='tag name'
4.4增量备份
在说明增量备份之前,首先要理解差异增量与累计增量备份,以及增量备份的备份与恢复原理。
差异增量,是默认的增量备份方式。

累计增量备份
可以看到,差异增量是备份上级或同级备份以来变化的块,累计增量是备份上级备份以来变化的块。累计增量增加了备份的时间,但是因为恢复的时候,需要从更少的备份集中恢复数据,所以,为了减少恢复的时候,累计增量备份将比差异增量备份更有效。
不管怎么样增量备份,在Oracle 版本9 中,还是需要比较数据库中全部的数据块,这个过程其实也是一个漫长的过程,而且由于增量备份形成多个不同的备份集,使得恢复变的更加不可靠而且速度慢,所以增量备份在版本9 中仍然是鸡肋,除非是很大型的数据仓库系统,没有必要选择增量备份。

Oracle 版本10在增量备份上做了很大的改进,可以使增量备份变成真正意义的增量,因为通过特有的增量日志,使得RMAN 没有必要去比较数据库的每一个数据块,当然,代价就是日志的IO 与磁盘空间付出,完全还是不适合OLTP系统。另外,版本10 通过备份的合并,使增量备份的结果可以合并在一起,而完全的减少了恢复时间。
增量备份都需要一个基础,比如0 级备份就是所有增量的基础备份,0级备份与全备份的不同就是0 级备份可以作为其它增量备份的基础备份而全备份是不可以的,是否选择增量备份作为你的备份策略,最终,需要你自己有一个清醒的认识。

以下是零级备份的例子
backup incremental level 0 database;
一级差异增量例子
backup incremental level 1 database;
一级累计增量例子
backup incremental level 1 cumulative database;
12
4.5备份检查
我们可以通过Validate命令来检查是否能备份,如数据文件是否存在,是否存在坏块不
能被备份,如:
BACKUP VALIDATE DATABASE;
BACKUP VALIDATE DATABASE ARCHIVELOG ALL;
4.6重新启动备份
对于异常结束了的备份,很多人可能不想再重新开始备份了吧,特别是备份到90%以
上,因为异常原因终止了该备份,那怎么办呢?RMAN 提供一个重新开始备份的方法,通
过简单的命令,你就可以只备份那不到10%的数据了。
RMAN> BACKUP NOT BACKED UP SINCE TIME 'SYSDATE-14'
2> DATABASE PLUS ARCHIVELOG;
4.7 RMAN 动态性能视图
以下是与RMAN 备份有关系的一些动态性能视图,信息是从控制文件中获取的。
V$ARCHIVED_LOG
V$BACKUP_CORRUPTION
V$COPY_CORRUPTION
V$BACKUP_DATAFILE
V$BACKUP_REDOLOG
V$BACKUP_SET
V$BACKUP_PIECE
V$BACKUP_DEVICE
V$CONTROLFILE_RECORD_SECTION
这里还有一个视图,可以大致的监控到RMAN备份进行的程度。如通过如下的SQL脚本,
将获得备份的进度。
SQL> SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
2 ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
3 FROM V$SESSION_LONGOPS
4 WHERE OPNAME LIKE 'RMAN%'
5 AND OPNAME NOT LIKE '%aggregate%'
6 AND TOTALWORK != 0
7 AND SOFAR <> TOTALWORK;
SID SERIAL# CONTEXT SOFAR TOTAL WORK %_COMPLETE
--- ------- ------- ------- --------- ----------
13 75 1 9470 15360 61.65
12 81 1 15871 28160 56.36
13
五、还原与恢复
5.1常规还原与恢复
RMAN 的整个恢复过程可以分为还原(restore)与恢复(recover),他们在含义上是有
很大差别的,一个是指物理意义的文件的还原与拷贝,一个是指数据库一致性的恢复,所以,
正确的理解这两个概念,有助于正确的恢复数据库。
对于RMAN 的备份,还原操作只能是在用RMAN 或RMAN 包来做了,对于恢复操作
则是很灵活的了,除了RMAN,也可以在SQLPLUS 中完成。还原与恢复一个数据库,可
以用如下两个简单的命令完成
RMAN>restore database;
RMAN>recover database;
恢复一个表空间,或者恢复一个数据文件,相对比较恢复数据库可能花费更少的时间。
RMAN> SQL "ALTER TABLESPACE tools OFFLINE IMMEDIATE";
RMAN> RESTORE TABLESPACE tools;
RMAN> RECOVER TABLESPACE tools;
RMAN> SQL "ALTER TABLESPACE tools ONLINE";
对于数据库与数据文件,可以从指定的tag恢复
RMAN>RESTORE DATAFILE 1 FROM TAG='tag name'
对于时间点恢复等不完全恢复,可能只有完全的还原数据库了。
RMAN> RUN {
2> ALLOCATE CHANNEL c1 TYPE DISK;
3> ALLOCATE CHANNEL c2 TYPE DISK;
4> SET UNTIL TIME = '2002-12-09:11:44:00';
5> RESTORE DATABASE;
6> RECOVER DATABASE;
7> ALTER DATABASE OPEN RESETLOGS; }

不完全恢复在RMAN 中还可以用基于日志的恢复

RMAN> RUN {
2> SET UNTIL SEQUENCE 120 THREAD 1;
3> ALTER DATABASE MOUNT;
4> RESTORE DATABASE;
5> RECOVER DATABASE; # recovers through log 119
6> ALTER DATABASE OPEN RESESTLOGS;
7> }

如果有可能,也可以恢复数据文件到一个新的位置
SET NEWNAME FOR datafile
'/u01/oradata/tools01.dbf' TO '/tmp/tools01.dbf';
RESTORE datafile '/u01/oradata/tools01.dbf';
SWITCH DATAFILE ALL;
除了恢复数据库与数据文件,我们也可以恢复控制文件,需要启动到nomount 下,用如下
的命令即可

Restore controlfile from 'file name'
Restore controlfile from autobackup
Restore controlfile from tag='......'
在正常情况下,不用恢复归档日志,恢复进程会自动寻找所需要的归档日志,当然我们也可
以指定恢复到哪里。
SET ARCHIVELOG DESTINATION TO '/u02/tmp_restore';
RESTORE ARCHIVELOG ALL;
如果使用的服务器参数文件(spfile),RMAN 可以备份该参数文件,如果发生文件损坏,可以用RMAN 恢复spfile 参数文件,在没有参数文件的情况下,用Rman 的临时参数文件启动数据库到Nomount 下,执行如下命令即可
Restore controlfile from autobackup
Restore controlfile from 'file name'
5.2特殊情况下的恢复在假定丢失了恢复目录与控制文件,只剩下备份集与备份片,这个时候,可能只能从文
件中恢复了。以下是调用dbms_backup_restore包,从文件中恢复的例子。

declare
devtype varchar2(100);
done boolean;
recid number;
stamp number;
fullname varchar2(80);
begin
devtype :=
dbms_backup_restore.deviceallocate('sbt_tape',params=>'ENV=(NSR_SERVER=backup_server)');
dbms_backup_restore.restoresetdata file;
dbms_backup_restore.restorecontrolfileto('first_control_file');
dbms_backup_restore.restorebackuppiece('backup_piece', done);
dbms_backup_restore.copycontrolfile ('first_control_file','second_control_file', recid, stamp,fullname);
-- repeat the above copycontrolfile for each control file
end;
/

5.3还原检查与恢复测试
与备份检查一样,还原操作也可以检查是否能正常restore或者是否该备份集是否有效。如:
RMAN> RESTORE DATABASE VALIDATE;
RMAN> VALIDATE BACKUPSET 218;

Recover 还可以进行测试,检测恢复的错误,错误信息记载在alert文件中,通过测试,我们可以知道该恢复操作是否能正常完成。

SQL>RECOVER TABLESPACE sales TEST;
SQL>RECOVER DATABASE UNTIL CANCEL TEST
5.4块级别的恢复
块恢复Block Media Recovery (BMR),块是恢复的最小单元,通过块可以减少恢复时间,而且数据文件可以在线。恢复块的时候,必须指定具体的块号,如:
BLOCKRECOVER datafile 6 BLOCK 3;
要恢复的坏块信息可以从报警与跟踪文件,表与索引的分析,DBV 工具或第三方媒体管理工具以及具体的查询语句中获得。产生块损坏的原因一般是间断或随机的IO 错误或者是内存的块错误。
块的错误信息保存在V$DATABASE_BLOCK_CORRUPTION,用如下命令恢复该视图中列出的坏块

RMAN> BLOCKRECOVER CORRUPTION LIST 2> RESTORE UNTIL TIME 'sysdate - 10';

备份的坏块信息保存在
V$BACKUP_CORRUPTION
V$COPY_CORRUPTION
可以用如下的命令来恢复坏块。

BLOCKRECOVER datafile 2 BLOCK 12, 13 datafile 7 BLOCK 5, 98, 99 datafile 9 BLOCK 19;
BLOCKRECOVER TABLESPACE SYSTEM DBA 4194404, 4194405 FROM TAG "weekly_backup";
BLOCKRECOVER TABLESPACE SYSTEM DBA 4194404, 4194405 RESTORE UNTIL TIME 'SYSDATE-2';

5.5数据库复制
可以用RMAN 来进行数据库的复制与克隆,RMAN提供一个专门的命令来完成这个操作。

CONNECT TARGET
CONNECT AUXILIARY SYS/aux_pwd@newdb
DUPLICATE TARGET DATABASE TO ndbnewh
LOGFILE
'?/dbs/log_1.f' SIZE 100M,
'?/dbs/log_2.f' SIZE 100M
SKIP READONLY
NOFILENAMECHECK;

在以上的命令执行之前,注意如下几点
1、备份主库上的所有数据文件,控制文件以及备份时与备份后产生的归档日志,并把该备
份拷贝到需要复制的机器同样的目录下(如果不是同样的目录,在linux/unix 环境下可以考
虑建立一个链接来完成)。
2、拷贝主数据库的初始化参数文件到复制的机器上,并做相应的修改,如修改数据库名称与实例名称
3、在要复制的机器上创建新的密码文件,并启动复制的数据库到nomount下。
4、配置主数据库到复制数据库的网络连接或者复制数据库到主数据库的连接。
5、在主数据库或者复制的数据库上运行RMAN,分别连接主数据库与复制数据库实例。
6、运行复制命令,命令将还原所有数据文件,重新创建控制文件,并利用新的参数文件启动恢复数据库到一致状态,最后用resetlog方式打开数据库,创建指定的redolog。
复制命令也可以从磁带上的备份进行复制,并改变数据库名称,也可以改变数据库文件的新的路径以及恢复到以前的时间点,跳过不需要复制的表空间等,如一个比较复杂的复制命令:
RUN
{
ALLOCATE AUXILIARY CHANNEL newdb1 DEVICE TYPE sbt;
DUPLICATE TARGET DATABASE TO newdb
DB_FILE_NAME_CONVERT=('/h1/oracle/dbs/trgt/','/h2/oracle/oradata/newdb/')
UNTIL TIME 'SYSDATE-1' # specifies incomplete recovery
SKIP TABLESPACE cmwlite, drsys, example # skip desired tablespaces
PFILE = ?/dbs/initNEWDB.ora
lOGFILE
GROUP 1 ('?/oradata/newdb/redo01_1.f',
'?/oradata/newdb/redo01_2.f') SIZE 200K,
GROUP 2 ('?/oradata/newdb/redo02_1.f',
'?/oradata/newdb/redo02_2.f') SIZE 200K
GROUP 3 ('?/oradata/newdb/redo03_1.f',
'?/oradata/newdb/redo03_2.f') SIZE 200K REUSE;
}

5.6利用RMAN创建备用数据库
利用RMAN 创建备用数据库可以用两种办法,一种是常规的Restore 命令,利用从主
数据库拷贝过去的备用控制文件,把备用数据库启动到备用mount 下,这个时候的备用数
据库是没有数据文件的。然后在备用端,启动RMAN命令,连接该数据库(与主数据库DBID
一样),把从主数据库拷贝过来的RMAN 备份还原出来。最后就与其它方法一样了,进入备
用的管理恢复模式。
另外一个办法就是复制命令了,如
DUPLICATE TARGET DATABASE FOR STANDBY NOFILENAMECHECK;
以下详细的介绍了这一个过程。
1、创建备用参数文件与密码文件,启动备用数据库到nomount下
2、备份主数据库与备用控制文件以及所有归档
RMAN> Backup Database;
RMAN> Backup current controlfile for standby;
RMAN> sql "Alter System Archive Log Current";
RMAN> Backup filesperset 10 ArchiveLog all delete input;
3、拷贝所有的备份到备用数据库相同路径下
4、配置主数据库到备用数据库的连接
5、启动RMAN
rman target / auxiliary sys/change_on_install@STANDBY
6,开始创建备用数据库
RMAN> duplicate target database for standby dorecover nofilenamecheck;
整个过程包括了备用控制文件的创建,启动到Mount 下,参数文件中指定的路径转换与数
据文件的还原,归档日志的还原等。
7、最后恢复日志并启动到管理恢复模式下。

SQL> recover standby database;
SQL> alter database recover managed standby database disconnect;

六、RMAN的管理
6.1Report命令
Report 命令可以检测那些文件需要备份,那些备份能被删除以及那些文件能不能获得的信
息,如
报告数据库的所有能备份数据文件对象
Report schema
或者
RMAN> REPORT SCHEMA AT TIME 'SYSDATE-14';
RMAN> REPORT SCHEMA AT SCN 1000;
RMAN> REPORT SCHEMA AT SEQUENCE 100 THREAD 1;
报告需要备份的数据文件
Report need backup [ redundancy | days | incremental n];
报告过期了的数据文件或者不可用的备份与拷贝
Report obsolete [orphan]
报告不能获得或者不能到达的数据文件信息
Report unrecoverable [database]
6.2 List命令
List命令一般用来查看备份与拷贝信息,如
查看备份信息
List backup
查看备份汇总信息
List backup summary
查看文件拷贝的信息
List copy
查看具体的备份信息
List backup of datafile 'file name'
list incarnation of database;
18
6.3 Crosscheck命令
检查磁盘或磁带上的备份或拷贝是否正确,并更新备份或者拷贝的状态
如果不正确,将标记为expired(过期)
Crosscheck backup;
Crosscheck archivelog all;
Delete [noprompt] expired backup命令删除过期备份
也可以用List来查看相应的报告
LIST EXPIRED BACKUP;
LIST EXPIRED BACKUP SUMMARY;
6.4 Delete 命令
Delete命令可以用来删除指定的备份或者用来删除废弃或者是过期的备份集
如删除指定的备份集与备份片

RMAN> DELETE BACKUPPIECE 101;
RMAN> DELETE CONTROLFILECOPY '/tmp/control01.ctl';
RMAN> DELETE BACKUP OF TABLESPACE users DEVICE TYPE sbt;

删除过期或者废弃了的备份
RMAN> DELETE EXPIRED BACKUP;
RMAN> DELETE NOPROMPT OBSOLETE;
RMAN> DELETE OBSOLETE REDUNDANCY = 3;
RMAN> DELETE OBSOLETE RECOVERY WINDOW OF 7 DAYS;

删除指定的备份归档
RMAN> DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE = 300;
七、恢复目录
Oracle版本9因为控制文件的自动备份,可以很大程度成不需要使用恢复目录,但是使用恢复目录的也有如下好处
·有些命令只被恢复目录支持(对于9i 来说,也就是专门操作恢复目录的语句而已)
·能保留更多的历史备份信息
·一个恢复目录能管理与备份多个目标数据库
·如果在9i以前,丢失控制文件而没有恢复目录将是难以恢复的
·如果没有恢复目录,而且发生了结构上的改变,时间点的恢复需要小心操作
·能存储备份与恢复的脚本
可以看到,主要是可以保留更多的备份信息与方便的管理多个目标数据库,这个在众多目标数据库的情况下,是可以考虑的。

7.1创建恢复目录
注意,恢复目录不要与目标数据库在同一台机器上,而且大小要求比较小。

SQL> create user RMAN identified by RMAN
2 temporary tablespace TEMP
3 default tablespace RCVCAT
4 quota unlimited on RCVCAT;
SQL> grant recovery_catalog_owner to RMAN;
RMAN> create catalog
RMAN> register database;

恢复目录可以采用如下命令升级与删除

RMAN> UPGRADE CATALOG;
RMAN> DROP CATALOG;

7.2恢复目录管理
恢复目录支持如下的命令

{CREATE|UPGRADE|DROP} CATALOG
{CREATE|DELETE|REPLACE|PRINT} SCRIPT
LIST INCARNATION
REGISTER DATABASE
REPORT SCHEMA AT TIME
RESET DATABASE
RESYNC CATALOG

1、Resync命令
Resync可以同步数据库与恢复目录之间的信息,在实际情况下,rman一般可以自动同步。
在如下情况下需要同步
·数据库物理结构的改变
·数据文件增加或者是改变大小
·表空间删除
·回滚段的创建与删除
·每产生10个归档日志
2、Reset 命令
目标数据库resetlogs 之后,需要重新设置恢复目录。Reset命令就用来重新设置恢复目录。
7.3恢复目录视图
恢复目录本身有一组视图,用于存放目标数据库与备份信息,如
恢复目录的相关视图
RC_DATABASE
RC_DATAFILE
RC_STORED_SCRIPT
RC_STORED_SCRIPT_LINE
RC_TABLESPACE
可以通过如下命令来查看相关信息
select * from rc_database;
7.4存储脚本
存储脚本
RMAN> creata script level0backp{
backup
incremental level 0
format '/u01/db01/backup/%U'
filesperset 5
database plus archivelog delete input;
sql 'alter database archive log current';
}

执行脚本
RMAN> run {execute script Level0backup;}
更新脚本
RMAN> replace script level0backup{
......
}
删除脚本
RMAN> delete script Level0backup;
查看脚本
RMAN> print script level0backup;

一个实用脚本,包括备份RAC数据库与归档日志的shell脚本

[oracle@db worksh]$ more rmanback.sh
#!/bin/sh
#set env
export ORACLE_HOME=/opt/oracle/product/9.2
export ORACLE_SID=db2in1
export NLS_LANG="AMERICAN_AMERICA.zhs16gbk"
export PATH=$PATH:$ORACLE_HOME/bin:/sbin:/usr/sbin
echo "-----------------------------start-----------------------------";date
#backup start
$ORACLE_HOME/bin/rman < connect target
delete noprompt obsolete;
backup database include current controlfile format '/rmanback/db2/%U_%s.bak' filesperset = 2;
run{
ALLOCATE CHANNEL node_c1 DEVICE TYPE DISK CONNECT 'sys/pass@db1in1';
ALLOCATE CHANNEL node_c2 DEVICE TYPE DISK CONNECT 'sys/pass@db2in2';
sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';
backup archivelog all delete input format '/ rmanback/db2/%U_%s.bak' filesperset = 5;
}
list backup;
exit;
EOF
echo "------------------------------end------------------------------";date


Posted by eygle at 5:23 PM | Comments (3)

May 15, 2008

胚胎停止发育的可能原因

出处:http://www.eygle.com/digest

昨天才知道,一个婴儿在出生之前也可能经历诸多挑战,每个Baby都是英雄。

在孕妇怀孕期间,出现 "胎停育" 也就是 胚胎停止发育 的概率是很高的。
根据统计,有15%至20%的妊娠以流产告终,还有30%至40%的隐型流产尚未被发现。

以下是关于胎停育的一点介绍
胎停育就是胎儿停止了发育。通常妇女怀孕后40到50天左右,胎儿便有了胎芽和胎心,如果这时通过B超检查没有找到胎芽和胎心,就意味着胎儿停止了发育,在怀孕早期就叫"胎停育"。

胎停育原因:染色体、内分泌、感染、环境污染皆成祸端

造成胎儿停止发育的原因很多,并非每例病人都能找出确切的原因。但是有些原因是业内专家一致公认的。

  由于染色体的数目或结构异常所致的胚胎发育不良,是流产最常见的原因,在自然流产中,遗传因素可占50%至60%。这也是一个自然淘汰的过程。导致胎儿染色体异常的原因很多,比如妈妈卵子异常,爸爸精子畸形,有毒化学物质的影响,放射线、高温等都会使胚胎染色体发生异常。

  内分泌失调也是个重要原因。在内分泌门诊,经常会有"黄体功能不足"的患者,黄体功能不足可引起分泌期子宫内膜发育不良而致孕卵不易着床,或者卵虽然着床却早期流产。

  孕妇感染也是导致胎停育的一个重要原因。有些比较小的病毒,比如风疹病毒、巨细胞等微小病毒,对母体不会产生什么影响,有的孕妇感染病毒后甚至没有任何症状,但对胎儿的影响可能是致命的。

  环境污染对孕妇的影响也比较大,虽然目前还没有科学的研究数据,不过医生还是建议孕妇最好注意远离各种辐射,比如看电视最好距离两米以外等

祝愿每个准妈妈都能安康!

Posted by eygle at 9:46 AM | Comments (2)

May 14, 2008

ITPUB讲师团成员简介 - 曾经的现在的

出处:http://www.eygle.com/digest

Tigerfish
      ITPUB 坛主,ITPUB创始人之一,曾任Oracle数据库管理、Cisco认证、Unix、DB2等多个版块版主。来自华南地区某著名学府,有丰富的IT行业 经验,资深IT培训专家,曾为华南地区多家著名培训中心和大型企业主讲Oracle、Cisco、DB2、UNIX等IT课程。
近3年曾主讲的主要企业培训清单:
广东省农业银行(UNIX,前后3次)
佛山鹰牌陶瓷(Oracle DBA,前后2次)
广州市公安局(Oracle DBA、UNIX)
汕头市公安局(Oracle DBA)
深圳中银软件(Oracle DBA)
华南计算机公司(Oracle DBA)
深圳新科安达(Oracle DBA)
番禺国土局(Oracle DBA)
佛山邮政(Cisco)
广州邮政(Cisco)
佛山电力(Oracle DBA)
大亚湾核电厂(Oracle DBA,前后3次)
深圳赛意法半导体(Oracle DBA)
金蝶软件(DB2 UDB)
南方航空公司(Oracle DBA)
广东电信(Oracle DBA,前后6次)
深圳建设银行(UNIX)
IBM深圳(DB2 UDB)
深圳工商银行(Oracle DBA)
广州海关(Oracle DBA)
深圳润讯(Oracle Performance)
GaryWei
      某著名软件企业技术总监,有丰富开发经验与培训经验。擅长Oracle、Sybase数据库产品与开发工具。
近2年主要客户有:
广东电信(Sybase ASE 11.9)
深圳电信(Oracle 8i DBA)
广西电信(Oracle 8 DBA)
广东省农业银行(Sybase System 11)
汕头公安局(Oracle Developer & PowerBuilder)
广州番禺地税局(Windows NT &  PowerBuilder)
深圳中国银行软件开发中心(Oracle PL/SQL PRO*C/C++)
中国南方航空公司(Oracle PL/SQL WebDB)
深圳岭奥核电厂(Oracle Developer & Designer & Portal) 
沈阳和光集团(Oracle PL/SQL JDeveloper WebDB)
佛山中国银行(Oracle 8 DBA)
海南中国电信(Oracle Developer)
biti_rainy
     曾任itpub开发版版主,现任管理版版主,在各大技术论 坛上比较活跃,获得了大家的认可.擅长sql优化和数据库优化技术,有丰富的实践经验。曾在多个项目中使用  pb + oracle,曾经在中国电信使 用pro*c做计费的数据库后台程序开发,同时负责项目的sql优化工作.在一大型系统集成公司担任数据库负责人,目前是香港一家跨国公司珠海研发中心的 技术负责人,公司目前主要产品就是sql与数据库优化工具,产品主要销往欧洲和北美。
w39
ITPUB ERP论坛版主,毕业于上海复旦大学,在ERP系统开发/实施/技术支持/售前方面有6年的经验。其中一半以上时间在企业内部做实施工作,对企业选型和实施有着丰富的经验。在工作期间组织过内部和外部的多种培训。
工作经历简介
96 年开始接触ERP系统,从事QAD的MRPII系统二次开发工作。后担任某国内小型MRP软件公司的项目经理,负责公司软件从售前、需求分析到软件交付、 验收全过程的工作。99年在广东一生产企业负责BAAN ERP系统的内部技术工作。目前一家港资软件公司担任售前支持顾问。
汉讯
广东汉讯信息工程有限公司创立于1999年10月,是一家与国际著名公司 ----Oracle公司紧密合作的高科技公司。公司的实施顾问在长期的ERP系统实施过程中,积累了丰富的项目管理和实施经验,有一整套规范、科学兼具 灵活性的实施策略,确保项目按照计划顺利完成,并提交给用户详尽的文档资料,实现完整的技术转移。汉讯公司在ITPUB此次培训的过程中,派出了五名顾问 参与ERP课程的讲授.
黄水花、罗宏坤:财务模块
张晓鹤:分销模块
汤新蔚:制造模块
陈杰:系统安装、调试、二次开发
richto
Richto毕业于美国市立纽约大学,获得电脑学硕士学位,现任LECCO Technology Ltd (灵高科研有限公司,http://www.leccotech.com) 技 术总监和副总裁,是世界一流的SQL优化技术专家。多年从事数据库优化技术的研究,其研究成果之一"LECCO SQL Expert " 曾获多项技术 及国际奖项,畅销欧美。由于SQL Expert的突破性技术,Sybase公司破例OEM该产品,从Sybase 12.5开始包含在Sybase 数 据库中,作为标准的SQL优化工具。richto参与ITPUB的技术讨论有相当长的时间,一贯支持和关注ITPUB的发展,在SQL优化技术课程 中,richto将以特邀嘉宾的身份作专题演讲。http://www.ciw.com.cn/media/ciw/1095/d1001.htm
easyfree
ITPUB论坛的超级版主和OCP板块版主, Oracle 8i OCP, 毕业于北京某著名高校, 有10年以上的数据库开发和项目管理经验, 曾在北京和深圳的多家公司中担任数据库开发,管理和项目管理工作, 目前在一家港资软件公司担任技术主管。
eygle
    曾任ITPUB MS版版主,现任管理版版主。曾任职于某国家大型企 业,服务于烟草行业,开发过基于Oracle数据库的大型ERP系统,属国家信息产业部重点工程。同时负责Oracle数据库管理及优化,并为多家烟草企 业提供Oracle数据库管理、优化及技术支持。目前任职于北京某电信增值业务系统提供商企业,负责数据库业务。管理全国30多个数据库平台。 实践经验 丰富,长于数据库诊断、优化与SQL调整。
lunar2000
   个人经历丰富,历经网站设置、java开发、系统管理、数据库管 理。目前服务于国内某大型智能网络提供商企业,高级专家组成员。客户遍及国内外,曾远赴泰国为泰国电信提供OPS数据库备份恢复及优化等技术支持。曾于多 家Oracle培训机构进行授课,深获信任和好评。长于备份恢复及HA(OPS/RAC/DATAGUARD/Standby)相关问题。
coolyl
现任管理版版主,目前服务于国内某大型软件企业做oracle数据库的技术支 持,客户遍及全国各个行业,尤其是电信,政府行业。擅长数据库的维护,对于数据库的安装,调整,备份方面有自己独到的经验。同时也给一些国内的大型企业如 广东省电信公司,广东省工商银行等等做过oracle的培训,有一定的培训经验。曾经做过很多大型项目的数据库维护和支持工作,对oracle的维护有相 当多的实际经验,善于现场解决问题。
万利荣
ORACLE 中国公司的授权兼职教师,主讲 SQL*PLUS、 DATABASE BACKUP & RECOVERY、PERFORMANCE TUNNING 及 DEVELOP 2000、ORACLE OAS、IAS  的全部课程。并负责OCP考试的培训及相关的技术指导。Oracle9i新版本的授课教师。 同时,参与多个实际ORACLE
系统的维护、备份与恢复方案的设计,系统运行速度与性能调优。  参与的ORACLE项目管理及系统技术支持有:

1.北京新东安计算机系统集成(ORACLE 软件与HP硬件相结合。作为集成商新加坡捷迅宇博公司的技术负责人)   
2.国家统计局人口普查系统的系统服务(主要是对现有ORACLE系统进行优化调整)   
3.脉搏网ORACLE系统的技术支持。   
4.中国移动多个地市的数据库技术支持。 
5.新华书店总部ORACLE系统的速度调优。

  主要培训的单位有:北京移动,北京电信,杭州移动,四川电信,四川联通,国家统计局,国家检疫局等
王钢
oracle公司培训部顾问、ocp培训课程讲师
个人经历丰富,早年曾工作 于西菱电子研究所,从事新疆伊宁市工商政管理系统软件开发工作,负责开发其中"公司管理系统"和"企业管理系统"部分。98年在北京清华同方任项目经理组 织开发全国公安管理系统;99年在华为公司参与电信系统的的开发在该项目中运用ORACLE对象关系型数据库、并参与实施ORACLE并行数据库安装调试 工作、以及企业版数据库的备份恢复优化工作。2000年,中软公司ORACLE数据库技术支持。在此阶段实施运用了ORACLE数据库高级复制技术、双机 热备技术、备用数据库技术。实施设计数据库性能、备份方案、数据库数据移植方案。2002年至今任职于某著名计算机服务中心兼oracle中国公司培训部 顾问并讲授ocp培训课程。
袁保华
个人经历丰富。早年工作于西菱电子研究所,从事新疆伊宁市工商政管理系统软件开发及 产品化工作, 其间负责对全新疆油田的石油用户进行oracle数据库培训,主讲oracle数据库管理员部分。98年,加盟北京某科技发展有限公司,负 责开发甘肃金昌矿区生产系统。后来任该公司oracle技术专员,专职负责有关oracle数据库的技术工作及oracle增值服务,负责安装各种平台上 的oracle, 升级移植oracle,作oracle售后技术支持,作oracle性能调优。并兼作oracle数据库培训及跟踪oracle数据库 技术动态。其间部分经历如下:
翻译oracle分区技术及oracle空间技术选件并编写oracle分区技术教材及oracle空间技术选件教材。
为空军气象中心和中科院遥感所培训oracle数据库核心,oracle分区技术, oracle空间技术。
为青岛钢铁厂计算中心进行数据库移植。
为大通公司进行数据库移植并对其数据库进行调优。
担任北方交大oracle联合大学培训教师,讲授oracle数据库管理员课程。
为海军水文气象中心进行oracle数据库培训及developer/2000开发工具的培训课程。
2000年至今,任职北京某著名计算机服务中心兼oracle公司培训部顾问并讲授ocp培训课程。
曾经培训的单位有:
河南移动
深圳移动
山西移动
湖南移动
贵州移动
新疆移动
沈阳联通
大连联通
惠普公司
诺基亚公司
motorola公司
北京中太数据
联想
江苏中行
浙江动植物检疫局
搜狐网
新华网
tom网
等。

Kamus
现任ITPUB Oracle数据库管理版主,PC-UNIX版版主。 
任职于某合资企业,服务于电信,保险,零售行业,开发基于Oracle数据库的大型呼叫 
中心系统。同时负责Oracle数据库管理及优化,管理公司基于Oracle平台的所有业务。 
并为多家企业提供Oracle数据库管理、优化及技术支持。实践经验丰富,长于数据库方 
案策划、问题诊断。 
通过Oracle DBA认证,获得OCP证书,具有Oracle培训经验。
gototop
www.ncn.cn站 长,历任HP中文论坛、Chinaunix.com、Oracle中文论坛等论坛版主,有培训经验,在各大网站、论坛发表Oracle相关文章几十万字。 个人经历丰富,涵盖UNIX、数据库、中间件、应用服务器、ERP和软件开发等众多IT领域。现为某知名电信公司资深 Oracle DBA,Team Leader;擅长Oracle数据库设计、诊断、恢复、性能优化,以及各种HA和容灾方案的设计与实施等;对 Oracle8i/9i的单双机环境均有丰富经验。
piner
现任CSDN论坛Oracle版块版主。有多年从事DBA开发与管理经验,有丰富的电力、政府行业经验,现在任职于一国家大型企业计算机公司任DBA,主要负责进出口平台数据管理。擅长于数据库备份与恢复,深入了解Oracle体系结构,对数据库优化也有深入的研究。
   曾经给广东省公安厅作过Oracle培训,给广东省检验检疫局作过性能优化。
   通过Oracle OCP认证,有丰富的实战经验与授课经验。
cisco800
曾任专业CISCO讲师,教学经验丰富,现供职于国家政府机构的IT 管 理中心,负责大型网络环境的设计维护,以及大型数据库的管理和应用。CCNP,通过了CCIE WRITTEN。正在准备 CCIE LAB 考试。对大 中型网络具有深入的了解,同时也是ORACLE OCP。 
飞翔鱼
现就职在国内最大的某中外合资通讯制造企业,参与多个网络系统方案设计,曾经参加上海等地区广域网、局域网络、VOIP、VPN等项目的施工,精通CISCO、IBM、华为等设备,具有丰富的现场工作经验。具有 MCSE 、CCNP 证书。
Mrzhou
ITPUB现任Oracle Applications版块斑竹,毕业于哈尔滨工业大学,管理工程硕士。五年以上
Oracle Applications 实施与维护相关经验,曾在制造业、金融业多家大型企业实施过Oracle
财务、分销、制造等多个模块,同时还具项目管理丰富经验。 
金融业方面,曾为国内两家大型银行、一家银行清算类企业实施Oracle 财务系统。
制造业方面,曾为多家上市大型企业服务,比较知名的包括:香港震雄集团、广东美的集团等。
ayoung
ITPUB现任Oracle Applications版块斑竹。具有深厚财 务专业背景,熟悉外资企业财务流程操作,对生产型企业的物流、销售、成本核算架构有自己见地,对出口型企业的"免抵退"税务处理的能准确理解并熟练掌握处 理,能提供处理外资生产型企业整套财务处理方案。
1995年10月至2000年7月任职德赛集团与日本合资企业惠信精密部件有限公司财务部,从事会计成本核算、安易财务软件和财务网络维护工作。
2000年7月至2002年10月,任职德赛电线有限公司财务部,负责财务部全面工作,于2001年至2002年并担任公司ERP推进项目经理,率领各部门ERP项目成员实施KINGDEE/K3采购、销售、仓存、总帐、应收应付等模块,并取得一定的成效。
2002 年10月至2003年5月,加入德赛集团公司ORACLE ERP项目小组,关键核心成员,与IBM咨询实施顾问一起实施集团总部、德赛电子和德赛精密的 GL/AP/AR/FA/CM等模块。6月至04年3月份,独立实施完成集团内部下属6家子公司的ORACLE ERP财务模块。
Ora-600
ITPUB现任OCP版块斑竹,毕业于西安电子科技大学,擅长 Oracle DBA技术、需求分析、系统分析与设计,数据建模,代码开发等,8i/9i OCP认证获得者,曾参与国土资源厅国土资源土地管理系统、土 地整理预算系统、北京公交一卡通项目客服系统和ED卡管理系统、武威地区电力局的商务办公自动化系统和电力MIS系统、西北电力设计院商务办公自动化系统 等项目,负责Oracle数据库后台设计、规划、管理、开发报表系统、培训等各项工作,曾在北京多家培训中心进行Oracle讲学,近期主要培训客户:
汕头电信
新乡电信
山西电信
江西工行
山西工行
湖北中行
北京农发行
国家海关总署
安徽国税
太原国税
甘孜州国税
烟台麦特集团
无锡联通
南天股份
国家经贸委
Optimizer
曾在加拿大从事多年Oracle数据库相关工作,资深OCP、金融行业专家。

   丰富的ORACLE 8i/9i 培训经验、教学经验和扎实的理论知识,培训了数以百计的Oracle OCP认证工程师和现场技术支持工程师。

   先后在北方交通大学ORACLE联合大学、北京银河网络教育中心、北大方正培训中心、神州数码培训中心、中科院软件所培训中心、长城计算机系统与软件系统公司培训中心和北京翼砺索思培训中心担任培训教师。 
Snonywolf
ITPUB现任Oracle电子文档版块版主,从事GIS软件开发,专于空间数据库技术。善于整理文档,精通chm文档制作。
lucky_lau
ITPUB现任OCP版块斑竹,多年Oracle数据库经验。早期多从 事工控方向的研发工作,中间曾转行做销售工作。现从事物流、付费、销售等软件数据库端开发,并负责客户数据库维护、内部员工ORACLE培训等工作。就职 于北京某公司。8i/9i OCP认证数据库管理员。
d.c.b.a
现任ITPUB开发版版主,曾服务于电力和通信领域,做过两年多的程序员, 用pb和d2k在Oracle上进行开发,于2001年5月通过Oracle 8i OCP的认证和Oracle Developer 6i认证,拥有 MCDBA证书,通信电领域主要做数据仓库项目,知识面广阔,开发经验丰富,做过1年多的IT培训讲师,现在上海一外企做Oracle DBA,曾为以下 单位讲课与服务:

南京华飞彩色显示器系统有限公司
南京军区总院
中国工商银行苏州分行
上海优利投资咨询有限公司
福建省烟草局

做了一个Free的软件叫AnySQL,欢迎大家免费使用!
http://www.anysql.net 提供无偿下载!
watch
王川 先生,美国南加州大学MBA,中国咨询管理协会会员,SAP专业高级顾 问。5年多SAP实施经验,负责和参与实施包括韩国三星集团、香港华润集团等在内的数十家ERP系统,精通SAP SD/MM模块和BW模块,对PP模块 也充分了解。曾供职于包括三星集团、金蝶软件和金海马集团在内的多家跨国公司和国内知名企业,并担任重要职务。现为咨询管理公司项目经理兼高级顾 问,ITPUB SAP论坛版主。在国内已经成功举办数十场SAP培训,包括面向专业咨询管理顾问的培训和企业方高级管理人员的培训,以思路清晰、案例丰 富著称。 
my_sap2002
ITPUB SAP版块创始人之一,现任SAP版斑竹,曾在德国SAP公司实地进修一年,资深项目经理,参与国内外多个BW项目,具有丰富的实践经验
xzh2000
曾任职于广州大型港资企业,开发过基于oracle数据库的大型erp系 统。在数据库建模、备份与恢复、系统调优、sql优化、数据迁移、pl/sql开发、体系结构等方面有丰富的经验;目前任职于广州某网络增值服务运营商, 负责数据库的故障诊断处理、异构数据迁移、新业务实现规划、系统调优与sql优化等职责。

培训讲师,培训经验丰富。曾经的培训客户有:中国石化信息中心、航天三院信息中心、鄂尔多斯羊绒集团信息中心、河北峰峰矿务局信息中心、太原铁路分局信息中心、广州日立电梯信息中心等。

讲授过itpub高级性能调整课程
曾任itpub ms sqlserver版版主,现任itpub oracle开发版版主
jxufe_legendxj
曾就职中国农业银行广东分行,联想集成,中联,长天等公司,先后担任程序员,项目经理,主机工程师等职位
目前在上海某科技公司任技术总监.
主要技术方向:
RS/6000,AS/400,DB2,INFORMIX,SYBASE,HDS ,EMC-CX,CICS等产品的安装管理调优维修及相关的应用开发支持
meteor78
毕业于西安电子科技大学,现任CHINAUNIX solaris版版主。 
任 职于某sun VPSP,服务于电信,石油,教育,从事与sun产品及软件的系统集成工作,多年工作经验,熟悉sun solaris系统及sun硬件安 装及维护,sun cluster调试,多次为知名外企做服务外包和电话支持。曾多次为某培训机构兼职培训sun solaris认证培训。实践经验丰 富,擅长系统调优、问题诊断。 通过sun scsa认证,具有丰富solaris培训经验。
orian
曾任职于IBM,多年从事UNIX系统管理\维护,有近10年的行业经验
擅长RS/6000,pSeries,aix,ess等各种型号机器的故障诊断,性能优化
对于高可靠建设、容灾,存储相关项目,outsourcing系统维护管理等,从方案设计到实施都有丰富的经验
Puber
某大型零售企业Oracle DBA,持有OCP,有丰富的Oracle数据库产品的使用,部署经验和乐于交流培训的热情.

现负责公司开发/业务测试/性能测试/产品等多个环境的N-Tier应用的设计,创建,性能优化.同时为开发人员提供Oracle培训,技术支持.

曾服务于国内某电信行业系统集成公司.参与了中国联通多个省市综合营帐系统的建设.期间: 
一年的PowerBuilder & PRO*C & PL/SQL开发经验.
两年的几十个地市Oracle数据迁移,系统割接及系统日常运维经验.同时参与过多次Oracle性能优化和故障解决.

darkbug
毕业于北京航空航天大学
现任职于某IBM SP,主要服务于政 府、保险、工商企业、教育等行业。主要从事IBM相关产品的技术咨询、售前技术支持、项目实施和运行维护。多年IBM产品工作经验,熟悉IBM P系列主 机的硬件,AIX操作系统,HACMP高可用集群,磁盘阵列,LTO磁带库,Tivoli系统管理软件,DB2数据库。
一直为合作伙伴提供服务外包、现场支持和技术支持。实践经验丰富,擅长系统设计、问题诊断。 通过IBM CATE认证,具有丰富IBM相关培训经验。
vvyjp
ITPUB现任CRM版块和HR版块斑竹。
  具有深厚财务和制造专业背景,熟悉中外合资企业财务流程操作,对快速消费品行业的物流、销售、成本核算架构有自己的认识,能提供处理集团企业整套财务处理和制造流程实施方案。 
1996年06月至1996年10月:任职维维集团第二生产基地财务,从事会计成本核算工作。 
1996年10月至1997年05月:任职维维集团南宁销售公司财务,负责财务全面工作。
1997年05月至1998年04月:任职维维集团总部财务部,总账会计,电算化会计方面工作,并负责财务网络维护工作,兼任集团电脑组组长,负责集团电脑方面全面工作。
1998年04月至1999年05月:任职维维集团总部销售财务    ,负责集团销售财务总账,往来及报表的合并等工作,兼任集团电脑组组长,负责集团电脑方面全面工作。完成财务软件(国内网络版财务)全面集成。
1999年05月至2002年02月:任职维维集团总部销售储运    ,负责储运部全面财务工作,兼任集团电脑组组长,负责集团电脑方面全面工作。通过和招商迪辰合作,完成了物流系统的信息化建设。
2002 年02月至2004年03月:任职维维集团公司总部信息中心,ORACLE ERP项目组的软件组 组长,带领软件组成员,与IBM咨询实施顾问一起实施 集团总部、乳业公司的GL/AP/AR/FA/CM等模块。其后独立实施了牛奶公司、成都销售公司、上海乳业等多家分子公司的GL/AP/AR/FA /CM等模块作。
2004年03月至2004年09月:任职南京某咨询公司顾问,天津某外企制造相关模块实施。
04年09月至今:任职上海某咨询公司顾问,从事 ERP的GL/AP/AR/FA/CM/CST等模块的实施工作。
现正在上海某国内企业项目中,做制造和财务相关模块实施。
我爱臭豆腐
任职于samsung sds china 数据中心. 从事多年unix 系统管理\计算机安全\网络
工作.有11年的行业经验
擅长于各种unix和linux 的系统维护/cluster 和安全方面的工作.实施过很多大型
集成项目以及系统和网络方面的安全评估和咨询服务.
并在主机安全和网络方面有多种非常优秀的经验.
wzy25

ITPUB现任金融版块及oracle as 板块斑竹,
某大型金融机构首席 DBA,有多年的大型 oracle database 及中间件 (weblogic ,oracle as)系统的构建优化经验,
对Oracle database 的高可用相关技术(rac,dataguard),性能优化,internal有深厚的研究和多年的实践经验。
同时对组建大规模的中间件集群(>4node)及中间件优化有多年的实践经验。

ZALBB
现任ITPUB ORACLE 10G管理版版主,曾参加过97工 程,INTERGRAPH公司的GFRAMME ,后来数据库研发工作,具有丰富的ORACLE实践应用经验,对数据库的体系结构,备份恢复,SQL优化 均有深入研究,尤其擅长ORACLE的技术应用。 现服务于一大型私企,负责ERP及CRM系统后台数据库管理及优化工作。
Boypoo
曾任职于电信运营商,现任职于某Oracle增值服务商,对电信行业业务流程 与系统特点有深刻理解,对大型业务数据库的物理设计、管理和维护有相当经验。对Oracle数据库的Trouble-Shooting、 Performance Tuning、Backup/Recovery有丰富的实践经验,熟悉HA和DR方案的设计和实施。
主要培训客户有:
四川电信 
统一企业
上海社保
重庆联通
江西电信

Posted by eygle at 3:03 PM | Comments (0)

May 7, 2008

用java调用oracle存储过程总结

出处:http://www.eygle.com/digest

1、什么是存储过程。存储过程是数据库服务器端的一段程序,它有两种类型。一种类似于SELECT查询,用于检索数据,检索到的数据能够以数据集的形式返回给客户。另一种类似于INSERT或DELETE查询,它不返回数据,只是执行一个动作。有的服务器允许同一个存储过程既可以返回数据又可以执行动作。
2、什么时候需要用存储过程
  如果服务器定义了存储过程,应当根据需要决定是否要用存储过程。存储过程通常是一些经常要执行的任务,这些任务往往是针对大量的记录而进行的。在服务器上执行存储过程,可以改善应用程序的性能。这是因为:
.服务器往往具有强大的计算能力和速度。
.避免把大量的数据下载到客户端,减少网络上的传输量。
  例如,假设一个应用程序需要计算一个数据,这个数据需要涉及到许多记录。如果不使用存储过程的话,把这些数据下载到客户端,导致网络上的流量剧增。
  不仅如此,客户端可能是一台老掉牙的计算机,它的运算速度很慢。而改用存储过程后,服务器会很快地把数据计算出来,并且只需传递一个数据给客户端,其效率之高是非常明显的。
3、存储过程的参数
  要执行服务器上的存储过程,往往要传递一些参数。这些参数分为四种类型:
  第一种称为输入参数,由客户程序向存储过程传递值。
  第二种称为输出参数,由存储过程向客户程序返回结果。
  第三种称为输入/输出参数,既可以由客户程序向存储过程传递值,也可以由存储过程向客户程序返回结果。
  第四种称为状态参数,由存储过程向客户程序返回错误信息。
  要说明的是,并不是所有的服务器都支持上述四种类型的参数,例如,InterBase就不支持状态参数。
4、oracle 存储过程的基本语法

  1.基本结构
CREATE OR REPLACEPROCEDURE 存储过程名字
(
    参数1 IN NUMBER,
    参数2 IN NUMBER
) IS
变量1 INTEGER :=0;
变量2 DATE;
BEGIN
END 存储过程名字

2.SELECT INTO STATEMENT
  将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条
  记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)
  例子:
  BEGIN
  SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
  EXCEPTION
  WHEN NO_DATA_FOUND THEN
      xxxx;
  END;

一:无返回值的存储过程
存储过程为:
CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS
BEGIN
  INSERT INTO HYQ.B_ID (I_ID,I_NAME) S (PARA1, PARA2);
END TESTA;
然后呢,在java里调用时就用下面的代码:
package com.hyq.src;

import java.sql.*;
import java.sql.ResultSet;

public class TestProcedureOne {
public TestProcedureOne() {
}
public static void main(String[] args ){
    String driver = "oracle.jdbc.driver.OracleDriver";
    String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: hyq ";
    Statement stmt = null;
    ResultSet rs = null;
    Connection conn = null;
    CallableStatement cstmt = null;

    try {
      Class.forName(driver);
      conn = DriverManager.getConnection(strUrl, " hyq ", " hyq ");
      CallableStatement proc = null;
      proc = conn.prepareCall("{ call HYQ.TESTA(?,?) }");
      proc.setString(1, "100");
      proc.setString(2, "TestOne");
      proc.execute();
    }
    catch (SQLException ex2) {
      ex2.printStackTrace();
    }
    catch (Exception ex2) {
      ex2.printStackTrace();
    }
    finally{
      try {
        if(rs != null){
          rs.close();
          if(stmt!=null){
            stmt.close();
          }
          if(conn!=null){
            conn.close();
          }
        }
      }
      catch (SQLException ex1) {
      }
    }
}
}
当然了,这就先要求要建张表TESTTB,里面两个字段(I_ID,I_NAME)。

二:有返回值的存储过程(非列表)
存储过程为:
CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS
BEGIN
  SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;
END TESTB;
在java里调用时就用下面的代码:
package com.hyq.src;

public class TestProcedureTWO {
public TestProcedureTWO() {
}
public static void main(String[] args ){
    String driver = "oracle.jdbc.driver.OracleDriver";
    String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";
    Statement stmt = null;
    ResultSet rs = null;
    Connection conn = null;
    try {
      Class.forName(driver);
      conn = DriverManager.getConnection(strUrl, " hyq ", " hyq ");
      CallableStatement proc = null;
      proc = conn.prepareCall("{ call HYQ.TESTB(?,?) }");
      proc.setString(1, "100");
      proc.registerOutParameter(2, Types.VARCHAR);
      proc.execute();
      String testPrint = proc.getString(2);
      System.out.println("=testPrint=is="+testPrint);
    }
    catch (SQLException ex2) {
      ex2.printStackTrace();
    }
    catch (Exception ex2) {
      ex2.printStackTrace();
    }
    finally{
      try {
        if(rs != null){
          rs.close();
          if(stmt!=null){
            stmt.close();
          }
          if(conn!=null){
            conn.close();
          }
        }
      }
      catch (SQLException ex1) {
      }
    }
}
}

}
注意,这里的proc.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,如果out是在第一个位置,那就是proc.getString(1),如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。

三:返回列表
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,
1, 建一个程序包。如下:
CREATE OR REPLACE PACKAGE TESTPACKAGE  AS
TYPE Test_CURSOR IS REF CURSOR;
end TESTPACKAGE;
2,建立存储过程,存储过程为:
CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS
BEGIN
    OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB;
END TESTC;
可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。
在java里调用时就用下面的代码:
package com.hyq.src;
import java.sql.*;
import java.io.OutputStream;
import java.io.Writer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.driver.*;


public class TestProcedureTHREE {
public TestProcedureTHREE() {
}
public static void main(String[] args ){
    String driver = "oracle.jdbc.driver.OracleDriver";
    String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";
    Statement stmt = null;
    ResultSet rs = null;
    Connection conn = null;

    try {
      Class.forName(driver);
      conn = DriverManager.getConnection(strUrl, "hyq", "hyq");

      CallableStatement proc = null;
      proc = conn.prepareCall("{ call hyq.testc(?) }");
      proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
      proc.execute();
      rs = (ResultSet)proc.getObject(1);

      while(rs.next())
      {
          System.out.println("<tr><td>" + rs.getString(1) + "</td><td>"+rs.getString(2)+"</td></tr>");
      }
    }
    catch (SQLException ex2) {
      ex2.printStackTrace();
    }
    catch (Exception ex2) {
      ex2.printStackTrace();
    }
    finally{
      try {
        if(rs != null){
          rs.close();
          if(stmt!=null){
            stmt.close();
          }
          if(conn!=null){
            conn.close();
          }
        }
      }
      catch (SQLException ex1) {
      }
    }
}
}
在这里要注意,在执行前一定要先把oracle的驱动包放到class路径里,否则会报错。



Posted by eygle at 4:19 PM | Comments (2)


CopyRight © 2004-2008 eygle.com, All rights reserved.