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用户删除已存在的用户名,该用户下的所有东西都被 ...
随机推荐
- Codeforces Round #877 (Div. 2) A-E
A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; bool solve() { int n; ...
- PostgreSQL 12 文档: 前言
前言 目录 1. 何为PostgreSQL? 2. PostgreSQL简史 2.1. 伯克利的POSTGRES项目 2.2. Postgres95 2.3. PostgreSQL 3. 约定 4. ...
- ASP.Net Core 项目部署
安装环境 部署环境有两种: .Net Core SDK 包含所有运行时和程序开发包,用于程序开发使用,体积相对较大. .Net Core Runtime 仅用于程序运行,不包含开发包,体积小. 注:部 ...
- BUUCTF-MISC-LSB(stegsolve的一种妙用)
题目已知是LSB隐写 丢入stegsolve,点 > ,可以看见Red plane 0,Green plane 0,Blue plane 0上边好像有东西 点analyse->data e ...
- [SDOI2008] 仪仗队【题解】
题目描述 作为体育委员,C 君负责这次运动会仪仗队的训练.仪仗队是由学生组成的 \(N \times N\) 的方阵,为了保证队伍在行进中整齐划一,C 君会跟在仪仗队的左后方,根据其视线所及的学生人数 ...
- C++与Java共同点
前言 首先我们来了解一下C++语言,大多人都C++语言是C语言基础上的改编,所以它拥有一个和C语言一样的类似结构,但是它与Java又有不可分割的关系 接下来我们来看几道题: 例如:常数O运行次数与N大 ...
- 微服务探索之路06篇k8s配置文件Yaml部署Redis使用Helm部署MongoDB和kafka
1 安装Redis 1.1创建配置文件redis.conf 切换到自己的目录下如本文是放在/home/ubuntu下 cd /home/ubuntu vim redis.conf bind 0.0.0 ...
- Llama2 论文中译版——开放式基础和微调聊天模型
Llama 2:开放式基础和微调聊天模型 写在前头 因为最近一直在使用 LLM 工具,所以在学习 Llama 2:开放式基础和微调聊天模型 这篇论文的期间,顺手将内容翻译了过来. 整片译文是由 Cha ...
- 用go语言和正则表达式写的linux危险命令拦截
需求如下: package main import "fmt" import "regexp" func main() { var s = "cat ...
- node:windows script host 錯誤 console未定义
错误背景 在开发npm包时,碰到此项报错 解决方案 选中任意js文件,选择打开方式,指定到node中即可