Oracle数据库备份恢复

数据库备份

复制代码
热备份(expdp/impdp 导出/导入)
    通过expdp数据泵工具把老服务器数据导出到一个*.dmp文件中,然后在新服务器上通过impdp导入命令把dmp文件中的数据泵入到数据库中。
    优点:易学易用,上手快;支持增量导出、按用户或表导出部分数据
   
    可以通过PLSQL Developer客户端操作备份数据

冷备份
    先关闭数据库
    拷贝存储在磁盘中的关键数据库文件(/app/administrator/{admin,oradata,flash_recovery_area,product})
    
复制代码
回到顶部

数据库迁移

迁移的前提是需要新老服务器上oracle数据库的安装路径、版本、字符集相同。

复制代码
如出现老数据库的字符集和备份数据库的字符集不一样这种问题:

查看数据库的字符集:
    select userenv('language') from dual;
    查到老数据库是ZHS16GBK,而备份数据库是utf-8 
    
用以下命令修改备份数据库字符集:
    shutdown immediate;
    startup mount;
    alter system enable restricted session;
    alter system set job_queue_processes=0;
    alter system set aq_tm_processes=0;
    alter database open;
    alter database character set internal_use zhs16gbk;
    shutdown immediate;
    startup;

设置后导入成功!
还有注意一点就是建表空间和用户时要和生产库的表空间名称、数据文件名称、用户名、密码都要一致。
复制代码

 1、冷备份数据迁移方式

复制代码
1.关闭老服务器上的oracle服务
    (1) 用SQLPlus连接数据库:sqlplus 用户名/密码 as sysdba
    (2) 关闭DB :shutdown immediate;2.拷贝老数据库的数据文件
    拷贝老的数据库文件到新服务上的某个共享文件夹里拷贝如下文件夹:(一共4个)
    (1)/app/administrator/下的3个文件夹:
        admin;
        oradata(datafile, controlfile,redo【注:数据文件, 控制文件,redo】);
        flash_recovery_area
    (2)/app/administrator/product/11.2.0/dbhome_1/下database文件夹;
3.关闭新服务器上的oracle服务
    操作同第1步
4.在新服务器上恢复数据库
    将第2步中拷出来的文件,覆盖到本机上对应的路径
5.启动新服务器上的oracle服务
  sqlplus / as sysdba
  startup;
6.测试与启用 用plsql工具连接新的服务器,连接正常,数据正常 用门诊工作站程序连接新服务器,登录正常,操作正常 修改IP地址,把新老服务器的IP互换一下。完成切换。
复制代码

2、热备份数据迁移方式

数据导出

复制代码
导出表结构
   PLSQL Developer客户端-->工具-->导出用户对象 -->选择用户-->选中所有表-->选择存放目录和文件名 .sql格式
     
     

导出表数据
   PLSQL Developer-->工具-->导出表 -->选择用户-->选中所有表-->选择导出程序exp.exe-->选择导出目录,文件名.dmp格式
      

  注:exp.exe以及imp.exe 可执行文件,需要安装oracle客户端完整版才有(win64_11gR2_client)

    下载地址:https://www.oracle.com/cn/database/technologies/microsoft-windows.html 

复制代码

数据导入

复制代码
导入表结构
  PLSQL Developer客户端-->工具-->导入表-->选SQL插入-->选择执行程序sqlplus.exe-->选择之前导出的数据文件名 .sql格式
      
