Oracle冷备份及其恢复
一、 冷备份的概念#
冷备份是指在数据库关闭状态下所做的物理拷贝,也称脱机备份。
适合于非归档模式下的备份,而且也只能采用这种方式备份。
二、 需要备份的文件#
必须备份的文件:#
数据文件和控制文件
可以备份的文件:
重做日志文件、临时文件、二进制参数文件(spfile)、口令文件
三、 冷备份的步骤#
1. 找到所需要的备份文件
2. 正常关闭数据库
3. 备份文件到指定的备份路径下
4. 重新启动数据库
四、 冷脚本的写法#
4.1 查看文件位置及状态#
--查看实例和数据库的相关信息
SQL> select instance_name,version,status,archiver,database_status from v$instance; INSTANCE_NAME VERSION STATUS ARCHIVE DATABASE_STATUS ---------------- ----------------- ------------ ------- ----------------- dbsrv1 11.2.0.1.0 OPEN STOPPED ACTIVE
SQL> select dbid,name,log_mode from v$database; DBID NAME LOG_MODE ---------- --------- ------------ 294555525 DBSRV1 NOARCHIVELOG
--查看数据文件及状态信息
SQL> col file_name for a50 SQL> col tablespace_name for a15 SQL> select file_name,tablespace_name,status,online_status from dba_data_files; FILE_NAME TABLESPACE_NAME STATUS ONLINE_ -------------------------------------------------- --------------- --------- ------- /opt/oracle/app/oradata/dbsrv1/users01.dbf USERS AVAILABLE ONLINE /opt/oracle/app/oradata/dbsrv1/undotbs01.dbf UNDOTBS1 AVAILABLE ONLINE /opt/oracle/app/oradata/dbsrv1/sysaux01.dbf SYSAUX AVAILABLE ONLINE /opt/oracle/app/oradata/dbsrv1/system01.dbf SYSTEM AVAILABLE SYSTEM /opt/oracle/app/oradata/costctl/COSTCTL_TBS.dbf COSTCTL_TBS AVAILABLE ONLINE /opt/oracle/app/oradata/dbsrv1/DEV_DATA.DBF DEV_DATA AVAILABLE ONLINE /opt/oracle/app/oradata/pdms/PDMS_DATA.dbf PDMS_DATA AVAILABLE ONLINE
查看数据文件
SQL> col name for a50 SQL> select file#, name, status from v$datafile; FILE# NAME STATUS ---------- -------------------------------------------------- ------- 1 /opt/oracle/app/oradata/dbsrv1/system01.dbf SYSTEM 2 /opt/oracle/app/oradata/dbsrv1/sysaux01.dbf ONLINE 3 /opt/oracle/app/oradata/dbsrv1/undotbs01.dbf ONLINE 4 /opt/oracle/app/oradata/dbsrv1/users01.dbf ONLINE 5 /opt/oracle/app/oradata/costctl/COSTCTL_TBS.dbf ONLINE 6 /opt/oracle/app/oradata/dbsrv1/DEV_DATA.DBF ONLINE 7 /opt/oracle/app/oradata/pdms/PDMS_DATA.dbf ONLINE
--查看临时文件
SQL> col name for a60 SQL> select name from v$tempfile; NAME ------------------------------------------------------------ /opt/oracle/app/oradata/dbsrv1/temp01.dbf /opt/oracle/app/oradata/costctl/COSTCTL_TBS_temp.dbf /opt/oracle/app/oradata/pdms/PDMS_DATA_TEMP.dbf
--查看日志文件
SQL> select member from v$logfile; MEMBER -------------------------------------------------- /opt/oracle/app/oradata/dbsrv1/redo03.log /opt/oracle/app/oradata/dbsrv1/redo02.log /opt/oracle/app/oradata/dbsrv1/redo01.log
--查看控制文件
SQL> select name from v$controlfile; NAME ------------------------------------------------------------ /opt/oracle/app/oradata/dbsrv1/control01.ctl /opt/oracle/app/flash_recovery_area/dbsrv1/control02.ctl
--查看参数文件
SQL> show parameter pfile NAME TYPE VALUE ------------------------------------ ---------- ------------------------------ spfile string /opt/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/spfiledbsrv1.ora
4.2 进行备份#
方案一、#
--创建备份目录
SQL> ho mkdir -p /u03/backup/coolbak
--使用连接符生成复制文件命令
SQL> select 'ho cp' ||name|| '/u03/backup/coolbak' from v$controlfile; 'HOCP'||NAME||'/U03/BACKUP/COOLBAK' -------------------------------------------------------------------------------- ho cp/opt/oracle/app/oradata/dbsrv1/control01.ctl/u03/backup/coolbak ho cp/opt/oracle/app/flash_recovery_area/dbsrv1/control02.ctl/u03/backup/coolbak
SQL> save /tmp/tmpbak.sql; --将上面的输入保存为tmpbak.sql Created file /tmp/tmpbak.sql
编辑coolbak.sql
注意修改密码文件的位置和pfile的名字
set feedback off set heading off set verify off set trimspool off set pagesize 0 set linesize 200 define dir = '/u03/backup/coolbak' define script = '/u03/backup/coolbak.txt' define passwd = '/u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl' spool &script select 'ho cp -pv ' || name || ' &dir' from v$controlfile union all select 'ho cp -pv ' || name || ' &dir' from v$datafile union all select 'ho cp -pv ' || member || ' &dir' from v$logfile union all select 'ho cp -pv ' || name || ' &dir' from v$tempfile / create pfile = '&dir/initorcl.ora' from spfile; ho cp -pv &passwd &dir spool off shutdown immediate ho mkdir -pv /u03/backup/coolbak ho rm -rf /u03/backup/coolbak/* start &script startup
--执行coolbak.sql
SQL> @/tmp/coolbak.sql;
--执行过程及数据库启动略
--启动后查看备份的文件
需要注意的是这种方式不利于恢复,得去寻找恢复的目录最好在cool后建立与数据库相同的目录。
冷恢复的步骤#
脱机恢复到原来位置的步骤:#
1. 如果数据库没有关闭,需关闭数据库
2. 将所有的备份数据文件和备份控制文件复制到数据库原来的位置
3. 也可以将其它所有的备份文件复制到数据库原来的位置(该操作不是必须的)
4. 重启数据库
恢复成功后,数据库即恢复到上一次的备份,恢复所需要的时间就是复制文件所需要的时间
脱机恢复到非原来位置的步骤:#
有时候储存数据文件的磁盘坏了,可能需要改变数据文件的恢复位置
1. 将备份文件恢复到正常的磁盘上
2. 将数据库加载为mount状态(startup mount)
3. alter database rename file 'u01/xxx.DBF' to 'u02/xxx.DBF' (u01磁盘损坏)
4. alter database open
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了