学习资料

学习的笔记


第十八章 数据库的联机备份及备份的自动化

<p>[TOC]</p> <h2>十七章回顾</h2> <ul> <li>启动归档模式详情 <pre><code>archive log list show parameter log_archive_dest_ show parameter log_archive_min_succeed_dest show parameter log_archive_max_processes alter system switch logfile; alter system archive log current;</code></pre></li> </ul> <h2>联机备份的重要性和特点</h2> <ul> <li>表空间一级和数据文件一级的联机备份</li> <li>控制文件、重做日志文件、归档日志文件靠冗余来保护,不需要备份保护</li> </ul> <h2>联机备份步骤的演示</h2> <ul> <li> <p>创建表空间备份存放目录 根据数据文件的存放路径创建</p> <pre><code>/home/oracle/TBSBackup/disk1 /home/oracle/TBSBackup/disk2</code></pre> </li> <li> <p>备份数据文件,物理cp 选择12号没使用的表空间数据文件做试验</p> <pre><code>--查看数据文件备份情况 select * from v$backup; --查看数据文件对应的表空间,PIONEER_INDX file_id=12 select file_id,file_name,tablespace_name from dba_data_files; --先将该文件对应的表空间设置为备份状态 alter tablespace PIONEER_INDX begin backup; --确认文件已经设置为备份状态 select * from v$backup; --在数据文件备份状态下复制数据文件进行备份 SQL&gt; host cp /home/oracle/dbdata/disk2/orcl/PIONEER_INDX01.dbf /home/oracle/TBSBackup/disk2/orcl/ --物理文件cp完成,将表空间恢复为正常非备份状态 alter tablespace PIONEER_INDX end backup;</code></pre> </li> <li>查看重做日志交换情况 <pre><code>--显示最近的重做志信息 select * from v$log_history where sequence# &gt; 1520 ; select * from v$log; --执行日志交换即再产生一个记录 alter system archive log current; alter system switch logfile;</code></pre></li> </ul> <h2>联机备份步骤的解释</h2> <p>1.使用<code>dba_data_files</code>确认要备份的表空间和数据文件 2.使用<code>v$backup</code>数据字典确认数据文件是否备份状态 3.<code>alter tablespace PIONEER_INDX begin backup;</code>将要备份的表空间设置为备份状态 4.使用系统操作命令CP表空间对应的所有数据文件到备份磁介质上 5.用<code>alter tablespace PIONEER_INDX end backup;</code>结束表空间备份状态 6.<code>alter system switch logfile;</code>重做日志文件写到归档文件 7.使用<code>v$backup</code>确认数据文件备份状态 8.使用系统命令确认备份数据文件已经生成</p> <p><strong>备注</strong> 1.第三步命令数据文件文件头被冻结,产生检查点, 此时可能表空间查询,可对表空间DML写改,但是数据是在重做日志的。</p> <p><strong>问题</strong> 1.当表空间或者数据文件在备份状态,是否可以对表空间上的数据进行读操作? 2.当表空间或者数据文件在备份状态,是否可以对表空间上的数据进行DML操作?</p> <h3>联机备份注意点</h3> <ul> <li>重做日志缓冲区和重做日志文件适当加大</li> <li>在进行联机备份时,每次只备份一个表空间</li> <li>在DML操作最少的时间段进行联机备份</li> </ul> <h2>联机备份的其他问题</h2> <ul> <li> <p>只读表空间处理数据文件减少备份压力 在程序设计之初就规划好只读表宰 <code>alter tablespace "表空间名" read only;</code></p> </li> <li>数据文件在进行物理备份时被意外终止 在mount状态结束数据文件的备份状态 <code>alter database datafile "对应数据文件" end backup;</code></li> </ul> <h2>联机备份的应用实例</h2> <h3>对所有的表空间进行联机备份</h3> <ul> <li> <p>查看状态</p> <pre><code>select * from v$backup; select file_id,file_name,tablespace_name from dba_data_files;</code></pre> </li> <li> <p>备份路径</p> <pre><code>/home/oracle/dbdata/disk1/orcl /home/oracle/TBSBackup/disk1/orcl /home/oracle/dbdata/disk2/orcl /home/oracle/TBSBackup/disk2/orcl</code></pre> </li> <li>备份脚本hotbackup.sql</li> </ul> <pre><code>connect system/system as sysdba alter system archive log start; alter tablespace USERS begin backup; host cp /home/oracle/dbdata/disk2/orcl/users01.dbf /home/oracle/TBSBackup/disk2/orcl alter tablespace USERS end backup; alter system switch logfile; alter tablespace UNDOTBS1 begin backup; host cp /home/oracle/dbdata/disk1/orcl/undotbs01.dbf /home/oracle/TBSBackup/disk1/orcl alter tablespace UNDOTBS1 end backup; alter system switch logfile; alter tablespace TS_DATA begin backup; host cp /home/oracle/dbdata/disk2/orcl/ts_data01.dbf /home/oracle/TBSBackup/disk2/orcl alter tablespace TS_DATA end backup; alter system switch logfile; alter tablespace INDX begin backup; host cp /home/oracle/dbdata/disk2/orcl/indx02.dbf /home/oracle/TBSBackup/disk2/orcl alter tablespace INDX end backup; alter system switch logfile; alter tablespace TBS01 begin backup; host cp /home/oracle/dbdata/disk2/orcl/tbs02.dbf /home/oracle/TBSBackup/disk2/orcl host cp /home/oracle/dbdata/disk2/orcl/tbs01.dbf /home/oracle/TBSBackup/disk2/orcl alter tablespace TBS01 end backup; alter system switch logfile; alter tablespace SYSTEM begin backup; host cp /home/oracle/dbdata/disk1/orcl/system02.dbf /home/oracle/TBSBackup/disk1/orcl host cp /home/oracle/dbdata/disk1/orcl/system01.dbf /home/oracle/TBSBackup/disk1/orcl alter tablespace SYSTEM end backup; alter system switch logfile; alter tablespace SYSAUX begin backup; host cp /home/oracle/dbdata/disk1/orcl/sysaux01.dbf /home/oracle/TBSBackup/disk1/orcl alter tablespace SYSAUX end backup; alter system switch logfile; alter tablespace PIONEER_INDX begin backup; host cp /home/oracle/dbdata/disk2/orcl/PIONEER_INDX01.dbf /home/oracle/TBSBackup/disk2/orcl alter tablespace PIONEER_INDX end backup; alter system switch logfile; alter tablespace PIONEER_DATA begin backup; host cp /home/oracle/dbdata/disk2/orcl/PIONEER_DATA01.dbf /home/oracle/TBSBackup/disk2/orcl alter tablespace PIONEER_DATA end backup; alter system switch logfile;</code></pre> <ul> <li>执行脚本、检查 <pre><code>SQL&gt; @/home/oracle/script/hotbackup.sql select * from v$backup; --再检查物理文件</code></pre></li> </ul> <h2>备份操作自动化的实例</h2> <ul> <li>做一个bat文件或者sh文件,调用之前的sql文件</li> </ul> <h2>恢复管理器简介(rman)</h2> <ul> <li>rman的优点</li> <li>映像拷贝、备份集概念</li> <li>完全备份</li> <li>增量备份</li> <li>差异备份</li> <li>累积增量备份</li> </ul> <h2>快速增量备份</h2> <ul> <li>开启快速增量备份功能(块更改追踪功能) <pre><code>-- 查看块更改追踪状态 select filename,status,bytes from v$block_change_tracking; alter database enable block change tracking using file '/home/oracle/backup/database/rman_change_track.f' reuse; --更改追踪写进程(CTWR)的相关信息 select pid,username,program from v$process where background='1' and program like '%CT%' ;</code></pre></li> </ul> <h2>配置快速恢复区</h2> <ul> <li> <p>快速恢复区是在硬盘上,存储归档日志、备份、闪回日志、冗余的控制文件和冗余的重做日志文件</p> </li> <li>设置快速恢复区 <pre><code>SQL&gt; show parameter db_recovery_ alter system set db_recovery_file_dest_size='8G'; alter system set db_recovery_file_dest='/home/oracle/backup/FRA' scope=spfile; shutdown immediate startup SQL&gt; show parameter db_recovery_</code></pre></li> </ul> <h2>使用RMAN备份和恢复ORACLE数据库</h2> <pre><code>--登录rman $: rman target / --显示所有配置参数 rman&gt; show all; --冷备份整个数据库,包括归档日志文件 --报错,因为我删除了/u01/app/oracle/product/12.2.0/db_1/dbs这个路径下旧的归档文件 RMAN&gt; backup database plus archivelog; Starting backup at 2021-07-24 18:02:39 current log archived allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=55 device type=DISK RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of backup plus archivelog command at 07/24/2021 18:02:40 RMAN-06059: expected archived log not found, loss of archived log compromises recoverability ORA-19625: error identifying file /u01/app/oracle/product/12.2.0/db_1/dbs/arch1_1432_1048239854.dbf ORA-27037: unable to obtain file status Linux-x86_64 Error: 2: No such file or directory Additional information: 7 --检查控制文件和实际物理文件的差别,如果一些归档日志已经删除或丢失,那么设置它们为expired。 crosscheck archivelog all; --同步控制文件的信息和实际物理文件的信息(it will delete expired archivelog and updates your controlfile)。 delete expired archivelog all; --冷备份成功 RMAN&gt; backup database plus archivelog; --快速恢复区(信息存放在如下路径) /home/oracle/backup/FRA --尝试恢复以上的备份 select * from dba_tablespaces ; PIONEER_DATA; select * from dba_users where username='PJINLIAN'; PIONEER_DATA select * from dba_tables where owner='PJINLIAN'; --以上确认PJINLIAN.SALES表存放PIONEER_DATA表空间 select * from pjinlian.SALES; --删除pjinlian.SALES表 drop table pjinlian.sales ; RMAN&gt; SQL 'alter tablespace PIONEER_DATA offline immediate'; SQL&gt; select tablespace_name,status from dba_tablespaces; RMAN&gt; restore tablespace PIONEER_DATA; RMAN&gt; recover tablespace PIONEER_DATA; RMAN&gt; SQL 'alter tablespace PIONEER_DATA online'; --数据恢复向导,收集所有错误信息 RMAN&gt; list failure all;</code></pre>

页面列表

ITEM_HTML