精华内容
下载资源
问答
  • 备份恢复2——备份恢复结构*

    千次阅读 2012-05-04 07:16:28
    1、备份恢复结构: 当执行备份恢复操作时,经常需要提供数据文件的动态信息,为了获得数据文件的动态信息,可以产销动态性能视图:v$datafile和v$datafile_header。 其中 v$datafile 的动态信息来自于控制文件; ...

    1、备份恢复结构:

    当执行备份恢复操作时,经常需要提供数据文件的动态信息,为了获得数据文件的动态信息,可以产销动态性能视图:v$datafilev$datafile_header

    其中 v$datafile 的动态信息来自于控制文件

    v$datafile_header 的动态信息来自于数据文件的头部。在数据库正常运行的情况下,这两个动态性能视图的检查点scn的值是一致的,但是如果数据文件出新损坏,并且转储了数据文件备份,那么v$datafile_header可以确定应用重做的起始scn值,而v$datafile 可以确定应用重做的结束scn值

    看下面的示例:

              select  a.name , a.checkpoint_change# "起始scn值",b.checkpoint_change# "结束scn值"

     from v$datafile_header a , v$datafile b where a.file#=b.file# ;        


    单实例环境中,只有一个特定重做线程,在rac环境中,包含多个重做线程,每个重做线程至少包含两个日志组,通过查询动态性能视图 v$log可以显示重做线程的所有日志组信息。包括:日志组编号,日志成员个数,日志组状态,尺寸,日志序列

               select group#,members,sequence#,status,bytes,first_change# from v$log where thread#=1;


    查看当前数据库的信息:

               select dbid,name,log_mode,current_scn from v$database;

    dbid:用于描述数据库的唯一数值。

    name:描述当前数据库的名字。

    log_mode:用于描述日志的操作模式。

    current_scn:标识数据库的当前scn。



    查询日志组成员的信息:

               select member,status from v$logfile where group#=1;


    通过查询动态性能视图v$controlfile可以显示当前数据库的所有控制信息:

              select name from v$controlfile;


    查看归档日志信息:

    select name,first_change#,next_change# from v$archived_log where thread#=1;  

    (thread#意思是redo thread number 只有一个redo线程所以值都唯一)

    name:标识归档日志文件名。

    first_change#:归档日志起始scn。

    next_change#:本归档日志的结束scn,也是下一个归档日志文件的起始scn。


    2、备份控制文件:

    使用alter database backup controlfile to trace命令,oracle会将控制文件的信息,备份到服务器进程跟踪文件(trace file)中,如果控制文件一旦损坏,我们就可以用跟踪文件重建控制文件。


    控制文件多元化:

    一个视图:v$controlfile,一个参数:control_files


    配置实例恢复参数:

    fast_start_mttr_target:指定实例恢复的最大时间。通过它控制检查点checkpoint发生的频率。

    log_checkpoint_timeout:指定发出检查点的时间间隔,单位是秒。

    log_checkpoint_interval:用于指定发出检查点的重做日志块的间隔。单位是 操作系统数据块。


    上面这三个参数现在都主要用第一个,后两个是为了与早期版本保留的参数,一般现在不用了。操作:

    alter system set fast_start_mttr_target=1000;


    视图:v$instance_recovery:  可以监视实例恢复的动态信息,操作:

    select actual_redo_blks,target_redo_blks,estimated_mttr from v$instance_recovery;

    actual_redo_blks:用于标识当前情况下实例恢复需要的redo块个数。

    target_redo_blks:当前情况下实例恢复最多需要的redo块个数。

    estimated_mttr:用于标识实例恢复需要用的时间。


    降低实例恢复的时间:

    因为实例恢复主要是redo时间和undo时间,所以为了降低实例恢复的时间,应该调整redo和undo时间。

    redo的操作时由smon完成的,为了降低实例的恢复时间可以启动多个恢复进程,由初始化参数recovery_parallelism控制,修改后重启生效。

    alter system set recovery_parallelism=3 scope=spfile;


    undo也是由smon控制的,参数fast_start_parallel_rollback最大的平行回滚进程的数量,同个设置这个参数可以加快undo操作;

    fast_start_parallel_rollback的取值有三个,分别是false,low,high。取false表示不用parallel rollback;low表示2倍的cpu的个数,high表示4倍的cpu的个数。

    alter system set fast_start_parallel_rollback = high;


    动态性能视图:v$fast_start_servers   可以监视执行undo操作的进程信息。


    改变数据库日志归档的模式,只能在mount阶段进行,不能打开数据库具体操作如下:

    先关闭shutdown immediate——再挂载startup mount——改变日志操作模式alter database archivelog——打开数据库:alter database open。


    归档模式转变成archivelog的时候自动 启动ARCn进程,在10g之前要想自动启动ARCn进程,必须将参数log_archive_start设置为true。

    归档日志的名称格式:由静态初始化参数(设置后重启生效):log_archive_format确定,如:alter system set log_archive_format='%s_%t_%r.log' scope=spfile;


    具体什么意思呢?且听我慢慢说,首先要知道什么事匹配符,就是这几个%s, %t,%r 的东西,每个都有特定含义:

    %s——日志序列号;

    %S——日志序列号(带有前导0);

    %t——重做线程号;

    %T重做线程号(带有前导0);

    %a——活动id号;

    d%——数据库id号;

    r%——resetlogs的id值。


    如果LGWR进程切换了日志,那么归档日志就会接下来生成一个类似于22_1_5222517960.log的归档日志,其中22是日志序列号,1是重做线程号,522...0是resetlogs的编号。如果归档日志存放在快速恢复区,那么归档日志文件不会采用log_archive_format的格式。

    参数log_archive_dest_n:其中n表示1到10之间的数,用于指定归档日志的位置。不仅可以指定本地的,也可以指定远程的位置。

    操作:alte system set log_archive_dest_1='location=c:\demo\archive';——location关键词表示在本地设置。

                 alter system set log_archive_dest_2='location=d:\demo\archivcwe';

                alter system set log_archive_dest_3='service=standby';               ——service关键词表示在远程节点设置归档位置。


    参数:log_archive_dest_state_n:用于控制某个归档位置的可用性,默认值为enable,表示某位置可用,defer时表示末位置暂时不可用。

    参数:log_archive_max_processes:用于控制归档进程个数。当启用archivelog模式的时候,默认为两个,你可以自己改变为更少或者更多。

    参数:log_archive_min_succeed_dest:控制本地归档的最小成功个数,如:alter system set log_archive_min_succeed_dest=2;执行此句后,如果本地生成的归档日志少于两个,那么重做日志将不能被覆盖。


    操作:archive  log  list :显示日志操作模式,显示最后一个本地归档位置,还有当前日志序列号。

    操作:显示归档日志信息: select name,sequence#,first_change#  from v$archived_log; 

    name——日志文件名,frist_change#——日志起始scn。

    操作:显示归档日志位置:select dest_name,destination,status from v$archive_dest; 

    dest_name——归档位置参数名,destination——归档位置,如果是本地归档,显示操作系统目录,如果是远程归档,显示网络服务名,status——用于标识归档位置的状态。


    操作:select  thread# , sequence# , first_change#, first_time , switch_change# from v$loghist;  

    thread#——标识重做线程号,sequence#——日志序列号;first_change#——日志序列号对应的起始scn;first_time——用于标识起始scn发生的时间。switch_change#——标识日志切换时的scn值。


    操作:查看所有归档进程的信息:select process, status , log_sequence, stat  from v$archive_processes;

    process——标识所有ARCn进程的编号;status——标识ARCn进程的状态(active——活动,stoped——未启动;Possible values  are: STOPPEDSCHEDULEDSTARTINGACTIVESTOPPING, andTERMINATED.),log_sequence——用于标识正在进行归档的日志序列号;state——标识ARCn进程的工作状态( Possible keywords are IDLE or BUSY.)。

    展开全文
  • 首先我们得把老服务器上的Gitlab整体备份,使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份。 gitlab-rake gitlab:backup:create...

    首先进入到gitlab容器

    docker exec -it gitlab /bin/bash

    1、Gitlab 创建备份
    1.1 创建备份文件
    首先我们得把老服务器上的Gitlab整体备份,使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份。

    gitlab-rake gitlab:backup:create

    使用以上命令会在/var/opt/gitlab/backups目录下创建一个名称类似为1563430612_2019_07_18_11.0.4_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1563430612_2019_07_18_11.0.4是备份创建的日期

    /etc/gitlab/gitlab.rb 配置文件须备份
    /var/opt/gitlab/nginx/conf nginx配置文件
    /etc/postfix/main.cfpostfix 邮件配置备份

    生成完后,/var/opt/gitlab/backups目录创建一个名称类似为1563430612_2019_07_18_11.0.4_gitlab_backup.tar的压缩包

    1.1 更改Gitlab备份目录

    当然你也可以通过/etc/gitlab/gitlab.rb配置文件来修改默认存放备份文件的目录

    gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
    1
    /var/opt/gitlab/backups修改为你想存放备份的目录即可,例如下面代码将备份路径修改为/mnt/backups

    gitlab_rails['backup_path'] = '/mnt/backups'
    è¿éåå¾çæè¿°

    修改完成之后使用下面命令重载配置文件即可

    gitlab-ctl reconfigure

    1.2 Gitlab自动备份

    1.2.1 定时自动备份

    在crontab文件里面,每一行代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,每个字段之间用空格分割,没用的段用*代替,格式如下:

    1 m h dom mon dow user command
    其中:

    m: 表示分钟,可以是从0到59之间的任何整数。
    h:表示小时,可以是从0到23之间的任何整数。
    dom:表示日期,可以是从1到31之间的任何整数。
    mon:表示月份,可以是从1到12之间的任何整数。
    dow:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
    user : 表示执行的用户。
    command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件(如shell文件)。


    实现每天凌晨2点进行一次自动备份:通过crontab使用备份命令实现,需重启cron服务 
    方法1、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。

    #输入命令crontab -e
    sudo crontab -e  
    #输入相应的任务
    0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1  

    方法2、直接编辑/etc/crontab 文件,即vi /etc/crontab,然后添加相应的任务

    #编辑 /etc/crontab
    vi /etc/crontab 

    然后再编辑框内输入相应的任务

    # 添加定时任务,每天凌晨两点,执行gitlab备份
    0  2   * * *   root    /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1  

    或者直接定时执行一个脚本 auto_backup.sh ,脚本内容为

    /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

    然后再 /etc/crontab中,添加相关任务定时执行 auto_backup.sh 脚本文件

    chmod +x auto_backup.sh
    vim auto_backup.sh


    /etc/crontab 中添加执行脚本的定时任务,代码如下:

    0 2 * * * root /data/gitlabData/backups/auto_backup.sh -D 1

    编写完 /etc/crontab 文件之后,需要重新启动cron服务

    #重新加载cron配置文件

    /usr/sbin/service cron reload

    #重启cron服务

    /usr/sbin/service cron restart

    1.2.2 设置备份过期时间

    设置只保存最近7天的备份,编辑 /etc/gitlab/gitlab.rb 配置文件,找到gitlab_rails[‘backup_keep_time’],设置为你想要设置的值,然后保存。

    gitlab_rails['backup_keep_time'] = 604800  


    2、 Gitlab迁移

    2.1 copy老服务器上面的备份文件到新服务器

    2.1.1 确保新Gitlab服务器和老Gitlab服务器版本相同

    第一步,新服务器上的Gitlab的版本必须与创建备份时的Gitlab版本号相同. 比如新服务器安装的是最新的11.0.4版本的Gitlab, 那么迁移之前, 最好将老服务器的Gitlab 升级为11.0.4再进行备份.

    2.1.2 copy老服务器上面的备份文件到新服务器

    第二步,如果你没修改过默认备份目录的话,需要将老服务器上的备份文件目录(/var/opt/gitlab/backups目录)下的备份文件拷贝到新服务器上的/var/opt/gitlab/backups目录。

    docker cp 5b82f7221e12:/var/opt/gitlab/backups/1563430612_2019_07_18_11.0.4_gitlab_backup.tar /mnt

    使用scp命令从远程服务器copy文件或者目录到本地

    scp 用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2

    [用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .

    可能有用的几个参数 :

    -v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .

    -C 使能压缩选项 .

    -P 选择端口 . 注意 -p 已经被 rcp 使用 .

    -4 强行使用 IPV4 地址 .

    -6 强行使用 IPV6 地址 .

    例如我使用如下命令,从远程服务器copy刚才的备份文件到了新服务器的/var/opt/gitlab/backups/ 目录下

    scp root@xxxx:/mnt/1563430612_2019_07_18_11.0.4_gitlab_backup.tar /var/opt/gitlab/backups/

    copy完后,查看copy的文件如下

    2.1.3 从备份文件中恢复gitlab

    1、将备份文件权限修改为777

    第一步,将备份文件权限修改为777,不然可能恢复的时候会出现权限不够,不能解压的问题

    chmod 777 1563430612_2019_07_18_11.0.4_gitlab_backup.tar

    2、执行命令停止相关数据连接服务

    第二步,执行命令停止相关数据连接服务

    # 停止相关数据连接服务

    gitlab-ctl stop unicorn

    gitlab-ctl stop sidekiq

    3、执行命令从备份文件中恢复Gitlab

    第三步,执行命令从备份文件中恢复Gitlab

    gitlab-rake gitlab:backup:restore BACKUP=备份文件编号

    例如我们的备份文件的编号是1563430612_2019_07_18_11.0.4,因此执行下面的命令即可恢复gitlab

    gitlab-rake gitlab:backup:restore BACKUP=1563430612_2019_07_18_11.0.4

    敲完命令后,出现第一个交互页面,

    root@gitlab:/var/opt/gitlab/backups# gitlab-rake gitlab:backup:restore BACKUP=1563430612_2019_07_18_11.0.4
    Unpacking backup ... done
    Before restoring the database we recommend removing all existing
    tables to avoid future upgrade problems. Be aware that if you have
    custom tables in the GitLab database these tables and all data will be
    removed.

    Do you want to continue (yes/no)? 

    全部yes

    恢复过程中。。。。。

    4、执行命令从备份文件中恢复Gitlab

    第四步,启动Gitlab

    gitlab-ctl start

    3、打开迁移后的Gitlab,进行对比

    老Gitlab服务器这样就迁移完成了。

    注意:

    重要的事情说3遍! gitlab-secrets.json 文件要备份过去!!!!!!

    重要的事情说3遍!gitlab-secrets.json 文件要备份过去!!!!!!

    重要的事情说3遍!gitlab-secrets.json 文件要备份过去!!!!!!

    展开全文
  • delete input的意思备份完成后,删除 archivelog文件,这个选项可要可不要,这个命令也可以用 backup incremental level=0(1,2...)来进行备份) =======================备份表空间=======================...
    
    

    1. 检查数据库模式:
       sqlplus /nolog 
       conn /as sysdba
       archive log list (查看数据库是否处于归档模式中)

       若为非归档,则修改数据库归档模式。
       startup mount
       alter database archivelog
       alter database open

    2.连接到target数据库

    命令: connect target  /

     (connect target system/oracle@ora10g,如果数据库没有起来,也可要直接在rman命令下用startup进行启动数据库) 
    可以连接到target database.(rman 一边连接到target数据库,另外一边连接到control file(nocatalog mode),control file 中存储rman 的备份信息)

    3.用list backupset 命令查看有没有备份的东西


    4. 常用备份命令:
     备份全库:
    RMAN> backup database plus archivelog delete input;    (备份全库及控制文件、服务器参数文件与所有归档的重做日志,并删除旧的归档日志)
    备份表空间:


    RMAN> backup tablespace system plus archivelog delete input;     (备份指定表空间及归档的重做日志,并删除旧的归档日志)_


    备份归档日志:
    RMAN> backup archivelog all delete input;


    ======================对整个数据库进行备份==================

    1.对整个数据库进行全备份(full backup)。

        只要输入命令: backup database;


    2.list backupset 查看备份的具体信息

    List of Backup Sets
    ===================

    BS Key  Type LV Size       Device Type Elapsed Time Completion Time
    ------- ---- -- ---------- ----------- ------------ ---------------
    1       Full    6.80M      DISK        00:00:02     06-DEC-08      
            BP Key: 1   Status: AVAILABLE  Compressed: NO  Tag: TAG20081206T201041
            Piece Name: /home/oracle/flash_recovery_area/ORA10G/backupset/2008_12_06/o1_mf_ncsnf_TAG20081206T201041_4mntz78s_.bkp
      Control File Included: Ckp SCN: 782019       Ckp time: 06-DEC-08
      SPFILE Included: Modification time: 06-DEC-08

    BS(backupset), piece是一个文件,一个BS包含多个piece.


    3.rman中缺省的参数,可以通过 show all ;
    来进行查看(RMAN configuration parameters),我们在使用backup database命令中,可以把这些default value 用固定的值来进行替代.

    4.我们可以把备份的文件才备份的目录中拷贝到磁带上,然后删除备份目录下面的备份文件,如果下次需要恢复的话,只要把文件重新拷回到用来的备份目录就可以了
    5.查看control file 文件中的备份信息(因为我们做的备份是在nocatalog模式下),control file 在/u01/oracle/oradata/ora10g目录下,由于control file 是个二进制文件,要查看control file 文件中的内容,用strings control03.ctl,发现control03.ctl中有rman备份的信息了

     
    ====================0级增量备份==========================================================

    概念:全备份和0级增量备份。全备份和0级增量备份几乎是一样的。唯一的区别,0级增量备份能作为增量备份的基础,而全备份不能作为增量备份的基础。其它方面完全一致

    1.backup incremental level=0(leve 0) database;(增量为0的备份)
    2.backup incremental level 1(level=1) database;(增量为1的备份)
     
    在上面的备份中,我们备份了datafile,controlfile和parameter file.没有备份的文件有归档日志,重做日志和口令文件没有备份.口令文件不需要备份,我们用orapw来创建一个

    新的口令文件.rman 在nocatalog模式下,不能够对redo log file 进行备份


    ===================备份archivelog 在nocatalog模式下===========================================

    命令:backup database plus archivelog delete input(delete input的意思在备份完成后,删除 archivelog文件,这个选项可要可不要,这个命令也可以用 backup incremental level=0(1,2...)来进行备份)


    =======================备份表空间=========================================================

    backup tablespace tablespacename

    如果我们不知道tablespace的名字,在rman中,可要通过report schema命令,来查看表空间的名字

    MAN> report schema;
    Report of database schema

    List of Permanent Datafiles
    ===========================
    File Size(MB) Tablespace           RB segs Datafile Name
    ---- -------- -------------------- ------- ------------------------
    1    480      SYSTEM               ***     /home/oracle/oradata/ora10g/system01.dbf
    2    25       UNDOTBS1             ***     /home/oracle/oradata/ora10g/undotbs01.dbf
    3    250      SYSAUX               ***     /home/oracle/oradata/ora10g/sysaux01.dbf
    4    5        USERS                ***     /home/oracle/oradata/ora10g/users01.dbf
    5    200      PERFSTAT             ***     /home/oracle/oradata/ora10g/perfstat.dbf

    List of Temporary Files
    =======================
    File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
    ---- -------- -------------------- ----------- --------------------
    1    20       TEMP                 32767       /home/oracle/oradata/ora10g/temp01.dbf

     

    ========================备份控制文件==========================================================

    backup current controlfile

    backup database include current controlfile

     

    ========================备份镜像=============================================================

    在rman的备份中有两种方式:备份集(backupset)和备份镜像(image copies).镜像备份主要是文件的拷贝:copy datafile ... to ...

    我们在rman>report schema;

    Report of database schema

    List of Permanent Datafiles
    ===========================
    File Size(MB) Tablespace           RB segs Datafile Name
    ---- -------- -------------------- ------- ------------------------
    1    480      SYSTEM               ***     /home/oracle/oradata/ora10g/system01.dbf
    2    25       UNDOTBS1             ***     /home/oracle/oradata/ora10g/undotbs01.dbf
    3    250      SYSAUX               ***     /home/oracle/oradata/ora10g/sysaux01.dbf
    4    5        USERS                ***     /home/oracle/oradata/ora10g/users01.dbf
    5    200      PERFSTAT             ***     /home/oracle/oradata/ora10g/perfstat.dbf

    List of Temporary Files
    =======================
    File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
    ---- -------- -------------------- ----------- --------------------
    1    20       TEMP                 32767       /home/oracle/oradata/ora10g/temp01.dbf

     

    rman>copy datafile 5 to '/u01/rmanbak/tbso1bak.dbf';       (copy 5 对应的schme:perfstat.dbf)

     

    它会把tbs作为一个拷贝。我们用list backupset来看,不能够查看我们刚备份的 tbs01bak.dbf',因为它不是backupset. 我们用list copy 就能够查看我们刚才刚刚备份的文件

     
    =======================单命令与批命令======================================================

    单命令: backup database;

    批命令:

    rman> run{
     2> allocate channel cha1 type disk;
     3> backup
     4> format '/u01/rmanbak/full_%t'
     5> tag full-backup //标签可以顺便起,没关系
     6> database;
     7> release channel cha1;
     8>}


    这个run中有3条命令,分别用分号来进行分割.

    format:
    %c:备份片的拷贝数(从1开始编号);
    %d:数据库名称;
    %D:位于该月中的天数(DD);
    %M:位于该年中的月份(MM);
    %F:一个基于DBID唯一的名称,这个格式的形式为c-xxx-YYYYMMDD-QQ,其中xxx位该数据库的DBID,YYYYMMDD为日期,QQ是一个1-256的序列;
    %n:数据库名称,并且会在右侧用x字符进行填充,使其保持长度为8;
    %u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集产生一个唯一的名称;
    %p:表示备份集中的备份片的编号,从1开始编号;
    %U:是%u_%p_%c的简写形式,利用它可以为每一个备份片段(既磁盘文件)生成一个唯一的名称,这是最常用的命名方式;
    %t:备份集时间戳;
    %T:年月日格式(YYYYMMDD);

    channel的概念:一个channel是rman于目标数据库之间的一个连接,"allocate channel"命令在目标数据库启动一个服务器进程,同时必须定义服务器进程执行备份和恢复操作使

    用的I/O类型

    通道控制命令可以用来:
          控制rman使用的OS资源
          影响并行度
          指定I/O带宽的限制值(设置 limit read rate 参数)
          指定备份片大小的限制(设置 limit kbytes)
          指定当前打开文件的限制值(设置 limit maxopenfiles)

     
    =================================RMAN一周典型备份方案============================

    1.星期天晚上      -level 0 backup performed(全备份)
    2.星期一晚上      -level 2 backup performed
    3.星期二晚上      -level 2 backup performed
    4.星期三晚上      -level 1 backup performed
    5.星期四晚上      -level 2 backup performed
    6.星期五晚上      -level 2 backup performed
    7.星期六晚上      -level 2 backup performed

     
    如果星期二需要恢复的话,只需要1+2,
    如果星期四需要恢复的话,只需要1+4,
    如果星期五需要恢复的话,只需要1+4+5,
    如果星期六需要恢复的话,只需要1+4+5+6.

     

    自动备份:备份脚本+crontab
     bakl0
     bakl1
     bakl2

    执行脚本:
    rman target / msglog=bakl0.log cmdfile=bakl0 (/表示需要连接的目标数据库,msglog表示日志文件,cmdfile表示的是脚本文件)
    rman target / msglog=bakl1.log cmdfile=bakl1
    rman target / msglog=bakl2.log cmdfile=bakl2

    实例:rman target system/oracle@ora10g(/) msglog=/u01/rmanbak/bakl1.log cmdfile=/u01/rmanbak/bakl0


    完整的命令:/u01/oracle/product/10.2.0/bin/rman target system/oracle@ora10g(/) msglog=/u01/rmanbak/bakl1.log cmdfile=/u01/rmanbak/bakl0

     
    把备份脚本放到/u01/rmanbak/script目录下面,vi bakl0,bakl0的内容为:

    run{
        allocate channel cha1 type disk;
        backup
        incremental level  0
        format '/u01/rmanbak/inc0_%u_%T'(u表示唯一的ID,大T是日期,小t是时间)
        tag monday_inc0 //标签可以顺便起,没关系
        database;
        release channel cha1;
        }


    ,类似就可以写出bakl1,bakl2相应的脚本.

     
    自动备份
    crontab
    crontab -e -u oracle(改命令的意思是编辑oracle用户的定时执行(-e,edit -u oracle,oracle用户))

    分  时  日 月 星期(0代表星期天)
    45 23  *  *    0    rman target / msglog=bakl0.log cmdfile=bakl0(星期天的23:45会以oracle用户的身份来执行命令)
    45 23  *  *    1    rman target / msglog=bakl2.log cmdfile=bakl2
    45 23  *  *    2    rman target / msglog=bakl2.log cmdfile=bakl2
    45 23  *  *    3    rman target / msglog=bakl1.log cmdfile=bakl1
    45 23  *  *    4    rman target / msglog=bakl2.log cmdfile=bakl2
    45 23  *  *    5    rman target / msglog=bakl2.log cmdfile=bakl2
    45 23  *  *    6    rman target / msglog=bakl2.log cmdfile=bakl2

     

    然后启动crontab ,启动crontab的命令:
    root> service crond restart
      
    =======================RMAN恢复================

    在非catalog模式下,备份的信息存储在controlfile文件中,如果controlfile文件发生毁坏,那么就不能能够进行恢复,
    使用在备份的时候需要把controlfile也进行自动备份 
     
    RMAN>show all;
    using target database control file instead of recovery catalog
    RMAN configuration parameters are:
    CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
    CONFIGURE BACKUP OPTIMIZATION OFF; # default
    CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
    CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
    CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
    CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE MAXSETSIZE TO UNLIMITED; # default
    CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
    CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
    CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
    CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/home/oracle/product/10.20/dbs/snapcf_ora10g.f'; # default

    其中CONFIGURE CONTROLFILE AUTOBACKUP OFF; 没有对controlfile进行 autobackup,使用我们需要运行下面命令来对controlfile进行自动备份
    RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

    RMAN> show all;

    手动备份控制文件:
    backup current controlfile


    Dbid表示database的一个ID,将来用于恢复spfile和controlfile时候要用到.
    RMAN> connect target /
    connected to target database: ORA10G (DBID=3988862108)
    这个Dbid=3988862108
     

    RMAN> list backup;查看以前备份的信息
    RMAN>delete backupset 24;//24代表backupset 的编号
    RMAN>backup format '/u01/rmanbak/full_%T_%U.bak' database plus archivelog;(进行一次全备份)

    验证备份:
    RMAN> validate backupset 3;  //3代表backupset的编号

     

    口令文件丢失(不属于rman备份的范畴),我们只需要用一个命令来重建这个文件就可以了:
    orapw file=orapwsid password=pass entries=5;  //口令文件的路径:/u01/oracle/product/10.20/db_1/dbs目录下
    oracle> cd /u01/oracle/product/10.20/db_1/dbs
    oracle> rm orapwora10g;(文件删除,模拟丢失)
    oracle> orapwd file=orapwora10g password=oracle entries=5;(重新建立一个文件),entries的意思(DBA的用户最多有5个)

     

     

    SPFILE丢失:
    startup nomount;
    set dbid 3988862108;
    restore spfile from autobackup;
    shutdown immediate;
    set dbid 3988862108;
    startup;

     

    模拟操作:
    oracle> mv spfileora10g.ora spora10g.ora
    oracle>rman target /;
    rman> shutdown immediate;
    rman> startup nomount;
    startup failed: ORA-01078: failure in processing system parameters
    LRM-00109: could not open parameter file '/home/oracle/product/10.20/dbs/initora10g.ora'
    rman>set dbid 3988862108;
    rman>restore spfile from autobackup;

    执行该命令,如果没有找到的话,那可能是文件的路径发生错误.可以通过直接赋予它的文件
    rman>restore spfile from '/u01/oracle/flash_recovery_area/ORA10G/autobackup/2008_12_09/o1_mf_s_673025706_4mw7xc79_.bkp

    在dbs/目录下产生spfileora10g.ora文件。证明spfile 已经恢复好

    rman> shutdown immediate;
    rman> startup ;(如果该命令不能够启动数据库,那么需要set dbid 3988862108)


    controlfile 丢失:
    startup nomount;
    restore controlfile from autobackup;
    alter database mount;
    recover database;
    alter database open resetlogs;

    注意:在做了alter database open resetlogs;会把online redelog file清空,数据文件丢失.所以这个时候要做一个全备份。

    oracle>rm *.ctl
    oracle>rman target / ;//不能够连接到rman ,因为controlfile丢失
    oracle>sqlplus /nolog;


    SQL>shutdown immediate; //因为controlfile丢失,不能够正常shutdown
    SQL>shutdown abort;

    oracle>rman target /;

    rman>startup nomount;
    rman>restore controlfile from autobackup;
    rman>alter database mount;
    rman>alter database open resetlogs;

    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of alter db command at 12/09/2008 16:21:13
    ORA-01194: file 1 needs more recovery to be consistent
    ORA-01110: data file 1: '/home/oracle/oradata/ora10g/system01.dbf

    //出错, redo log的scn记录在controlfile里面的,因为我们有新的controlfile,所以需要resetlogs;
     
    /*
    resetlogs命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始,每次使用resetlogs命令的时候,SCN不会被重置,不过oracle会重置日志序列号,而且会重置 
    联机重做日志内容.

    这样做是为了防止不完全恢复后日志序列会发生冲突(因为现有日志和数据文件间有了时间差)。
    */

    rman>recover database;
    rman>alter database open resetlogs;


    Redolog file丢失:(下面的这些语句一定要在sqlplus中执行,不是在rman中执行)
     (sqlplus/nolog)
    1.shutdown immediate;
    2.startup mount;
    3.recover database until cancel;(media recovery)
    4.alter database resetlogs;

     

    数据文件丢失(在rman中执行sql语句,在sql后面用双引号括起来):
    1. sql "alter database datafile 3 offline";
    2. restore datafile 3
    3. recover datafile 3
    4. sql "alter database datafile 3 online";

     

    表空间丢失:
    1. sql "alter tablespace users offline";//如果文件不存在,则用 sql "alter tablespace users offline immeidate";
    2. restore tablespace users;
    3. recover tablespace users; //与online redolog file 信息一致
    4. sql "alter tablespace users online";

     

    非catalog方式完全恢复

    数据库出现问题:

    1.startup nomount;
    2.restore controlfile from autobackup;
    3.alter database mount;
    4.restore database;
    5.recover database;
    6.alter database open resetlogs;

     

    模拟操作:
    oracle ora10g> rm *;
    oracle ora10g> ls;
    oracle ora10g>  //数据文件,控制文件全部删除

    oracle ora10g> rman target /; //因为controlfile 丢失,不能够连接到rman
    oracle ora10g> sqlplus /nolog;
    oracle ora10g> connect / as sysdba;
    oracle ora10g> shutdown abort;
    oracle ora10g> rman target /

     

    rman> startup nomount;
    rman> restore controlfile from autabackup;
    rman> alter database mount;
    rman> restore database;
    rman> recover database; //online redolog 不存在

    SQL>recover database until cancel; //当redo log丢失,数据库在缺省的方式下,是不容许进行recover操作的,那么如何在这种情况下操作呢
    SQL>create pfile from spfile;

    vi /u01/product/10.20/dbs/initora10g.ora,在这个文件的最后一行添加
    *.allow_resetlogs_corruption='TRUE'; //容许resetlog corruption

     
    SQL>shutdown immediate;
    SQL>startup pfile='/u01/product/10.20/dbs/initora10g.ora' mount;
    SQL>alter database open resetlogs;

     

     基于时间点的恢复:
     run{
      set until time "to_date(07/01/02 15:00:00','mm/dd/yy hh24:mi:ss')";
      restore database;
      recover database;
      alter database open resetlogs;
    }

    ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
    1.startup mount;
    2.restore database until time "to_date('2009-7-19 13:19:00','YYYY-MM-DD HH24:MI:SS')";
    3.recover database until time "to_date('2009-7-19 13:19:00','YYYY-MM-DD HH24:MI:SS')";
    4.alter database open resetlogs;

     

    如果有open resetlogs,都是不完整恢复.

     

    基于 SCN的恢复:
    1.startup mount;
    2.restore database until scn 10000;
    3.recover database until scn 10000;
    4.alter database open resetlogs;


    基于日志序列的恢复:
    1.startup mount;
    2.restore database until SEQUENCE 100 thread 1; //100是日志序列
    3.recover database until SEQUENCE 100 thread 1;
    4.alter database open resetlogs;

    日志序列查看命令: SQL>select * from v$log;其中有一个sequence字段.resetlogs就会把sequence 置为1


    =================================RMAN catalog模式下的备份与恢复=====================

    1.创建Catalog所需要的表空间
    SQL>create tablespace rman_ts size datafile '/u01/oracle/oradata/ora10g/rmants.dbf' 20M;
     

    2.创建RMAN用户并授权
    SQL>create user rman identified by rman default tablespace rman_ts quota unlimited on rman_ts;
    SQL>grant recovery_catalog_owner to rman;(grant connect to rman)

     
    查看角色所拥有的权限: select * from dba_sys_privs where grantee='RECOVERY_CATALOG_OWNER';
    (RECOVER_CATALOG_OWNER,CONNECT,RESOURCE)

    3.创建恢复目录
    oracle>rman catalog rman/rman
    RMAN>create catalog tablespace rman_ts;
    RMAN>register database;(database是target database)

    database registered in recovery catalog
    starting full resync of recovery catalog
    full resync complete

    RMAN> connect target /;

    以后要使用备份和恢复,需要连接到两个数据库中,命令:

    oracle>rman target / catalog rman/rman (第一斜杠表示target数据库,catalog表示catalog目录 rman/rman表示catalog用户名和密码)

    命令执行后显示:

    Recovery Manager: Release 10.2.0.1.0 - Production on Wed Dec 10 15:00:42 2008
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    connected to target database: ORA10G (DBID=3988862108)
    connected to recovery catalog database


    命令解释:
    Report schema              Report shema是指在数据库中需找schema
    List backup                   从control读取信息
    Crosscheck backup       看一下backup的文件,检查controlfile中的目录或文件是否真正在磁盘上
    Delete backupset 24    24代表backupset 的编号, 既delete目录,也delete你的文件

     

    注意:在做了alter database open resetlogs;会把online redelog file清空,数据文件丢失.所以这个时候要做一个全备份。

    resetlogs命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始,每次使用resetlogs命令的时候,SCN不会被重置,不过oracle会重置日志序列号,而且会重置

    联机重做日志内容.这样做是为了防止不完全恢复后日志序列会发生冲突(因为现有日志和数据文件间有了时间差)。

     

    Rman 归档文件丢失导致不能备份的,在备份前先执行以下两条命令
    crosscheck archivelog all;
    delete expired archivelog all;


    rman备份实践演习:http://blog.csdn.net/changyanmanman/article/details/7885799

    rman还原恢复实践演习:http://blog.csdn.net/changyanmanman/article/details/7885908

    rman高级恢复:http://blog.csdn.net/changyanmanman/article/details/7885926


    展开全文
  • PostgreSQL自带一个客户端pgAdmin,里面有个...所以一直寻找完美的备份恢复方案。 梦里寻他千百度,伊人却在灯火阑珊处...其实PostgreSQL内置不少的工具,寻找的备份恢复方案就在其中:pg_dump,psql。这两个

    PostgreSQL自带一个客户端pgAdmin,里面有个备份,恢复选项,也能对数据库进行备份 恢复(还原),但最近发现数据库慢慢庞大的时候,经常出错,备份的文件过程中出错的几率那是相当大,手动调节灰常有限。所以一直寻找完美的备份恢复方案。


    梦里寻他千百度,伊人却在灯火阑珊处...其实PostgreSQL内置不少的工具,寻找的备份恢复方案就在其中:pg_dump,psql。这两个指令 在数据库的安装目录下,比如我自己本地安装的,路径形如:C:\Program Files\PostgreSQL\9.0\;然后进入到bin文件夹,会看到不少的exe文件,这就是PostgreSQL内置的工具了。里面会找到 pg_dump.exe,psql.exe两个文件。我们怎么用他们?


    用法:

    备份数据库,指令如下:

    pg_dump -h 164.82.233.54 -U postgres databasename > C:\databasename.bak

    开始-运行-cmd 弹出dos控制台;然后 在控制台里,进入PostgreSQL安装目录bin下:

    cd C:\Program Files\PostgreSQL\9.0\bin

    最后执行备份指令: 

    pg_dump -h 164.82.233.54 -U postgres databasename > C:\databasename.bak

    指令解释:如上命令,pg_dump 是备份数据库指令,164.82.233.54是数据库的ip地址(必须保证数据库允许外部访问的权限哦~),当然本地的数据库ip写 localhost;postgres 是数据库的用户名;databasename 是数据库名。> 意思是导出到C:\databasename.bak文件里,如果没有写路径,单单写databasename.bak文件名,那么备份文件会保存在C: \Program Files\PostgreSQL\9.0\bin 文件夹里。


    恢复数据库,指令如下: 

    psql -h localhost -U postgres -d databasename <  C:\databasename.bak

    指令解释:如上命令,psql是恢复数据库命令,localhost是要恢复到哪个数据库的地址,当然你可以写上ip地址,也就是说能远程恢复(必须保证 数据库允许外部访问的权限哦~);postgres 就是要恢复到哪个数据库的用户;databasename 是要恢复到哪个数据库。<  的意思是把C:\databasename.bak文件导入到指定的数据库里。

    以上所有的是针对windows而言的,如果在linux下,会不会有效?



    在linux里依然有效。有一个值得注意的是:如果直接进入PostgreSQL的安装目录bin下,执行命令,可能会出现 找不到pg_dump,psql的现象,我们在可以这样:

    备份:

    /opt/PostgreSQL/9.0/bin/pg_dump -h 164.82.233.54 -U postgres databasename > databasename.bak

    恢复:


    /opt/PostgreSQL/9.0/bin/psql -h localhost -U postgres -d databasename < databasename.bak

    原文地址:http://2goo.info/blog/detail/516/
    展开全文
  • RMAN备份恢复

    千次阅读 2017-05-13 22:40:37
    当执行时候,会在目标数据库创建两个会话---v$session试图可见,一个主进程用于执行对程序包的调用,实现rman备份恢复等,另一个次进程轮训前一个进程的各种内部操作,并将各种操作结果记录到RMAN存储库--repository...
  • es提供对于运行中的集群的备份恢复功能,利用此功能可以备份整个集群(open或者started状态的分片,备份不了closed的index),或者备份指定的index。备份目标存储可以是网络文件系统NFS、Amazon S3、HDFS、Azure...
  • MySQL之Xtrabackup备份恢复数据库

    千次阅读 2014-02-24 15:25:17
    innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的,innobackupex是...并且加入了一些使用的选项,如slave-info可以记录备份恢复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做sl
  • PostgreSQL自带一个客户端pgAdmin,里面...所以一直寻找完美的备份恢复方案。 梦里寻他千百度,伊人却在灯火阑珊处...其实PostgreSQL内置不少的工具,寻找的备份恢复方案就在其中:pg_dump,psql。这两个指令在数
  • 从“时间机器”备份恢复 Mac

    千次阅读 2020-02-25 18:20:10
    备份恢复 Mac 了解如何将“时间机器”备份中的所有文件转移到 Mac 上。 如果您使用“时间机器”创建了 Mac 的备份,可以从该备份或者启动磁盘上的本地快照恢复文件。在原件从 Mac 中被删除后,或者 Mac 中的...
  • PostgreSQL 备份恢复权限设置

    千次阅读 2018-03-23 14:09:08
    以me用户进行备份. me@me:/opt/HighGo/Develop/bin$ ./pg_dump.bin -F p highgo > hehe.sql me@me:/opt/HighGo/Develop/bin$ ./pg_dump.bin -U me highgo > hehe1.sql me@me:/opt/HighGo/Develop/bin$ ls -al hehe...
  • Ubuntu 系统备份 恢复

    千次阅读 2013-06-07 11:55:15
    今天发了一下心,决定给系统备份下。搜索下两篇有用的博文,其中第二篇的作者还是挺辛苦的额,哈哈,特转一下备以记录。   第一篇转自:http://www.cnblogs.com/samael/articles/2033568.html 在 使用Ubuntu...
  • PLSQL Developer备份恢复oracle数据

    千次阅读 2013-07-16 15:40:29
    PLSQL Developer备份恢复oracle数据 2013-06-09 11:06 by 易code, 60 阅读, 0 评论, 收藏, 编辑 使用PL sql提供的功能可以快速的备份恢复oracle数据。 1 导出存储过程,触发器,序列等所有用户对象。(备份...
  • 每天都冷备份和每天都热备份到底有什么区别? 我知道的:冷备份要停机,热备份不用,冷备份占空间小,热备份占空间大。热备份容易出故障。 我不明白的:对于金融系统,如果某天的数据库崩了,我要还原,但是热备份...
  • MySQL cluster备份恢复

    千次阅读 2010-04-26 12:02:00
    在网络上找了很多相关备份和还原的教程,大多都是互相抄袭,按照他们的教程能够成功备份,还原就很让人揪心了。谈谈思路和注意点吧。 首先,第一步不用说,肯定是备份数据库。最简单,打开管理节点的ndb_mgm控制台...
  • rman备份恢复详细方案和介绍

    万次阅读 2019-06-28 10:25:47
    RMAN(Recovery Manager)是随Oracle服务器软件一同安装的工具软件,它可以用来备份恢复数据库文件、归档日志和控制文件,用来执行完全或不完全的数据库恢复。与传统工具相比,RMAN具有独特的优势:跳过未使...
  • Linux下mysql备份 恢复

    千次阅读 2013-05-14 22:46:32
    比如我们要备份mysql中已经存在的名为linux的数据库,要用到命令mysqldump 命令格式如下: [root@linuxsir01 root]# mysqldump -u root -p linux > /root/linux.sql Enter password:在这里输入数据库的密码 通过...
  • 首先我们得把老服务器上的Gitlab整体备份,使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份。 gitlab-rake gitlab:backup:create 1 使用以上...
  • 1 xtrabackup只能备份innodb和xtradb两种引擎的表,而不能备份myisam引擎的表; 2 innobackupex是一个封装了xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。还有就是...
  • macos备份恢复If you’re installing a new hard drive, or your Mac is completely messed up, you might think it’s time for a fresh installation of macOS. But if you’ve got a Time Machine backup, that’...
  • 在日常工作中,我们会使用mysqldump命令创建SQL格式的转储文件来备份数据库。或者我们把数据导出后做数据迁移,主备搭建等操作。mysqldump是一个逻辑备份工具,复制原始的数据库对象定义和表数据产生一组可执行的SQL...
  • xtrabackup安装部署配置 备份恢复

    千次阅读 2019-01-11 15:10:37
    增量备份恢复 增量备份的恢复大体为3个步骤 *恢复完全备份 *恢复增量备份到完全备份(开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份去掉--redo-only参数) *对整体的完全备份进行恢复,...
  • mongodb集群配置及备份恢复

    千次阅读 2018-10-09 12:02:00
    4. 备份恢复角色:backup、restore; 5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 6. 超级用户角色:root // 这里还有几个角色间接或直接提供了...
  • 下面是从csdn上看到的一篇好文章,转载自欧阳鹏先生于2017年08月10日分享的gitlab备份,操作过程超详细。 在此感谢众多热心分享的人。 (本来我也想补充一下gitlab相关的总结,看到这篇后直接放弃自己写了,就进行了...
  • postgresql数据库备份恢复

    千次阅读 2017-04-19 22:23:15
    PostgreSQL自带一个客户端pgAdmin,...所以一直寻找完美的备份恢复方案。 梦里寻他千百度,伊人却在灯火阑珊处...其实PostgreSQL内置不少的工具,寻找的备份恢复方案就在其中:pg_dump,psql。这两个指令 在数据库的安
  • linux下mysql数据备份 恢复

    千次阅读 2013-08-30 15:42:43
    比如我们要备份mysql中已经存在的名为linux的数据库,要用到命令mysqldump  命令格式如下:  [root@linuxsir01 root]# mysqldump -u root -p linux > /root/linux.sql  Enter password:在这里输入数据库的密码...
  • GitLab基础:备份恢复指南

    千次阅读 2020-08-20 05:10:03
    GitLab提供进行备份恢复的方式,整体来说,备份的过程会创建包含数据库、所有仓库和附件的归档文件。无论是CE版本还是EE版本,GitLab恢复数据的时候都需要满足版本一致的前提,即进行恢复的GitLab的版本和备份数据...
  • ubuntu备份恢复

    万次阅读 2016-07-25 23:38:21
    如果你备份过Windows系统,那么你一定记忆犹新:首先需要找到一个备份工 具(通常都是私有软件),然后重启电脑进入备份工具提供的软件环境,在这里备份或者恢复Windows系统。Norton Ghost是备份Windows系统时经常使用...
  • SQL Server 2005&2008备份恢复总结

    千次阅读 2014-06-30 11:26:00
    SQL Server 2005&2008备份恢复总结 一、数据库存储概述 1、数据文件类型 ·  Primary data files:每个数据库都有一个单独的主要数据文件,默认以.mdf扩展名。主要数据文件不仅包含数据信息,还包含与该...
  • 平时帮人家装系统时经常使用,也没有留意使用时出现的问题,今天有人问我Ghost备份中出现的NO FAST HIGH是什么意思? 下面就此问题做个解答。  当我们用Ghost备份的时候,会弹出一个对话框,上面有三个按钮,分别...
  • 但时不时都会有人偷懒,或者使用手机OTA升级而没有对系统备份,最终导致不满意新系统了,想降级却无备份可以恢复的尴尬局面。面对这种情况,小编也是百般无奈啊...好吧,既然有那么多小伙伴束手无策,那小编今天就有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,367
精华内容 18,946
关键字:

备份恢复是什么意思