别人在得到备份后,如果还原,不就能得到所有资料了。
所以如果数据真的很重要,把备份加密起来,也是多了一种数据保护措施,再说通过测试,发现Oracle设这个
也是很方便的。
--===============================
测试一:
1. 准备好测试用的表空间
CREATE TABLESPACE TBS_PWD DATAFILE ‘C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF‘ SIZE 5m ;
2.打开加密
configure encryption for database on;
set encryption on identified by ‘xcl‘ only;
3.开始备份,发现原来Wallet没打开
RMAN> backup tablespace tbs_pwd; 启动 backup 于 05-3月 -14 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: SID=35 设备类型=DISK 通道 ORA_DISK_1: 正在启动全部数据文件备份集 通道 ORA_DISK_1: 正在指定备份集内的数据文件 输入数据文件: 文件号=00010 名称=C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF 通道 ORA_DISK_1: 正在启动段 1 于 05-3月 -14 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03009: backup 命令 (ORA_DISK_1 通道上, 在 03/05/2014 11:49:23 上) 失败 ORA-19914: 无法加密备份 ORA-28365: Wallet 未打开
4.尝试打开,噢,原来这个库还没创建
RMAN> sql ‘alter system set wallet open identified by "xcl"‘; sql 语句: alter system set wallet open identified by "xcl" RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03009: sql 命令 (default 通道上, 在 03/05/2014 11:52:19 上) 失败 RMAN-11003: 在分析/执行 SQL 语句期间失败: alter system set wallet open identified by "xcl" ORA-28367: wallet 不存在
5. 创建Wallet,并设置密码.
a. 新建目录:
C:\oracle\admin\xcldb\wallet
b.找到sqlnet.ora
加上Wallet的配置
ENCRYPTION_WALLET_LOCATION=
(SOURCE=(METHOD=FILE) (METHOD_DATA=(DIRECTORY=C:\oracle\admin\xcldb\wallet)))
如果是UNIX/Linux :
su - oracle
mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID/wallet
chmod -R 750 $ORACLE_BASE/oradata/$ORACLE_SID/wallet
c.设置密码
RMAN> sql ‘alter system set encryption key identified by "xcl"‘; sql 语句: alter system set encryption key identified by "xcl"执行完成后,会在C:\oracle\admin\xcldb\wallet生成一个文件
ewallet.p12
6. 备份表空间
RMAN> backup tablespace tbs_pwd; 启动 backup 于 05-3月 -14 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: SID=223 设备类型=DISK 通道 ORA_DISK_1: 正在启动全部数据文件备份集 通道 ORA_DISK_1: 正在指定备份集内的数据文件 输入数据文件: 文件号=00010 名称=C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF 通道 ORA_DISK_1: 正在启动段 1 于 05-3月 -14 通道 ORA_DISK_1: 已完成段 1 于 05-3月 -14 段句柄=C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\05P2DUK3_1_1 标记=TAG20140305T142819 注释=NONE 通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01 完成 backup 于 05-3月 -14
7. 关库,破坏,启动
a.关库
RMAN> shutdown immediate; 数据库已关闭 数据库已卸装 Oracle 实例已关闭b. 删除tbs_pwd表空间的数据文件
c.启动
RMAN> startup 已连接到目标数据库 (未启动) Oracle 实例已启动 数据库已装载 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: startup 命令 (在 03/05/2014 14:54:49 上) 失败 ORA-01157: 无法标识/锁定数据文件 10 - 请参阅 DBWR 跟踪文件 ORA-01110: 数据文件 10: ‘C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF‘
8.尝试还原,发现Wallet没打开,原来每次数据库启动,都要手工打开Wallet.
a. 尝试还原
RMAN> restore tablespace tbs_pwd; 启动 restore 于 05-3月 -14 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 正在开始还原数据文件备份集 通道 ORA_DISK_1: 正在指定从备份集还原的数据文件 通道 ORA_DISK_1: 将数据文件 00010 还原到 C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF 通道 ORA_DISK_1: 正在读取备份片段 C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\05P2DUK3_1_1 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: restore 命令 (在 03/05/2014 15:42:00 上) 失败 ORA-19870: 还原备份片段 C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\05P2DUK3_1_1 时出错 ORA-19913: 无法解密备份 ORA-28365: Wallet 未打开
b.打开Wallet.
RMAN> sql ‘alter system set wallet open identified by "xcl"‘; sql 语句: alter system set wallet open identified by "xcl"
9. 再次尝试还原,还原成功
RMAN> restore tablespace tbs_pwd; 启动 restore 于 05-3月 -14 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 正在开始还原数据文件备份集 通道 ORA_DISK_1: 正在指定从备份集还原的数据文件 通道 ORA_DISK_1: 将数据文件 00010 还原到 C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF 通道 ORA_DISK_1: 正在读取备份片段 C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\05P2DUK3_1_1 通道 ORA_DISK_1: 段句柄 = C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\05P2DUK3_1_1 标记 = TAG20140305T142819 通道 ORA_DISK_1: 已还原备份片段 1 通道 ORA_DISK_1: 还原完成, 用时: 00:00:01 完成 restore 于 05-3月 -14 RMAN> recover tablespace tbs_pwd; 启动 recover 于 05-3月 -14 使用通道 ORA_DISK_1 正在开始介质的恢复 介质恢复完成, 用时: 00:00:09 完成 recover 于 05-3月 -14 RMAN> alter database open; 数据库已打开
测试结束。
--===============================
测试二:
那下面的设置到底有用没呢?
configure encryption for database on;
set encryption on identified by ‘xcl‘ only;
继续测:
1.用命令关了Wallet,或重启下数据库
sql ‘alter system set encryption wallet close‘
2. 打开加密
RMAN> configure encryption for database on; 旧的 RMAN 配置参数: CONFIGURE ENCRYPTION FOR DATABASE OFF; 新的 RMAN 配置参数: CONFIGURE ENCRYPTION FOR DATABASE ON; 已成功存储新的 RMAN 配置参数 RMAN> set encryption on identified by ‘xclrman‘ only; 正在执行命令: SET encryption RMAN> show all; db_unique_name 为 XCLDB 的数据库的 RMAN 配置参数为: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default CONFIGURE BACKUP OPTIMIZATION OFF; # default CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘%F‘; # default CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE MAXSETSIZE TO UNLIMITED; # default CONFIGURE ENCRYPTION FOR DATABASE ON; CONFIGURE ENCRYPTION ALGORITHM ‘AES128‘; # default CONFIGURE COMPRESSION ALGORITHM ‘BASIC‘ AS OF RELEASE ‘DEFAULT‘ OPTIMIZE FOR LOAD CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABAS
3.备份表空间
RMAN> backup tablespace tbs_pwd; 启动 backup 于 05-3月 -14 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: SID=223 设备类型=DISK 通道 ORA_DISK_1: 正在启动全部数据文件备份集 通道 ORA_DISK_1: 正在指定备份集内的数据文件 输入数据文件: 文件号=00010 名称=C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF 通道 ORA_DISK_1: 正在启动段 1 于 05-3月 -14 通道 ORA_DISK_1: 已完成段 1 于 05-3月 -14 段句柄=C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\06P2E5LL_1_1 标记=TAG20140305T162836 注释=NONE 通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01 完成 backup 于 05-3月 -14
4. 关库,破坏,重启
a.关库
RMAN> shutdown immediate; 数据库已关闭 数据库已卸装 Oracle 实例已关闭b. 删除表空间数据文件
c. 重启数据库
5. 还原表空间
a. 直接还原,发现不输密码是不行地。
RMAN> restore tablespace tbs_pwd; 启动 restore 于 05-3月 -14 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: SID=156 设备类型=DISK 通道 ORA_DISK_1: 正在开始还原数据文件备份集 通道 ORA_DISK_1: 正在指定从备份集还原的数据文件 通道 ORA_DISK_1: 将数据文件 00010 还原到 C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF 通道 ORA_DISK_1: 正在读取备份片段 C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\06P2E5LL_1_1 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: restore 命令 (在 03/05/2014 16:33:35 上) 失败 ORA-19870: 还原备份片段 C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\06P2E5LL_1_1 时出错 ORA-19913: 无法解密备份 ORA-28365: Wallet 未打开
b. 输入密码,执行还原成功
RMAN> set decryption identified by "xclrman"; 正在执行命令: SET decryption RMAN> restore tablespace tbs_pwd; 启动 restore 于 05-3月 -14 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 正在开始还原数据文件备份集 通道 ORA_DISK_1: 正在指定从备份集还原的数据文件 通道 ORA_DISK_1: 将数据文件 00010 还原到 C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF 通道 ORA_DISK_1: 正在读取备份片段 C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\06P2E5LL_1_1 通道 ORA_DISK_1: 段句柄 = C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\06P2E5LL_1_1 标记 = TAG20140305T162836 通道 ORA_DISK_1: 已还原备份片段 1 通道 ORA_DISK_1: 还原完成, 用时: 00:00:01 完成 restore 于 05-3月 -14 RMAN> recover tablespace tbs_pwd; 启动 recover 于 05-3月 -14 使用通道 ORA_DISK_1 正在开始介质的恢复 介质恢复完成, 用时: 00:00:01 完成 recover 于 05-3月 -14 RMAN> alter database open; 数据库已打开
测试结束 ,分析,原来我第一个测试走叉了,不用创建Wallet也可以对备份加密的。
--===============================
经测试和查资料得知,RMAN的备份加密分为三种.
第一种:
测试二所使用的方式。
configure encryption for database on;
set encryption on identified by ‘xclrman‘ only;
备份命令
还原时:
set decryption identified by "xclrman";
还原命令
第二种:
通过配置加密/解密信任书,也就是Oracle Encryption Wallet,来加密备份,这种备份在本机
还原时,是无须在还原前输入密码的,证书能自动搞定,但把备份介质文件复制到其它机器,
其它服务器数据库是无法识别的,即无法恢复。
适合于,备份就是本地的情况。即隐藏密码,又能加密备份。
a. sql ‘alter system set encryption key identified by "xcl"‘;
前提是有设好sqlnet.ora
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE) (METHOD_DATA=(DIRECTORY=C:\oracle\admin\xcldb\wallet)))
b. 数据库备份命令
还原时a.打开Wallet,数据库每次启动默认是不会打开的。
sql ‘alter system set wallet open identified by "xcl"‘;
b.数据库还原命令
第三种:
混合型的.把前面两种综合了起来。
简单来说就是在本机用第二种方式,在异机用第一种方式,它能两者兼顾。
对了加密算法也是能改的:
CONFIGURE ENCRYPTION ALGORITHM TO ‘AES256‘;
MAIL: xcl_168@aliyun.com
BLOG: http://blog.csdn.net/xcl168