zoukankan      html  css  js  c++  java
  • 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的连续性。

  • 相关阅读:
    dede图片横向滚动
    dede各种运用[转]
    PROFIBUS-DP现场总线的结构及应用
    51单片机的中断优先级及中断嵌套
    WPF里面制作圆角文本框
    【转】什么叫51单片机最小系统
    【转】(C#)OPC客户端源码
    路漫漫其修远兮,吾要上下左右前后而求索
    二叉树创建为什么用二级指针
    无向图的邻接表创建
  • 原文地址:https://www.cnblogs.com/lei2017/p/7841011.html
Copyright © 2011-2022 走看看