阿里云ECS上备份Oracle数据库到OSS存储(单机模式)
Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP)、热备份和冷备份。导出备份是一种逻辑备份,冷备份和热备份是物理备份。一、 导出/导入(Export/Import)(优点:可在不同版本中导入导出,适用于数据库迁移与升级)数据导入(Import)的过程是数据导出(Export)的逆过程,分别将数据文件导入数据库和将数据库数据导出到数据文件。(10G以后版本,增量参数inc
Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP)、热备份和冷备份。导出备份是一种逻辑备份,冷备份和热备份是物理备份。
一、 导出/导入(Export/Import)
(优点:可在不同版本中导入导出,适用于数据库迁移与升级)
数据导入(Import)的过程是数据导出(Export)的逆过程,分别将数据文件导入数据库和将数据库数据导出到数据文件。(10G以后版本,增量参数inctype已被弃用)
导出/导入方式又有2种命令:
1、exp/imp 命令对,客户端方式,主要适用于数据量较小的情况下远程备份数据库。
示例:
(1)将数据库中bpuser用户的表导出
exp system/manager@TestDB file=/home/oracle/sampleDB.dmp owner=bpuser
(2)将bpuser用户的备份导入
imp bpuser/DBPASSWORD FULL=y FILE=A.dmp log=imp.log
2、expdb/impdb命令对,服务端方式,只支持在数据库服务器执行,导出目录在数据库运行参数中指定。
操作命令示例:
(1)查看导出目录:SQL> select * from dba_directories;
(2)给bpuser用户赋予在备份目录的操作权限。
SQL> grant read,write on directory DATA_PUMP_DIR to bpuser;
(3)按用户导出数据
expdp bpuser/DBPASSWORD@orcl schemas=bpuser dumpfile=expdp.dmp DIRECTORY=DATA_PUMP_DIR;
(4)还原数据库指定用户下
impdp bpuser/DBPASSWORD DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp.dmp SCHEMAS=bpuser log=impdp.log;
(5)导出导入整个数据库
expdp sys/DBPASSWORD DIRECTORY=DATA_PUMP_DIR DUMPFILE=full.dmp FULL=y;
impdp sys/DBPASSWORD DIRECTORY=DATA_PUMP_DIR DUMPFILE=full.dmp FULL=y;
自动备份设置:设置脚本,添加计划任务,定期执行备份。
二、 热备份
(使用自带的RMAN命令工具快速地备份恢复,官方推荐的备份方式,在数据库打开状态)
热备份是在数据库运行的情况下,采用archivelog mode(归档模式)方式备份数据库的方法。热备份要求数据库在Archivelog方式下操作,并需要大量的档案空间。一旦数据库运行在archivelog状态下,就可以做备份了。热备份的命令文件由三部分组成:
1. 数据文件一个表空间一个表空间的备份。
(1) 设置表空间为备份状态
(2) 备份表空间的数据文件
(3) 恢复表空间为正常状态
2. 备份归档log文件 (可以同时双份备份)
(1) 临时停止归档进程
(2) log下那些在archive rede log目标目录中的文件
(3) 重新启动archive进程
(4) 备份归档的redo log文件
3. 用alter database bachup controlfile命令来备份控制文件
热备份的优点是:
1. 可在表空间或数据库文件级备份,备份的时间短。
2. 备份时数据库仍可使用。
3. 可达到秒级恢复(恢复到某一时间点上)。
4. 可对几乎所有数据库实体做恢复
5. 恢复是快速的,在大多数情况下在数据库仍工作时恢复。
热备份的不足是:
1. 不能出错,否则后果严重
2. 若热备份不成功,所得结果不可用于时间点的恢复
3. 因难于维护,所以要特别仔细小心,不允许“以失败告终”。
自动备份设置:配置RMAN参数,设置有效保存时间及份数,编写RMAN脚本,每天增量备份,定期7天做一次全备,清理过期备份。
RMAN命令备份:
[oracle@yqmysql01 ~]$ rman target /
显示rman默认设置
RMAN>show all;
1、更改rman磁盘备份默认目录
RMAN> configure channel device type disk format '/home/oracle/RMAN';
2、更改保存策略
(1)所有的备份保留时间为7天
RMAN>configure retention policy to recovery window of 14 days;
(2)最新的5份备份标记为redundancy
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 5;
3、默认设备
default device type:默认值为disk,指定备份到磁盘或者是磁带
RMAN>configure default device type to disk;
4、控制文件
开启自动备份及指定路径及名称,当控制文件变化时,控制文件自动备份
RMAN>configure controlfile autobackup on;
RMAN>CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/home/ossfs/backup/oracle/rman/conf_%F';
5、排除选项
(1)exclude:排除‘EXAMPLE’表空间
RMAN>configure exclude for tablespace 'EXAMPLE';
(2)重置排除选项为默认值
RMAN>configure exclude for tablespace 'EXAMPL' clear;
6、备份集大小
(1)设置备份集大小
RMAN>configure maxsetsize to 4G;
7、执行备份,指定INCLUDE CURRENT CONTROLFILE参数
RMAN> backup database include current controlfile;
8、备份归档日志文件
RMAN> BACKUP ARCHIVELOG ALL;
9、在BACKUP在BACKUP过程中利用PLUS ARCHIVELOG参数备份,例如:
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
10、建立增量备份
(1)基础备份(level=0)
RMAN> BACKUP INCREMENTAL LEVEL=0 DATABASE;
(2)增量备份Differential
RMAN> BACKUP INCREMENTAL LEVEL=1 TABLESPACE SYSTEM DATAFILE 'F:\ORAHOME1\ORADATA\JSSWEB\USERS01.DBF';
(3)累积增量备份CUMULATIVE
RMAN> BACKUP INCREMENTAL LEVEL=1 CUMULATIVE DATABASE;
11、建立冗余备份
在RUN{}命令块中利用SET BACKUP COPIES命令为该命令块中所有的BACKUP命令设置Duplexed方式,例如:
RMAN> RUN{
2>SET BACKUP COPIES 2;
3>BACKUP DEVICE TYPE DISK FORMAT 'D:\BACKUP1\%U','D:\BACKUP2\%U'
4>TABLESPACE USERS,SALES;
5>}
上述命令将生成两份备份集,分别存储到d:\backup1和d:\backup2目录。
12、RMAN恢复数据库
对数据库进行完全介质恢复
过程有三个步骤:
(1)启动数据库到加载状态
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
(2)执行恢复操作(恢复分两步,有先有后的。)
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE DELETE ARCHIVELOGS SKIP TABLESPACE TEMP;
注意:DELETE ARCHIVELOGS和SKIP TABLESPACE两个参数是可选择的,作用如下:
DELETE ARCHIVELOGS:表示RMAN将在完成恢复过程后自动删除那些在恢复过程中修复的归档日志文件。
SKIP TABLESPACE:跳过指定表空间,比如临时表,当然临时表空间即使你不跳过它也不会恢复的。
(3)打开数据库
RMAN> ALTER DATABASE OPEN;
此处需要注意的一点是,如果你的数据库并非处于归档模式,那么必须使用ALTER DATABASE OPEN RESETLOGS来打开数据库,因为RMAN会认为在非归档模式下是一个不一致的备份,执行resetlogs之后,oracle将会把scn重新置为0。
三、冷备份(必须关闭数据库,数据量大时,停机时间会越来越长,不推荐使用)
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份时将关键性文件拷贝到另外的位置的一种说法。对于备份Oracle信息而言,冷备份时最快和最安全的方法。冷备份的优点是:
1、 是非常快速的备份方法(只需拷文件)
2、 容易归档(简单拷贝即可)
3、 容易恢复到某个时间点上(只需将文件再拷贝回去)
4、 能与归档方法相结合,做数据库“最佳状态”的恢复。
5、 低度维护,高度安全。
但冷备份也有如下不足:
1、 单独使用时,只能提供到“某一时间点上”的恢复。
2、 再实施备份的全过程中,数据库必须要作备份而不能作其他工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
3、 若磁盘空间有限,只能拷贝到磁带等其他外部存储设备上,速度会很慢。
4、 不能按表或按用户恢复。
如果可能的话(主要看效率),应将信息备份到磁盘上,然后启动数据库(使用户可以工作)并将备份的信息拷贝到磁带上(拷贝的同时,数据库也可以工作)。冷备份中必须拷贝的文件包括:
1、 所有数据文件
2、 所有控制文件
3、 所有联机REDO LOG文件
4、 Init.ora文件(可选)
值得注意的使冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的。
下面是作冷备份的完整例子。
(1) 关闭数据库
sqlplus /nolog
sql>connect / as sysdba
sql>shutdown normal;
(2) 用拷贝命令备份全部的时间文件、重做日志文件、控制文件、初始化参数文件
[oracle@yqmysql01 ~]$ cp /u01/app/oracle “备份目录”
(3) 重启Oracle数据库
sql>startup
四、有关于备份策略
建议每周一个完整备份,每天一个增量备份存档,数据库开启归档日志,每个时间点的操作将记录在归档日志中。当需要恢复时,先从备份文件恢复,再读取归档日志文件(归档日志仅用于RMAN方式恢复)。
数据量小于100G可以expdb方式为主(只能做全备,2小时一次),如果数据量大时,将严重影响性能,则以RMAN备份方式为主,expdb一天一次。
保持备份3份,一份以expdb全备方式导出,一份以RMAN方式在线备份2份不同位置,一处是本地磁盘,一处是OSS存储,备份时间尽量岔开高峰期。
五、备份位置
所有ECS服务器,都是可以挂载阿里云OSS存储做为ECS的磁盘,用来存放备份数据。所以,在OSS存储上新建一个bucket专门用作存放备份数据。
下面是挂载方法:
sudo yum install automake gcc-c++ git libcurl-devel libxml2-devel \
fuse-devel make openssl-devel
git clone https://github.com/aliyun/ossfs.git
cd ossfs
./autogen.sh
./configure
make
sudo make install
配置阿里云OSS秘钥
echo yq-bak:LTAI22rpOCFgrHM2:qrn9SUQdtyH23HYodON8n74Bf0xEo9 > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs
yq-bak:对应bucket空间名
LTAI22rpOCFgrHM2:qrn9SUQdtyH23HYodON8n74Bf0xEo9
这个就是秘钥AccessKeyID:AccessKeySecret,中间用:隔开
将oss空间mount挂载到ossfs目录下
mkdir /home/ossfs
ossfs yq-bak /home/ossfs -ourl=http://oss-cn-hangzhou-internal.aliyuncs.com
ls /home/ossfs/backup/oracle
yq-bak这个空间位于华东1所以对应的地址为http://oss-cn-hangzhou-internal.aliyuncs.com,不同地区对应不同的网址具体可以看阿里云帮助文档《访问域名和数据中心》这样就一目了然知道哪个区对应哪个网址了;
卸载命令
umount /home/ossfs
开机自动挂载:
#!/bin/bash
# ossfs Automount Aliyun OSS Bucket in the specified direcotry.
# chkconfig: 2345 90 10
# description: Activates/Deactivates ossfs configured to start at boot time.
ossfs yq-bak /home/ossfs -ourl=http://oss-cn-hangzhou-internal.aliyuncs.com
chmod a+x /etc/init.d/ossfs
chkconfig ossfs on
六、主机级别,磁盘快照。(这个可考虑用作备份系统盘)
另外,还可以对服务器的虚拟磁盘做快照备份,在阿里云ECS管理控制台,对ECS服务器整个磁盘做快照,进行备份。占用空间较大,并且是按量收费,可使用OSS存储来保存快照,同样是设置有效保存时间及份数,定期做全备。
七、备份脚本(待完善)
①逻辑备份shell脚本
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
curdate=`date +%F-%H%M`
echo $curdate
$ORACLE_HOME/bin/expdp bpuser/'DBPASSWORD'@orcl directory=DATA_PUMP_DIR dumpfile="bpuser_"$curdate".dmp" logfile=bpuser$curdate.log owner=bpuser
cp /u01/app/oracle/admin/orcl/dpdump/"bpmpos_"$curdate".dmp" /home/ossfs/backup/oracle/dmpfile/
#清理空间,删除3天前的文件
find /u01/app/oracle/admin/orcl/dpdump/ -type f -mtime +3 -delete
find /home/ossfs/backup/oracle/dmpfile/ -type f -mtime +8 -delete
更多推荐
所有评论(0)