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用户删除已存在的用户名,该用户下的所有东西都被 ...
随机推荐
- MySQL 存储引擎 InnoDB 内存结构之缓冲池
缓冲池是主存储器中的一个区域,在访问 table 和索引数据时InnoDB会对其进行缓存.缓冲池允许直接从内存中访问频繁使用的数据,从而加快处理速度.在专用服务器上,通常将高达 80% 的物理内存分配 ...
- 聊天室(二)__ unipush 推送实现详细教程
一.推送作用 推送作用我就不废话了,能做推送的都知道作用,直接上干货. 二.unipush 快速开通 Dcloud 开发者实名认证注册账号,绑定对应的 app 信息. uni-push产品有2个入 ...
- [数据分析与可视化] 基于plottable库绘制精美表格
plottable是一个Python库,用于在matplotlib中绘制精美定制的图形表格.plottable的官方仓库地址为:plottable.本文主要参考其官方文档,plottable的官方文档 ...
- Nginx之数据流代理stream模块简介和使用 ---九五小庞
一.stream模块简介 stream模块一般用于TCP/UDP数据流的代理和负载均衡,通过stream模块我们可以代理转发tcp报文.ngx_stream_core_module模块从1.9.0 ...
- 支持typecho博客的黑白模式纪念日插件
插件说明 一个可以在指定日期让你的网站变成黑白模式的纪念日插件,以此来缅怀那些逝去的生命.我使用typecho博客系统,handsome主体,该插件完美适配. 设置效果 插件开启前,页面为彩色: 效果 ...
- 将mongodb注册成windows(win10)的服务
首先参考这个大佬的文章: 下载mongodb 然后解压 为了方便路径,我改了个名字MongoDB, 然后把它拖到了c盘的Program Files文件夹中 这样他的路径就是 (这个路径在很多地方都要用 ...
- std::queue 中遇到释放内存错误的问题
项目上有个需求要用到 std::queue 顺序处理消息事件 简单的示例如下: struct MyEvent { MyEvent() { event_ = CreateEvent(nullptr, 0 ...
- pandas 根据列的值选取所有行
原文链接:https://blog.csdn.net/changzoe/article/details/82348913 在其他论坛上看到的,原文链接如上所示.为方便记忆,原文如下所示: 选取等于某些 ...
- Django: 'block' tag with name 'header' appears more than once
错误原因 在同一文件中,重复引用标签多次 解决方案: 删掉重复的标签即可.
- 【Leaflet专题篇】L.tileLayer图层顺序问题
1 问题复现 使用L.tileLayer加载底图(A.B.C)并使用layerControl管理.在用L.tileLayer.wms添加wms服务(D),当切换ABC时会压盖D视频中右下角的wms服务 ...