用户管理的备份:
备份脚本要自己写;
备份哪些文件要自己选;
恢复时要复制那些文件自己判断;
恢复需要的日志,自己找;

备份,需要备份保存关键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 冷备份的更多相关文章

  1. Oracle命令:授权-收回权限-角色

    Oracle命令:授权-收回权限-角色 oracle grant 不论授予何种权限,每条授权(grant)语句总是由三部分组成: 1) 接受者部分是准备获得权限的一个或多个用户的列表. 2)关键字权限 ...

  2. Oracle命令行中显示:ORA-04076: 无效的 NEW 或 OLD 说明

    Oracle命令行进行操作时可能出现"ORA-04076: 无效的 NEW 或 OLD 说明" 需要在条件语句中JOB前面添加“old.”即可(因为是在when条件里面,所以不用“ ...

  3. 给oracle命令的参数赋值

    ''' <summary>    '''   给oracle命令的参数赋值    ''' </summary>    ''' <param name="cmd& ...

  4. Oracle命令类别

    Oracle命令类别: 数据操纵语言:DML: select; insert; delete; update; merge. 数据定义语言:DDL: create; alter; drop; trun ...

  5. Linux下登录Oracle命令行时删除键^H解决方法

    Linux下登录Oracle命令行时删除键^H解决方法 在linux服务器下登录oracle的控制台,如果输入错误,想用删除键删除时却不能删除,输出的是^H的字符. 方法 用如下的命令可以使删除键生效 ...

  6. oracle命令大全

    内容包括三大项:    1.oracle基本操作语句 2.SQLServer基本操作语句 3.各种数据库连接方法 ******************************************* ...

  7. oracle数据库的冷备份

    前言 冷备份是Oracle最简单的一种备份,所谓的冷备份指的就是在关闭数据库实例的情况下进行数据库备份操作的实现:然后使用操作系统实用工具或者第三方工具备份所有相关的数据库文件.能简单快速地备份.能简 ...

  8. oracle命令

    oracle创建表空间: 1.如果在PL/SQL 等工具里打开的话,直接修改下面的代码中[斜体加粗部分]执行 2.确保路径存在,比如[D:\oracle\oradata\Oracle9i\]也就是你要 ...

  9. oracle命令识记

    连接数据库 sqlplus /nolog; conn / as sysdba; set ORACLE_SID=实例名; 查看表结构命令 select table_name from user_tabl ...

  10. oracle 命令创建用户 、授权、数据库导入、导出

    最近在使用oracle,经常要导入导出数据,命令很简单,却经常忘记,所以记下来.. drop user yfplss cascade;--登录system用户删除已存在的用户名,该用户下的所有东西都被 ...

随机推荐

  1. 【线上技术分享】即构&MobTech袤博移动游戏开发者全能进阶沙龙

    游戏行业的兴起与当前移动互联网用户碎片化.休闲化的生活特征密不可分,在用户旺盛的需求下,游戏行业迎来了绝佳的发展机遇,今年上半年已多款游戏DAU过亿. 市场的火爆也为游戏行业带来了异常激烈的竞争,加上 ...

  2. debezium同步postgresql数据至kafka

    0 实验环境 全部部署于本地虚拟机 debezium docker部署 postgresql.kafka本机部署 1 postgresql 1.1 配置 设置postgres密码为123 仿照exam ...

  3. 懒人的百宝箱「GitHub 热点速览」

    本周 GitHub Trending 除了 lazydocker 之外,还有多个 lazy 项目上线,比如大家熟悉的 lazyvim,可见,这个世界对懒人还是很友好的.除此之外,主打一个密码免输入,绕 ...

  4. 2023牛客暑期多校训练营2 DEFGHIK

    比赛链接 D 题解 知识点:贪心. 首先,因为第一个人喜欢吃的可能会被后面的人选中,因此直接选最喜欢吃的可能会浪费机会.所以,我们考虑先看后面的人怎么选,就是倒着贪心,我们考虑证明. 假设当前剩下的菜 ...

  5. mysql根据mysqlbinlog恢复找回被删除的数据库

    年初和朋友一起做了个项目,到现在还没收到钱呢,今天中午时候突然听说之前的数据库被攻击了,业务数据库全部被删除.看有没有什么办法恢复,要是恢复不了,肯定也别想拿钱了吧? README FOR RECOV ...

  6. HTTPS 是这样握手的

    HTTP协议默认是明文传输,存在一定的安全隐患,容易被中间人窃听和攻击,在 加密解决HTTP协议带来的安全问题 中提到使用哈希.对称加密.非对称加密等方式对数据加密,能解决数据安全的问题. 以上加密方 ...

  7. Linux第四章(80X86保护模式及其编程)

    80X86保护模式及其编程 80X86基础知识 保护模式内存管理 各种保护措施 中断和异常处理 任务管理 保护模式编程的初始化 一个简单的多任务内核 4.1 80X86系统寄存器和系统指令 为了协助处 ...

  8. WPF实现Element UI风格的日期时间选择器

    背景 业务开发过程中遇到一个日期范围选择的需求,和Element UI的DateTimePicker组件比较类似,由两个日历控件组成,联动选择起始时间和结束时间. 问题 WPF中提供了一个DatePi ...

  9. Unity UGUI的Image(图片)组件的介绍及使用

    UGUI的Image(图片)组件的介绍及使用 1. 什么是UGUI的Image(图片)组件? UGUI的Image(图片)组件是Unity引擎中的一种UI组件,用于显示2D图像.它提供了一种简单而灵活 ...

  10. 修改内置框架css 样式

    <style scoped> 1 <style scoped> 2 .info /deep/ .video{ // info 外层便签 /deep/ 可以理解为连接桥 .vid ...