oracle命令3 冷备份
用户管理的备份:
备份脚本要自己写;
备份哪些文件要自己选;
恢复时要复制那些文件自己判断;
恢复需要的日志,自己找;
备份,需要备份保存关键SCN信息的文件;
一次完成的备份包括:控制文件,数据文件,日志文件。
冷备份:
一致性关闭数据库后,对文件进行备份,通过操作系统命令直接拷贝 控制文件,数据文件,日志文件。 容易实现,操作简单,但是会影响正常使用。
热备份:
在数据库运行时,对文件进行备份,操作起来将冷备份复杂,不完全影响正常使用;
冷备份:
恢复时,会用永久丢失数据。 备份是关闭数据库,还原是也要关闭数据库。
手动创建备份目录:
# mkdir /u02
# chown -R oracle:onistall /u02
# cd /u02
# mkdir clobak
# mkdir hotbak
SQL> conn hr/hr
SQL> select * from tab; #查看有哪些表
SQL> drop table e purage; #删除e表
SQL> create table before_backup as select * from employees;
SQL> select * from tab; # 验证检查下
查看要备份的表的位置:
SQL> conn / as sysdba
Connected.
SQL> show user
USER is "SYS"
SQL> select name from v$datafile; # 查看数据文件在哪
NAME
-------------------------------------------------------------------------------
/data/oracle/oradata/orcl/system01.dbf
/data/oracle/oradata/orcl/sysaux01.dbf
/data/oracle/oradata/orcl/undotbs01.dbf
/data/oracle/oradata/orcl/users01.dbf
/data/oracle/oradata/orcl/example01.dbf
SQL>
SQL> select name from v$controlfile; # 查看控制文件在哪
NAME
--------------------------------------------------------
/data/oracle/oradata/orcl/control01.ctl
/data/oracle/flash_recovery_area/orcl/control02.ctl
SQL>
SQL> select member from v$logfile; # 查看日志文件在哪
MEMBER
---------------------------------------------------------
/data/oracle/oradata/orcl/redo03.log
/data/oracle/oradata/orcl/redo02.log
/data/oracle/oradata/orcl/redo01.log
SQL>
SQL> shutdown immediate # 一致性关闭数据库,会自动执行检查点
# cp 控制文件,数据文件,日志文件。
会有多个控制文件,不过文件都是一样的;
严谨些,就都复制;不严谨些,就只复制一个就行。
SQL> startup; #直接打开数据库
SQL> hr/hr
SQL> create table after_backup as select * from employees;
SQL> select * from tab;
模拟故障:
# rm -rf *.log
由于缓存原因,有时不会直接报错,因此直接重启数据库;
SQL> shutdown abort
SQL> startup;
提示报错;
只将备份的日志文件拷贝回来,open数据库还是会报错;如,备份日志文件中redo3只记录到6号,备份后,由于其他操作,日志文件已经记录到了 sequece 15,备份恢复回来的日志,从报错中可以看出,日志记录为6,7,8。 而数据块需要的是13,14,15 。 但是13,14,15已经删除,找不回来,所以只能还原到6,7,8 。(冷备份还原也需要先关掉数据库)
所以需要:
# cp 控制文件,数据文件,日志文件。 # 要把所有的控制文件,数据文件,日志文件都要拷贝回来,覆盖原来的文件。
SQL> startup;
SQL> hr/hr
SQL> select * from tab;
发现只有 beforte_backup 的表;
查看日志文件: sequence:6,7,8;
查看检查点: 883667, 发现数据库已经倒回到之前的状态;
冷备份,丢失极少数据:
开启归档,保存日志;
启用归档,三步骤:
1、一致性情况,并启动到mount;
2、修改为归档模式;保存日志的位置优先使用快速恢复区,这个是默认自动选择的。
3、启动数据库。
SQL> archive log list; # 查看归档
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 3
Current log sequence 5
SQL>
SQL> show parameter recover # 查看快速恢复区位置
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
db_recovery_file_dest string /data/oracle/flash_recovery_ar
ea
db_recovery_file_dest_size big integer 3882M
recovery_parallelism integer 0
SQL>
开启归档:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 764121088 bytes
Fixed Size 2217264 bytes
Variable Size 478153424 bytes
Database Buffers 281018368 bytes
Redo Buffers 2732032 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 3
Next log sequence to archive 5
Current log sequence 5
SQL>
SQL> select name from v$datafile
union all
select name from v$controlfile;
union all
select member from v$logfile;
NAME
---------------------------------------------
/data/oracle/oradata/orcl/system01.dbf
/data/oracle/oradata/orcl/sysaux01.dbf
/data/oracle/oradata/orcl/undotbs01.dbf
/data/oracle/oradata/orcl/users01.dbf
/data/oracle/oradata/orcl/example01.dbf
/data/oracle/oradata/orcl/control01.ctl
/data/oracle/flash_recovery_area/orcl/control02.ctl
7 rows selected.
备注: union all 合并两个或多个 SELECT 语句的结果集
可以用SQL语句直接生成拷贝命令:
SQL> select '!cp -v ' ||name|| '/u02/colbak' from v$datafile
union all
select '!cp -v ' ||name|| '/u02/colbak' from v$controlfile
union all
select '!cp -v ' ||member|| '/u02/colbak' from v$logfile;
'!CP-V'||NAME||'/U02/COLBAK'
--------------------------------------------------------------------------------
!cp -v /data/oracle/oradata/orcl/system01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/sysaux01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/undotbs01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/users01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/example01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/control01.ctl/u02/colbak
!cp -v /data/oracle/flash_recovery_area/orcl/control02.ctl/u02/colbak
!cp -v /data/oracle/oradata/orcl/redo03.log/u02/colbak
!cp -v /data/oracle/oradata/orcl/redo02.log/u02/colbak
!cp -v /data/oracle/oradata/orcl/redo01.log/u02/colbak
10 rows selected.
SQL>
写个冷备份脚本:
# su - oracle
$ vi colbak.sh
$ cat colbak.sh
sqlplus / as sysdba << eof
shutdown immediate
!cp -v /data/oracle/oradata/orcl/system01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/sysaux01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/undotbs01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/users01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/example01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/control01.ctl/u02/colbak
!cp -v /data/oracle/flash_recovery_area/orcl/control02.ctl/u02/colbak
!cp -v /data/oracle/oradata/orcl/redo03.log/u02/colbak
!cp -v /data/oracle/oradata/orcl/redo02.log/u02/colbak
!cp -v /data/oracle/oradata/orcl/redo01.log/u02/colbak
startup
exit
eof
$ chmod u+x colbak.sh
$./colbak.sh
可以看日志; alert_orcl.log
备注:
在shell命令中,格式为
命令 << EOF
内容段
EOF
将“内容段”整个作为命令的输入。其实,不一定要用EOF,只要是“内容段”中没有出现的字符串,都可以用来替代EOF,只是一个起始和结束的标志罢了。
这样连接scott时就不会提示密码问题了。
SQL> conn scott/oracle
ERROR:
ORA-28000: the account is locked
SQL> conn / as sysdba
Connected.
SQL> alter user scott account unlock;
User altered.
SQL> alter user scott identified by oracle; # 修改scott密码为oracle
User altered.
SQL> conn scott /oracle
Connected.
SQL> show user
USER is "SCOTT"
SQL> @check #执行sql后缀的文件
$ vi check.sql
$ cat check.sql
!echo "控制文件scn:"
select checkpoint_change# from v$datafile;
echo "数据文件scn:"
select checkpoint_change# from v$datafile_header;
!echo "日志文件scn:"
select group#,SEQUENCE#,FIRST_CHANGE# FIRST_TIME,NEXT_CHANGE# NEXT_TIME from v$log;
$conn / as sysdba
SQL> @check
再发起备份:
$./colbak.sh
SQL> create table after_backup as select * from employees;
模拟故障,删除前,做下日志切换,确保日志切换覆盖:
SQL> alter system switch logfile;
$ cd /u01/app/oracle/oradata/orcl #具体路径,根据查找的实际情况看
$ rm -rf *.log
SQL> shutdown abort
SQL> startup
出现报错;
仅复制丢失的redo,恢复还是会报错;
冷备的特点,停机一起备,停机一起恢复;
SQL> shutdown abort
只复制数据文件,不复制redo,不复制控制文件。
SQL> @check
检查点SCN:887386
数据文件SCN: 886766
说明数据文件老,因为数据文件是从备份拷贝过来的。
控制文件是新的,记录着数据库丢失日志文件时,数据库的检查点状态。
使用日志文件进行恢复:
SQL> recover database;
提示需要归档日志,自己找到了目录
输入: auto
数据库就能自己找,去恢复。进行一系列的恢复后,报错
redo01 记录的19号日志,被删除。 (online log 1 thread 1:"/u01/app/oracle/oradata/orcl/redo01.log")
但是,19号以前的日志,都存在。
命令数据库,对数据进行恢复时,恢复到18号日志即可。19号日志舍去,不再进行恢复。
SQL> recover database until cancel;
提示恢复1号日志;
输入:cancel
SQL> alter database open; 会报错;
SQL> alter database open resetlogs; #已resetlog打开数据库,当前SCN为0,保证SCN的连续性。
oracle命令3 冷备份的更多相关文章
- Oracle命令:授权-收回权限-角色
Oracle命令:授权-收回权限-角色 oracle grant 不论授予何种权限,每条授权(grant)语句总是由三部分组成: 1) 接受者部分是准备获得权限的一个或多个用户的列表. 2)关键字权限 ...
- Oracle命令行中显示:ORA-04076: 无效的 NEW 或 OLD 说明
Oracle命令行进行操作时可能出现"ORA-04076: 无效的 NEW 或 OLD 说明" 需要在条件语句中JOB前面添加“old.”即可(因为是在when条件里面,所以不用“ ...
- 给oracle命令的参数赋值
''' <summary> ''' 给oracle命令的参数赋值 ''' </summary> ''' <param name="cmd& ...
- Oracle命令类别
Oracle命令类别: 数据操纵语言:DML: select; insert; delete; update; merge. 数据定义语言:DDL: create; alter; drop; trun ...
- Linux下登录Oracle命令行时删除键^H解决方法
Linux下登录Oracle命令行时删除键^H解决方法 在linux服务器下登录oracle的控制台,如果输入错误,想用删除键删除时却不能删除,输出的是^H的字符. 方法 用如下的命令可以使删除键生效 ...
- oracle命令大全
内容包括三大项: 1.oracle基本操作语句 2.SQLServer基本操作语句 3.各种数据库连接方法 ******************************************* ...
- oracle数据库的冷备份
前言 冷备份是Oracle最简单的一种备份,所谓的冷备份指的就是在关闭数据库实例的情况下进行数据库备份操作的实现:然后使用操作系统实用工具或者第三方工具备份所有相关的数据库文件.能简单快速地备份.能简 ...
- oracle命令
oracle创建表空间: 1.如果在PL/SQL 等工具里打开的话,直接修改下面的代码中[斜体加粗部分]执行 2.确保路径存在,比如[D:\oracle\oradata\Oracle9i\]也就是你要 ...
- oracle命令识记
连接数据库 sqlplus /nolog; conn / as sysdba; set ORACLE_SID=实例名; 查看表结构命令 select table_name from user_tabl ...
- oracle 命令创建用户 、授权、数据库导入、导出
最近在使用oracle,经常要导入导出数据,命令很简单,却经常忘记,所以记下来.. drop user yfplss cascade;--登录system用户删除已存在的用户名,该用户下的所有东西都被 ...
随机推荐
- easyexce报错BeanMap$Generator
class net.sf.cglib.core.DebuggingClassWriter overrides final method visit 这两个报错都可以在一起解决,因为这是由于Jar包冲突 ...
- Linux系统运维之FastDFS集群部署
一.简介 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.FastDFS服务端有两个 ...
- C# 集合类 入门
什么是集合类? 集合类的位置在System.Collections.Generic命名空间中. 在我看来,集合类和大学里<数据结构>中所学的各种结构很像.集合类中包含Queue<T& ...
- Go 语言 context 都能做什么?
原文链接: Go 语言 context 都能做什么? 很多 Go 项目的源码,在读的过程中会发现一个很常见的参数 ctx,而且基本都是作为函数的第一个参数. 为什么要这么写呢?这个参数到底有什么用呢? ...
- 自己动手实现rpc框架(二) 实现集群间rpc通信
自己动手实现rpc框架(二) 实现集群间rpc通信 1. 集群间rpc通信 上一篇博客中MyRpc框架实现了基本的点对点rpc通信功能.而在这篇博客中我们需要实现MyRpc的集群间rpc通信功能. 自 ...
- CF961E Tufurama题解
我们维护一个存储下标数据的树状数组,先将 \(1\sim n\) 插入树状数组. 用 \(a\) 表示原数组,\(b\) 表示按照 \(a_i\) 排序后的数组. 我们从 \(1\) 开始统计,直到 ...
- ls 和 du显示文件大小不一样
查看当前文件系统的磁盘使用 df -k / Filesystem 1K-blocks Used Available Use% Mounted on /dev/nvme0n1p2 97844508 37 ...
- 实践分析丨AscendCL应用编译&运行案例
本文分享自华为云社区<AscendCL应用编译&运行问题案例>,作者: 昇腾CANN. AscendCL(Ascend Computing Language)是一套用于在昇腾平台上 ...
- 2021-7-12 VUE的过滤器使用
过滤器实例:转换首字母大写 <!DOCTYPE html> <html> <head> <title> </title> </head ...
- jmeter:内存溢出解决办法
使用jmeter执行性能测试,报错:java.lang.OutOfMemoryError: Java heap space 需要对jmeter的jvm进行调优.记录如下: 1. 问题记录及分析: 使用 ...