2023年7月30日发(作者:)
Oracle备份的⼏种⽅式【转】这⾥使⽤Oracle 12C来⼤概演⽰说明⼀下rman的基本⽤法,这⾥不会深⼊讨论,因为本⼈也只是刚刚才接触,只是结合了⽹上的⼀些⽂章以及⾃⼰的实践来总结并拿出来⼤家学习,谢谢⽬录⼀、关于备份与恢复⼆、逻辑备份(expdp和impdp)三、物理备份四、数据库⽇常备份计划及脚本参考⼀、关于备份与恢复1、备份定义备份就是把数据库复制到转储设备的过程。其中,转储设备是指⽤于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库的副本称为原数据库的备份或转储。备份是⼀份数据副本2、备份分类从物理与逻辑的⾓度来分类:从物理与逻辑的,备份可以分为物理备份和逻辑备份。物理备份:对数据库操作系统的物理⽂件(数据⽂件,控制⽂件和⽇志⽂件)的备份。物理备份⼜可以分为脱机备份(冷备份)和联机备份(热备份),前者是在关闭数据库的时候进⾏的,后者是以归档⽇志的⽅式对运⾏的数据库进⾏备份。可以使⽤oracle的恢复管理器(RMAN)或操作系统命令进⾏数据库的物理备份。逻辑备份:对数据库逻辑组件(如表和存储过程等数据库对象)的备份。逻辑备份的⼿段很多,如传统的EXP,数据泵(EXPDP),数据库闪回技术等第三⽅⼯具,都可以进⾏数据库的逻辑备份。从数据库的备份⾓度分类:从数据库的备份⾓度,备份可以分为完全备份和增量备份和差异备份完全备份:每次对数据库进⾏完整备份,当发⽣数据丢失的灾难时,完全备份⽆需依赖其他信息即可实现100%的数据恢复,其恢复时间最短且操作最⽅便。增量备份:只有那些在上次完全备份或增量备份后被修改的⽂件才会被备份。优点是备份数据量⼩,需要的时间短,缺点是恢复的时候需要依赖以前备份记录,出问题的风险较⼤。差异备份:备份那些⾃从上次完全备份之后被修改过的⽂件。从差异备份中恢复数据的时间较短,因此只需要两份数据---最后⼀次完整备份和最后⼀次差异备份,缺点是每次备份需要的时间较长。3、恢复定义恢复就是发⽣故障后,利⽤已备份的数据⽂件或控制⽂件,重新建⽴⼀个完整的数据库4、恢复分类实例恢复:当oracle实例出现失败后,oracle⾃动进⾏的恢复介质恢复:当存放数据库的介质出现故障时所作的恢复。介质恢复⼜分为完全恢复和不完全恢复完全恢复:将数据库恢复到数据库失败时的状态。这种恢复是通过装载数据库备份并应⽤全部的重做⽇志做到的。不完全恢复:将数据库恢复到数据库失败前的某⼀时刻的状态。这种恢复是通过装载数据库备份并应⽤部分的重做⽇志做到的。进⾏不完全恢复后,必须在启动数据库时⽤resetlogs选项重设联机重做⽇志。⼆、逻辑备份(expdp和impdp)1、expdp/impdp和exp/imp的区别1. exp和imp是客户端⼯具程序,它们既可以在客户端使⽤,也可以在服务端使⽤。2. expdp和impdp是服务端的⼯具程序,他们只能在oracle服务端使⽤,不能在客户端使⽤。3. imp只适⽤于exp导出的⽂件,不适⽤于expdp导出⽂件;impdp只适⽤于expdp导出的⽂件,⽽不适⽤于exp导出⽂件。4. 对于10g以上的服务器,使⽤exp通常不能导出0⾏数据的空表,⽽此时必须使⽤expdp导出。本节主要讲解的是expdp/impdp的⽤法,不涉及到exp和imp2、导出数据在准备要备份的数据库服务器上创建备份⽬录(在后⾯使⽤sql命令创建的逻辑⽬录并不是在OS上创建⽬录,所以我们先要在服务器上创建⼀个⽬录)# su oracle$ mkdir /home/oracle/oracle_bak⽤管理员⾝份登录到sqlplus$ sqlplys /nologSQL> conn sys/oracle as sysdba创建逻辑⽬录SQL> create directory data_dir as '/home/oracle/oracle_bak';查看管理员⽬录是否存在SQL> select * from dba_direcories;使⽤管理员⽤户给指定的⽤户赋予在该⽬录的操作权限(⽐如该⽤户需要备份⾃⼰的数据)SQL> grant read,write on directory data_dir to C##BAK_TEST_USER;导出可有五种⽅式1、“full=y”,全量导出数据库$ expdp sys/oracle@orcl dumpfile= directory=data_dir full=y logfile=2、schemas按⽤户导出$ expdp user/passwd@orcl schemas=user dumpfile= directory=data_dir logfile=3、按表空间导出$ expdp sys/passwd@orcl tablespace=tbs1,tbs2 dumpfile= directory=data_dir logfile=4、导出表$ expdp user/passwd@orcl tables=table1,table2 dumpfile= directory=data_dir logfile=5、按查询条件导出$ expdp user/passwd@orcl tables=table1='where number=1234' dumpfile= directory=data_dir logfile=2、导⼊数据⾸先将需要导⼊的数据⽂件存放导需要导⼊的数据库服务器上参照导出的时候的建⽴⽬录⽅式建⽴物理⽬录和逻辑⽬录(只是建⽬录即可,如果需要给⽤户权限则加上给⽤户权限的那步)使⽤命令导⼊,同时,导⼊⽅式也可以分为五种,分别对应着导出的五种⽅式1、“full=y”,全量导⼊数据库;impdp user/passwd directory=data_dir dumpfile= full=y2、同名⽤户导⼊,从⽤户A导⼊到⽤户A;impdp A/passwd schemas=A directory=data_dir dumpfile= logfile=;3、①从A⽤户中把表table1和table2导⼊到B⽤户中;impdp B/passwdtables=1,2 remap_schema=A:B directory=data_dir dumpfile= logfile=;②将表空间TBS01、TBS02、TBS03导⼊到表空间A_TBS,将⽤户B的数据导⼊到A,并⽣成新的oid防⽌冲突;impdp A/passwd remap_tablespace=TBS01:A_TBS,TBS02:A_TBS,TBS03:A_TBS remap_schema=B:A FULL=Y transform=oid:n
directory=data_dir dumpfile= logfile=4、导⼊表空间;impdp sys/passwd tablespaces=tbs1 directory=data_dir dumpfile= logfile=5、追加数据;impdp sys/passwd directory=data_dir dumpfile= schemas=system table_exists_action=replace logfile=;
--table_exists_action:导⼊对象已存在时执⾏的操作。有效关键字:SKIP,APPEND,REPLACE和TRUNCATE3、并⾏操作可以通过 PARALLEL 参数为导出使⽤⼀个以上的线程来显著地加速作业。每个线程创建⼀个单独的转储⽂件,因此参数 dumpfile 应当拥有和并⾏度⼀样多的项⽬。您可以指定通配符作为⽂件名,⽽不是显式地输⼊各个⽂件名,例如:expdp ananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES_% parallel=4 job_name=Cases_Export
注意:dumpfile 参数拥有⼀个通配符 %U,它指⽰⽂件将按需要创建,格式将为expCASES_,其中nn 从 01 开始,然后按需要向上增加。在并⾏模式下,状态屏幕将显⽰四个⼯作进程。(在默认模式下,只有⼀个进程是可见的)所有的⼯作进程同步取出数据,并在状态屏幕上显⽰它们的进度。分离访问数据⽂件和转储⽬录⽂件系统的输⼊/输出通道是很重要的。否则,与维护 Data Pump 作业相关的开销可能超过并⾏线程的效益,并因此⽽降低性能。并⾏⽅式只有在表的数量多于并⾏值并且表很⼤时才是有效的。数据库监控您还可以从数据库视图获得关于运⾏的 Data Pump 作业的更多信息。监控作业的主视图是 DBA_DATAPUMP_JOBS,它将告诉您在作业上有多少个⼯作进程(列 DEGREE)在⼯作。另⼀个重要的视图是 DBA_DATAPUMP_SESSIONS,当它与上述视图和 V$SESSION 结合时将给出主前台进程的会话 SID。select sid, serial# from v$session s, dba_datapump_sessions d where = ;
这条指令显⽰前台进程的会话。更多有⽤的信息可以从警报⽇志中获得。当进程启动时,MCP 和⼯作进程在警报⽇志中显⽰如下:kupprdp:master process DM00 started with pid=23, OS id=20530 to execute - $('CASES_EXPORT', 'ANANDA'); kupprdp:worker process DW01 started with worker id=1, pid=24, OS id=20532 to execute - 它显⽰为数据泵操作启动的会话的 PID。您可以⽤以下查询找到实际的 SID:select sid, program from v$session where paddr in (select addr from v$process where pid in (23,24,25));
PROGRAM 列将对应警报⽇志⽂件中的名称显⽰进程 DM (为主进程)或 DW (为⼯作进程)。如果⼀个⼯作进程使⽤了并⾏查询,⽐如说 SID 23,您可以在视图V$PX_SESSION 中看到它,并把它找出来。它将为您显⽰从 SID 23 代表的⼯作进程中运⾏的所有并⾏查询会话:select sid from v$px_session where qcsid = 23;
从视图 V$SESSION_LONGOPS中可以获得其它的有⽤信息来预测完成作业将花费的时间。select sid, serial#, sofar, totalwork from v$session_longops where opname = 'CASES_EXPORT' and sofar != totalwork;
列 totalwork 显⽰总⼯作量,该列的 sofar 数量被加和到当前的时刻 — 因⽽您可以⽤它来估计还要花多长时间。4、不同版本数据库之间数据互导如将11g数据库的数据导⼊导10g数据库的服务器上⾸先在11g服务器上导出EXPDP USERID='SYS/cuc2009@cuc as sysdba' schemas=sybj directory=DATA_PUMP_DIR dumpfile= logfile= version=10.2.0.1.0然后在10g数据库服务器上导⼊IMPDP USERID='SYS/cuc2009@cucf as sysdba' schemas=sybj directory=DATA_PUMP_DIR dumpfile= logfile= version=10.2.0.1.0三、物理备份1、使⽤rman⼯具备份及恢复说明: 1. RMAN是 ORACLE提供的⼀个备份与恢复的⼯具,可以⽤来执⾏完全或不完全的数据库恢复。 2. RMAN不能⽤于备份初始化参数⽂件和⼝令⽂件。 3. 与传统⼯具相⽐,RMAN具有独特的优势:跳过未使⽤的数据块。当备份⼀个RMAN备份集时,RMAN不会备份从未被写⼊的数据块,⽽传统的⽅式⽆法获知那些是未被使⽤的数据块。 4. RMAN可以进⾏增量备份(增量备份是针对于上⼀次备份(⽆论是哪种备份):备份上⼀次备份后,所有发⽣变化的⽂件)1、⾸先需要在将要备份的数据库服务器上切换服务器的归档模式,如果已经是归档模式了,那么可以跳过此步# su oracle //切换到oracle⽤户$ sqlplus /nolog //启动sqlplusSQL> conn / as sysdba //以DBA的⾝份连接数据库SQL> shutdown immediate; //⽴即关闭数据库SQL> startup mount //启动实例并加载数据库,但不打开SQL> alter database archivelog; //更改数据库为归档模式SQL> alter database open; //打开数据库SQL> alter system archive log start; //启⽤⾃动归档SQL> exit //退出 2、启动并连接到rman(恢复管理器)可以开个专门⽤于备份的⽤户,不过这⾥使⽤了sys⽤户$ rman target=sys/oracle@orcl3、基本设置具体路径可⾃⼰安装需求改,但是登录的⽤户需要对备份的⽬录有读写权限,⽬录建⽴⽅法可参考上⾯逻辑备份的备份⽬录建⽴RMAN> configure default device type to disk; //设置默认的备份设备为磁盘RMAN> configure device type disk parallelism 2; //设置备份的并⾏级别,通道数RMAN> configure channel 1 device type disk format '/home/oracle/oracle_bak/bakup_%U'; //设置备份的⽂件格式,只适⽤于磁盘设备RMAN> configure channel 2 device type disk format '/home/oracle/oracle_bak/bakup2_%U'; //设置备份的⽂件格式,只适⽤于磁盘设备RMAN> configure controlfile autobackup on; //打开控制⽂件与服务器参数⽂件的⾃动备份RMAN> configure controlfile autobackup format for device type disk to '/home/oracle/oracle_bak/ctl_%F'; //设置控制⽂件与服务器参数⽂件⾃动备份的⽂件格式
说明:format:%c:备份⽚的拷贝数(从1开始编号);%d:数据库名称;%D:位于该⽉中的天数(DD);%M:位于该年中的⽉份(MM);%F:⼀个基于DBID唯⼀的名称,这个格式的形式为c-xxx-YYYYMMDD-QQ,其中xxx位该数据库的DBID,YYYYMMDD为⽇期,QQ是⼀个1-256的序列;%n:数据库名称,并且会在右侧⽤x字符进⾏填充,使其保持长度为8;%u:是⼀个由备份集编号和建⽴时间压缩后组成的8字符名称。利⽤%u可以为每个备份集产⽣⼀个唯⼀的名称;%p:表⽰备份集中的备份⽚的编号,从1开始编号;%U:是%u_%p_%c的简写形式,利⽤它可以为每⼀个备份⽚段(既磁盘⽂件)⽣成⼀个唯⼀的名称,这是最常⽤的命名⽅式;%t:备份集时间戳;%T:年⽉⽇格式(YYYYMMDD);channel的概念:⼀个channel是rman于⽬标数据库之间的⼀个连接,"allocate channel"命令在⽬标数据库启动⼀个服务器进程,同时必须定义服务器进程执⾏备份和恢复操作使⽤的I/O类型通道控制命令可以⽤来:控制rman使⽤的OS资源影响并⾏度指定I/O带宽的限制值(设置 limit read rate 参数)指定备份⽚⼤⼩的限制(设置 limit kbytes)指定当前打开⽂件的限制值(设置 limit maxopenfiles)4、查看所有配置RMAN> show all;5、查看数据库⽅案报表RMAN> report schema;6、全量备份数据库及全量恢复1、全量备份全库RMAN> backup database plus archivelog delete input; //备份全库及控制⽂件、服务器参数⽂件与所有归档的重做⽇志,并删除旧的归档⽇志
2、备份表空间这⾥也可以改为备份某个表空间,⽐如 back tablespace users;就是备份users的表空间RMAN> backup tablespace system plus archivelog delete input; //备份指定表空间及归档的重做⽇志,并删除旧的归档⽇志
3、备份归档⽇志RMAN> backup archivelog all delete input;
4、复制数据⽂件RMAN> copy datafile 1 to '/home/oracle/oracle_bak/bak/';说明⼀下,这⾥的数字1对应着命令report schema结果中的1
5、查看备份和⽂件副本RMAN> list backup;
查看复制⽂件RMAN> list copy6、验证备份RMAN> validate backupset 3;这⾥说明⼀下,3这个数字代表的是备份集的编号,可以在list backup命令的结果中查看7、从⾃动备份中恢复表空间如果只丢失了特定的表空间的数据⽂件,那么可以选择只恢复这个表空间,⽽不是恢复整个数据库,表空间恢复可以在不关闭数据库的情况下进⾏,只需要将需要恢复的表空间offline现在模拟某个表空间丢失或损坏$ cd /database/oracle/oracle/oradata/orcl$ mv users01_现在开始恢复表空间users01进⼊到rman$ rman target=sys/oracle@orcl使表空间脱机RMAN> sql 'alter tablespace users offline immediate';
还原表空间RMAN> restore tablespace users;
恢复表空间RMAN> recover tablespace users;
将表空间联机RMAN> sql 'alter tablespace users online';
8、恢复和复原全数据库模拟数据⽂件丢失或损坏$ cd /database/oracle/oracle/oradata/orcl$ mv system01_现在重新启动实例会报错
查看数据库当前状态SQL> select status from v$instance;登录到rman$ rman target=sys/oracle@orcl还原数据库RMAN> restore database;
恢复数据库RMAN> recover database;
打开数据库并登录数据库查看状态RMAN> alter database open;
SQL> select status from v$instance;
此时数据⽂件已恢复了9、某⼀个数据⽂件恢复查看系统当前的数据⽂件SQL> col file_name for a50SQL> select file_id,file_name,status from dba_data_files;
查看⽂件状态SQL> select file#,status from v$datafile;模拟删除⽂件$ mv sysaux01_将数据⽂件设置未offline状态SQL> alter database datafile 3 offline;
此时数据⽂件状态未recover
现在来恢复数据⽂件进⼊到rman$ rman target=sys/oracle@orcl还原和恢复数据⽂件RMAN> restore datafile 3;RMAN> recover datafile 3;将数据⽂件设置为online并查看状态SQL> alter database datafile 2 online;SQL> select file#,status form v$datafile;7、增量备份数据库及增量恢复本节从⼀个例⼦来说明增量恢复,⾸先在数据库表中插⼊⼀条数据
接着⽤rman做⼀次全量备份(设置的参数可参考上⾯的设置)RMAN> backup incremental level 0 database;
然后对数据库数据作更改,这⾥添加了⼀条数据
然后再做⼀次差异增量备份RMAN> backup incremental level 1 database;这⾥再添加⼀条数据
然后再进⾏⼀次备份然后再做⼀次差异增量备份RMAN> backup incremental level 1 database;这⾥使⽤了scn的恢复⽅式查看当前scnSQL> select dbms__system_change_number from dual;
然后对数据进⾏删除
还有⼀种常⽤的获取到scn的⽅式就是执⾏下⾯语句,将删除的时间转换为scnSQL> select timestamp_to_scn(to_timestamp('2011-08-03 10:00:00','YYYY-MM-DD HH:MI:SS')) from dual;然后我们现在来进⾏恢复关闭数据库实例,然后开启实例,单不打开数据库SQL> shutdown immediate;SQL> startup mount;还原数据到指定scn的位置RMAN> restore database until scn 2092046;恢复数据到指定scn的位置RMAN> recover database until scn 2092046;因为是不完全恢复(指定了某个位置),所以在打开数据库的命令要加上resetlogsSQL> alter database open resetlogs;然后再看看数据库,发现数据已经恢复了
如果需要基于时间点的恢复,可以参考⼀下(参考⽹上资料,没实践过)SQL> ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';SQL> shutdown immediate;SQL> startup mount;RMAN> restore database until time "to_date('2019-7-19 13:19:00','YYYY-MM-DD HH24:MI:SS')";RMAN> recover database until time "to_date('2019-7-19 13:19:00','YYYY-MM-DD HH24:MI:SS')";SQL> alter database open resetlogs;基于⽇志序列的恢复(参考⽹上资料,没实践过):SQL> shutdown immediate;SQL> startup mount;RMAN> restore database until SEQUENCE 100 thread 1; //100是⽇志序列RMAN> recover database until SEQUENCE 100 thread 1;SQL> alter database open resetlogs;⽇志序列查看命令:SQL>select * from v$log;其中有⼀个sequence字段.resetlogs就会把sequence 置为18、删除备份⽂件删除⽆效备份。⾸先执⾏CROSSCHECK命令核对备份集,如果发现备份⽆效(⽐如备份对应的数据⽂件损坏或丢失),RMAN会将该备份集标记为 EXPIRED状态。要删除相应的备份记录,可以执⾏DELETE EXPIRED BACKUP命令:RMAN> DELETE EXPIRED BACKUP;
删除EXPIRED副本,如下所⽰:RMAN> DELETE EXPIRED COPY;
删除特定备份集,如下所⽰:RMAN> DELETE BACKUPSET 19;
删除特定备份⽚,如下所⽰:RMAN> DELETE BACKUPPIECE 'd:/backup/DEMO_';
删除所有备份集,如下所⽰:RMAN> DELETE BACKUP;
删除特定映像副本,如下所⽰:RMAN> DELETE DATAFILE COPY 'd:/backup/DEMO_';
删除所有映像副本,如下所⽰:RMAN> DELETE COPY;
2、冷备冷备相对来说⽐较简单,基本原来就是⼿动将⽇志⽂件、数据⽂件、控制⽂件复制到备份的⽬录基本步骤是:shutdown数据库---> copy⽂件---> start数据库$ sqlplus sys/ as sysdbaSQL> shutdown immediate;SQL> exit;$ cd /database/oracle/oracle/oradata/orcl //数据库数据⽬录$ cp -p * /home/oracle/oracle_bak //复制所有⽂件及⽬录到备份⽬录下$ sqlplus sys/ as sysdbaSQL> startup;说明:*.dbf:数据⽂件*.ctl:控制⽂件*.log:⽇志⽂件3、使⽤归档模式热备说明:归档模式热备份的数据库是必须在归档模式下的(有点废话,但oracle默认安装是在⾮归档模式下)将数据库转换为归档模式(注意数据库必须已装载到此实例并且不在任何实例中打开):$ sqlplus / as sysdba //登录数据库SQL> shutdown immediate;SQL> startup mount;(startup nomount 启动实例;startup mount 启动实例加载数据库; startup 启动实例加载数据库打开数据库)SQL> alter database archivelog;⼀些归档的相关操作记录:SQL> archive log list;--查看是否出于归档模式;SQL> select name from v$archived_log; --查询归档⽇志(10G之后)SQL> alter database archivelog;SQL> alter database noarchivelog;(10G之前)SQL> archive log stop;SQL> archive log start;SQL> alter system set log_archive_start =true scope =spfile;SQL> alter system set log_achive_start=false scope=spfile;热备的步骤如下:SQL> shutdown immediate;SQL> startup mount;SQL> alter database archivelog;SQL> alter database open;SQL> alter tablespace users begin backup; --设置备份模式;$ cp -Rp oracle/ /home/oracle/oracle_bak/;--拷贝SQL> alter tablespace users end backup ;--结束备份状态SQL> alter system switch logfile--切换⽇志,使⽤当前⽇志归档四、数据库⽇常备份计划及脚本参考1、如果是使⽤RMAN备份计划可参考:1.星期天晚上:全备份2.星期⼀晚上:增量备份3.星期⼆晚上:增量备份4.星期三晚上:累积备份5.星期四晚上:增量备份6.星期五晚上:增量备份7.星期六晚上:增量备份如果星期⼆需要恢复的话,只需要1+2如果星期四需要恢复的话,只需要1+4如果星期五需要恢复的话,只需要1+4+5如果星期六需要恢复的话,只需要1+4+5+6如果需要⾃动备份,可使⽤备份脚本+crontab的⽅式执⾏执⾏脚本命令:rman target / msglog= cmdfile=bakl0 (/表⽰需要连接的⽬标数据库,msglog表⽰⽇志⽂件,cmdfile表⽰的是脚本⽂件)如:rman target sys/oracle@orcl msglog=/home/oracle/oracle_bak/ cmdfile=/home/oracle/oracle_bak脚本内容为:run{ allocate channel cha1 type disk; backup incremental level 0 format '/u01/rmanbak/inc0_%u_%T'(u表⽰唯⼀的ID,⼤T是⽇期,⼩t是时间) tag monday_inc0 //标签可以顺便起,没关系 database; release channel cha1; }改动以上的备份等级可弄出全量、增量、累积备份的脚本,然后使⽤crontab⾃动执⾏即可2、如果是使⽤备份脚本备份脚本内容如下:#!/bin/shexport ORACLE_BASE=/data/oracleexport ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1export ORACLE_SID=orclexport ORACLE_TERM=xtermexport PATH=$ORACLE_HOME/bin:/usr/sbin:$PATHexport LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/libexport LANG=Cexport NLS_LANG=AMERICAN_16GBK#以上代码为Oracle数据库运⾏账号oracle的系统环境变量设置,必须添加,否则crontab任务计划不能执⾏。# oracle⽤户的系统环境变量路径:/home/oracle/.bash_profiledate=date +%Y_%m_%d #获取系统当前⽇期时间days=7 #设置删除7天之前的备份⽂件orsid=192.168.0.198:1521/orcl #Oracle数据库服务器IP、端⼝、SIDorowner=OSYUNWEI #备份此⽤户下⾯的数据bakuser=OSYUNWEI #⽤此⽤户来执⾏备份,必须要有备份操作的权限bakpass=OSYUNWEI #执⾏备注的⽤户密码bakdir=/backup/oracledata #备份⽂件路径,需要提前创建好bakdata=$orowner"_"$ #备份数据库名称baklog=$orowner"_"$ #备份执⾏时候⽣成的⽇志⽂件名称ordatabak=$orowner"_"$ #最后保存的Oracle数据库备份⽂件cd $bakdir #进⼊备份⽬录mkdir -p $orowner #按需要备份的Oracle⽤户创建⽬录cd $orowner #进⼊⽬录exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$orowner/$bakdata log=$bakdir/$orowner/$baklog #执⾏备份tar -zcvf $ordatabak $bakdata $baklog #压缩备份⽂件和⽇志⽂件find $bakdir/$orowner -type f -name "*.log" -exec rm {} ; #删除备份⽂件find $bakdir/$orowner -type f -name "*.dmp" -exec rm {} ; #删除⽇志⽂件find $bakdir/$orowner -type f -name "*." -mtime +$days -exec rm -rf {} ; #删除7天前的备份(注意:{} 中间有空格)然后添加脚本执⾏权限:chmod +x /backup/oracledata/ #添加脚本执⾏权限然后将脚本添加⾄crontab执⾏计划即可
转⾃
发布者:admin,转转请注明出处:http://www.yc00.com/web/1690654676a387511.html
评论列表(0条)