导入表数据
  PLSQL Developer-->工具-->导入表 -->选Oracle导入-->选中所有表-->选择导出程序exp.exe-->选择导出目录,文件名.dmp格式
      

 导入成功后,数据就到了新数据库中,迁移完成。

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的区别exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。expdp和impdp是服务端的工具程序,他们只能在oracle服务端使用,不能在客户端使用。imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。对于10g以上的服务器,使用exp通常不能导出0行数据的空表,而此时必须使用expdp导出。
主要讲解的是expdp/impdp的用法,不涉及到exp和imp
2、导出数据在准备要备份的数据库服务器上创建备份目录(在后面使用sql命令创建的逻辑目录并不是在OS上创建目录,所以我们先要在服务器上创建一个目录)
su oracle$ mkdir /home/oracle/oracle_bak12用管理员身份登录到sqlplus
$ sqlplys /nologSQL> conn sys/oracle as sysdba12创建逻辑目录
SQL> create directory data_dir as ‘/home/oracle/oracle_bak’;1查看管理员目录是否存在
SQL> select * from dba_direcories;1使用管理员用户给指定的用户赋予在该目录的操作权限(比如该用户需要备份自己的数据)
SQL> grant read,write on directory data_dir to C##BAK_TEST_USER;1导出可有五种方式1、“full=y”,全量导出数据库
$ expdp sys/oracle@orcl dumpfile=expdp.dmp directory=data_dir full=y logfile=expdp.log12、schemas按用户导出
$ expdp user/passwd@orcl schemas=user dumpfile=expdp.dmp directory=data_dir logfile=expdp.log13、按表空间导出
$ expdp sys/passwd@orcl tablespace=tbs1,tbs2 dumpfile=expdp.dmp directory=data_dir logfile=expdp.log14、导出表
$ expdp user/passwd@orcl tables=table1,table2 dumpfile=expdp.dmp directory=data_dir logfile=expdp.log15、按查询条件导出
$ expdp user/passwd@orcl tables=table1=‘where number=1234’ dumpfile=expdp.dmp directory=data_dir logfile=expdp.log12、导入数据首先将需要导入的数据文件存放导需要导入的数据库服务器上
参照导出的时候的建立目录方式建立物理目录和逻辑目录(只是建目录即可,如果需要给用户权限则加上给用户权限的那步)
使用命令导入,同时,导入方式也可以分为五种,分别对应着导出的五种方式
1、“full=y”,全量导入数据库;
impdp user/passwd directory=data_dir dumpfile=expdp.dmp full=y12、同名用户导入,从用户A导入到用户A;
impdp A/passwd schemas=A directory=data_dir dumpfile=expdp.dmp logfile=impdp.log;13、①从A用户中把表table1和table2导入到B用户中;
impdp B/passwdtables=A.table1,A.table2 remap_schema=A:B directory=data_dir dumpfile=expdp.dmp logfile=impdp.log;1②将表空间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:ndirectory=data_dir dumpfile=expdp.dmp logfile=impdp.log124、导入表空间;
impdp sys/passwd tablespaces=tbs1 directory=data_dir dumpfile=expdp.dmp logfile=impdp.log15、追加数据;
impdp sys/passwd directory=data_dir dumpfile=expdp.dmp schemas=system table_exists_action=replace logfile=impdp.log;–table_exists_action:导入对象已存在时执行的操作。有效关键字:SKIP,APPEND,REPLACE和TRUNCATE123、并行操作
可以通过 PARALLEL 参数为导出使用一个以上的线程来显著地加速作业。每个线程创建一个单独的转储文件,因此参数 dumpfile 应当拥有和并行度一样多的项目。您可以指定通配符作为文件名,而不是显式地输入各个文件名,例如:
expdp ananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export1注意:dumpfile 参数拥有一个通配符 %U,它指示文件将按需要创建,格式将为expCASES_nn.dmp,其中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 s.saddr = d.saddr;1这条指令显示前台进程的会话。更多有用的信息可以从警报日志中获得。当进程启动时,MCP 和工作进程在警报日志中显示如下:
kupprdp:master process DM00 started with pid=23, OS id=20530 to execute - SYS.KUPMM C P . M A I N ( ′ C A S E S E X P O R T ′ , ′ A N A N D A ′ ) ; k u p p r d p : w o r k e r p r o c e s s D W 01 s t a r t e d w i t h w o r k e r i d = 1 , p i d = 24 , O S i d = 20532 t o e x e c u t e − S Y S . K U P W MCP.MAIN('CASES_EXPORT', 'ANANDA'); kupprdp:worker process DW01 started with worker id=1, pid=24, OS id=20532 to execute - SYS.KUPWMCP.MAIN( ′ CASES E​ XPORT ′ , ′ ANANDA ′ );kupprdp:workerprocessDW01startedwithworkerid=1,pid=24,OSid=20532toexecute−SYS.KUPWWORKER.MAIN(‘CASES_EXPORT’, ‘ANANDA’); kupprdp:worker process DW03 started with worker id=2, pid=25, OS id=20534 to execute - SYS.KUPW$WORKER.MAIN(‘CASES_EXPORT’, ‘ANANDA’);123456789101112它显示为数据泵操作启动的会话的 PID。您可以用以下查询找到实际的 SID:
select sid, program from vs e s s i o n w h e r e p a d d r i n ( s e l e c t a d d r f r o m v session where paddr in (select addr from vsessionwherepaddrin(selectaddrfromvprocess where pid in (23,24,25));1PROGRAM 列将对应警报日志文件中的名称显示进程 DM (为主进程)或 DW (为工作进程)。如果一个工作进程使用了并行查询,比如说 SID 23,您可以在视图 V$PX_SESSION 中看到它,并把它找出来。它将为您显示从 SID 23 代表的工作进程中运行的所有并行查询会话:
select sid from v$px_session where qcsid = 23;1从视图 V$SESSION_LONGOPS中可以获得其它的有用信息来预测完成作业将花费的时间。
select sid, serial#, sofar, totalwork from v$session_longops where opname = ‘CASES_EXPORT’ and sofar != totalwork;1列 totalwork 显示总工作量,该列的 sofar 数量被加和到当前的时刻 — 因而您可以用它来估计还要花多长时间。4、不同版本数据库之间数据互导
如将11g数据库的数据导入导10g数据库的服务器上首先在11g服务器上导出
EXPDP USERID=‘SYS/cuc2009@cuc as sysdba’ schemas=sybj directory=DATA_PUMP_DIR dumpfile=aa.dmp logfile=aa.log version=10.2.0.1.01然后在10g数据库服务器上导入
IMPDP USERID=‘SYS/cuc2009@cucf as sysdba’ schemas=sybj directory=DATA_PUMP_DIR dumpfile=aa.dmp logfile=aa.log version=10.2.0.1.01三、物理备份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 //退出1234567892、启动并连接到rman(恢复管理器)
可以开个专门用于备份的用户,不过这里使用了sys用户
$ rman target=sys/oracle@orcl
3、基本设置具体路径可自己安装需求改,但是登录的用户需要对备份的目录有读写权限,目录建立方法可参考上面逻辑备份的备份目录建立
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/system.copy’;在这里插入图片描述
说明一下,这里的数字1对应着命令report schema结果中的1在这里插入图片描述
5、查看备份和文件副本
RMAN> list backup;在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
查看复制文件
RMAN> list copy在这里插入图片描述
6、验证备份
RMAN> validate backupset 3;在这里插入图片描述
这里说明一下,3这个数字代表的是备份集的编号,可以在list backup命令的结果中查看在这里插入图片描述
7、从自动备份中恢复表空间如果只丢失了特定的表空间的数据文件,那么可以选择只恢复这个表空间,而不是恢复整个数据库,表空间恢复可以在不关闭数据库的情况下进行,只需要将需要恢复的表空间offline
现在模拟某个表空间丢失或损坏
$ cd /database/oracle/oracle/oradata/orcl$ mv users01.dbf users01_bak.dbf
现在开始恢复表空间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.dbf system01_bak.dbf
现在重新启动实例会报错
查看数据库当前状态
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.dbf sysaux01_bak.dbf
将数据文件设置未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的恢复方式查看当前scn
SQL> select dbms_flashback.get_system_change_number from dual;在这里插入图片描述
然后对数据进行删除在这里插入图片描述
还有一种常用的获取到scn的方式就是执行下面语句,将删除的时间转换为scn
SQL> 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;
因为是不完全恢复(指定了某个位置),所以在打开数据库的命令要加上resetlogs
SQL> 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 置为1
8、删除备份文件删除无效备份。首先执行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_19.bak’;
删除所有备份集,如下所示:
RMAN> DELETE BACKUP;
删除特定映像副本,如下所示:
RMAN> DELETE DATAFILE COPY ‘d:/backup/DEMO_19.bak’;
删除所有映像副本,如下所示:
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=bakl0.log cmdfile=bakl0 (/表示需要连接的目标数据库,msglog表示日志文件,cmdfile表示的是脚本文件)如:rman target sys/oracle@orcl msglog=/home/oracle/oracle_bak/bakl1.log cmdfile=/home/oracle/oracle_bak
脚本内容为:
run{allocate channel cha1 type disk;backupincremental level 0format ‘/u01/rmanbak/inc0_%u_%T’(u表示唯一的ID,大T是日期,小t是时间)tag monday_inc0 //标签可以顺便起,没关系database;release channel cha1;}
改动以上的备份等级可弄出全量、增量、累积备份的脚本,然后使用crontab自动执行即可2、如果是使用备份脚本
备份脚本内容如下:
#!/bin/sh
export ORACLE_BASE=/data/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export ORACLE_TERM=xterm
export PATH=O R A C L E H O M E / b i n : / u s r / s b i n : ORACLE_HOME/bin:/usr/sbin:ORACLEH​OME/bin:/usr/sbin:PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LANG=C
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
#以上代码为Oracle数据库运行账号oracle的系统环境变量设置,必须添加,否则crontab任务计划不能执行。
oracle用户的系统环境变量路径:/home/oracle/.bash_profiledate=date +%Y_%m_%d #获取系统当前日期时间
days=7 #设置删除7天之前的备份文件
orsid=192.168.0.198:1521/orcl #Oracle数据库服务器IP、端口、SID
orowner=OSYUNWEI #备份此用户下面的数据
bakuser=OSYUNWEI #用此用户来执行备份,必须要有备份操作的权限
bakpass=OSYUNWEI #执行备注的用户密码
bakdir=/backup/oracledata #备份文件路径,需要提前创建好
bakdata=o r o w n e r " " orowner"_“orowner”"​date.dmp #备份数据库名称
baklog=o r o w n e r " " orowner"_“orowner”"​date.log #备份执行时候生成的日志文件名称
ordatabak=o r o w n e r " " orowner"_“orowner”"​date.tar.gz #最后保存的Oracle数据库备份文件
cd $bakdir #进入备份目录
mkdir -p $orowner #按需要备份的Oracle用户创建目录
cd $orowner #进入目录
exp b a k u s e r / bakuser/bakuser/bakpass@o r s i d g r a n t s = y o w n e r = orsid grants=y owner=orsidgrants=yowner=orowner file=b a k d i r / bakdir/bakdir/orowner/b a k d a t a l o g = bakdata log=bakdatalog=bakdir/o r o w n e r / orowner/orowner/baklog #执行备份
tar -zcvf $ordatabak $bakdata $baklog #压缩备份文件和日志文件
find b a k d i r / bakdir/bakdir/orowner -type f -name “*.log” -exec rm {} ; #删除备份文件
find b a k d i r / bakdir/bakdir/orowner -type f -name “*.dmp” -exec rm {} ; #删除日志文件
find b a k d i r / bakdir/bakdir/orowner -type f -name “*.tar.gz” -mtime +$days -exec rm -rf {} ; #删除7天前的备份(注意:{} \中间有空格)
然后添加脚本执行权限:
chmod +x /backup/oracledata/ordatabak.sh #添加脚本执行权限
然后将脚本添加至crontab执行计划即可————————————————版权声明:本文为CSDN博主「lz_N_one」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/lz_N_one/article/details/126139352
posted on 2022-09-23 13:45  洞幺人生  阅读(900)  评论(0编辑  收藏  举报