我写了以下脚本:
RUN {shutdown immediate              
     startup mount
     
     SQL 'alter system archive log current';
     BACKUP archivelog all format '/opt/pra_data/backup/al_%s_%p_%t'; 
         
     BACKUP CURRENT CONTROLFILE FORMAT '/opt/ora_data/backup/cntrl_%s_%p_%t';
     
     backup database format '/opt/ora_data/backup/%U';
     alter database open;
    } 
但是运行的时候报错如下,请教一下我这个脚本哪里有问题,谢谢。using target database control file instead of recovery catalog
database dismounted
Oracle instance shut downconnected to target database (not started)
Oracle instance started
database mountedTotal System Global Area     167772160 bytesFixed Size                     1266392 bytes
Variable Size                104860968 bytes
Database Buffers              58720256 bytes
Redo Buffers                   2924544 bytessql statement: alter system archive log current
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of sql command on default channel at 04/29/2009 14:14:58
RMAN-11003: failure during parse/execution of SQL statement: alter system archive log current
ORA-01109: database not open

解决方案 »

  1.   

    应该是数据库open以后才可以进行归档操作吧,你看rman的提示也是告诉你数据库没有打开,解析你的alter system archive log current 错误
      

  2.   

    谢谢,我还想请教一下,RMAN备份是在mount下还是在OPEN下运行,如果我有很多datafile,但是我想一次性备份,请问有什么方法,我看到的就是只能单个datafile进行备份。
      

  3.   

    如果要访问datafile / logfile ,则数据库要处于OPEN状态,你的数据库现在处于MOUNT状态,当然不能执行归档操作。你这个备份脚本也写得有点烦锁,既然执行了数据库的完整备份,就可以不用备份归档日志了。
      

  4.   

    一般我的方法是通过一个增量备份循环,循环的时间跟你数据库的数据有关系,例如
    周日进行增量0备份
    backup incremental level=0 database plus archivelog;周3进行增量1备份
    backup incremental level=1 database plus archivelog;周5进行增量2备份
    backup incremental level=2 database plus archivelog;然后进行循环,循环周期一个简单的计算方法是:
    进行优化存储备份时,增量2备份文件大小是增量0的一半。
      

  5.   

    我把数据库放在MOUNT状态是怕在备份的时候有人进行连接。
    那依照你的意思就是说,我只需要运行backup database format '/opt/ora_data/backup/%U'; 就吧DB,LOGFILE,DATAFILE全部都备份了么?
    RUN {
       backup database format '/opt/ora_data/backup/%U'; 
    }
    这样么?
    还有一个小问题,我想请问一下,我在RMAN中如何查看所有存在的LOGFILE和DATAFILE?
    谢谢?
      

  6.   

    clearly:
    ORA-01109: database not open alter system archive log current 
    需要数据库在打开的状态下才能成功 
      

  7.   

    备份的时候有人操作也无所谓啊,即使有人操作数据,有脏数据也不影响,只要你的archive log 都在,恢复的时候回自动更新的。
    看datafile要么在数据库中看,要么在rman中report schema;
    看日志文件就只有在数据库中。
    当然备份之后你可以用
    list看备份文件中的备份内容,那个里面有详细的每个备份文件具体备份数据库的内容,包括备份了哪些日志文件,数据文件
      

  8.   


    我是不是可以这样理解,我需要写三个自动备份的shall,周日、周三、周五各运行一个脚本。
      

  9.   

    在 open 状态下进行 rman 操作就可以了,没有必要 shutdown 的。
      

  10.   

    如果我想在备份前先显示出我的LOGFILE和DATAFILE信息,应该如何写?
      

  11.   

    如果我想在备份前先显示出我的LOGFILE和DATAFILE信息,应该如何写?
    ====================================================================
    用 RMAN 的 report 命令RMAN> report schema;
      

  12.   

    现在我的脚本是这样写的,我是想要做每天的全备份.请帮我看看:
    $RMAN target $TARGET_CONNECT_STR nocatalog msglog $RMAN_LOG_FILE append << EOF >> $RMAN_OUT_FILE
    RUN {report schema;
         shutdown immediate
         startup mount
    }RUN {backup database;
         aler database open;     
    }
    EOF
      

  13.   

    再请教一个问题,我现在配置的通道是这样的:
    CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/opt/ora_data/backup/ORCTEST_full%s_%t_%U';
    CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT   '/opt/ora_data/backup/ORCTEST_full%s_%t_%U';
    CONFIGURE CHANNEL 2 DEVICE TYPE DISK FORMAT   '/opt/ora_data/backup/ORCTEST_full%s_%t_%U';然后我在RUN中写的allocate channel 1 type disk 必须使用我设置好的通道么?还是说可以任意写?
    谢谢。
      

  14.   

    rman可以直接做热备份的,所以不是一定要在mount状态下backup的,
    run如果需要自己手工分配通道的话,必须是已经设置好的通道,或者你直接用默认的通道类型。
    ==================================================================================== 
    Inthirties关注Oracle数据库 优化,安全,备份,恢复,迁移 如果你需要帮助或想和我一起学习的请联系 
    联系方式QQ:370140387 
    QQ群:  85837884(注明:数据库) 
    电子邮件:[email protected] 
    网站: http://www.inthirties.com 
      

  15.   

    OK,谢谢以上各位的帮助。
    对于RMAN备份我已经有了一定的了解了。
      

  16.   

    最后我还有个小问题,假设我想要吧备份和将备份恢复到另一个DB中的两个操作写成一个SHELL文件,可以实现么?
    是否是要在SHALL里面写两个RUN,还是说在一个RUN里面写就可以了。
      

  17.   

    感觉好怪异。一个run里不行吧,不过就是两个run你也可以放到一个shell命令呀。
      

  18.   

    现在碰到一个这样的问题,我在RUN里面这样写:
    RUN {
    ALLOCATE CHANNEL 1 TYPE DISK;
    ALLOCATE CHANNEL 2 TYPE DISK;
    BACKUP DATABASE;
    RELEASE CHANNEL 1;
    RELEASE CHANNEL 2;
    }
    在运行的时候却是报错,我想请教一下,ALLOCATE CHANNEL 1 TYPE DISK;中的1是否必须是我配置中的通道1,或者说可以任意定义呢?
      

  19.   

    可以通过 configure channel 1 device type disk format '.....%U' 来定义
      

  20.   


    感觉你的规则很多,又要写shell脚本,
    建议LZ安装GRID CONTROL把,然后通过网页制定和管理你的备份作业,
      

  21.   


    我确实已经配置了CHANNEL ,但是还是报错,不知道是何原因。其实我就是想写一个自动全备份脚本,是写在SHELL里面,然后每天定期自动运行,并且可以看到运行的日志,而且在备份前显示LOGFILE和DATAFILE并写入日志。但是我现在就是在ALLOCATE CHANNEL 1 TYPE DISK这里报错了,我就觉得很奇怪,在网上也看过很多资料是这样写的,我就不明白为什么别人的就不报错,而且我还想知道这句语句是什么含义。谢谢。
    下面是我的脚本:
    rman target sys/qwe123@orc_test << EOF >> test.sh.outRUN {
    ALLOCATE CHANNEL 1 TYPE DISK;
    ALLOCATE CHANNEL 2 TYPE DISK;
    BACKUP DATABASE;
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
    BACKUP FILESPERSET 3 ARCHIVELOG ALL DELETE INPUT;
    RELEASE CHANNEL 1;
    RELEASE CHANNEL 2;
    }
    EOF
    下面是我的配置:
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
    CONFIGURE BACKUP OPTIMIZATION ON;
    CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
    CONFIGURE CONTROLFILE AUTOBACKUP ON;
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/opt/ora_data/backup/ORCTEST_CF_%F';
    CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;
    CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 3;
    CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/opt/ora_data/backup/ORCTEST_full%s_%t_%U';
    CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT   '/opt/ora_data/backup/orctest_full%U.bak';
    CONFIGURE CHANNEL 3 DEVICE TYPE DISK FORMAT   '/opt/ora_data/backup/orc_full_%U.dbf';
    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 '/opt/oracle/product/10.2.0/db_1/dbs/snapcf_orctest.f'; # default
    下面是报错:
    Recovery Manager: Release 10.2.0.4.0 - Production on Thu Apr 30 15:13:38 2009Copyright (c) 1982, 2007, Oracle.  All rights reserved.connected to target database: ORC_TEST (DBID=2652864220)RMAN> 
    RMAN> 2> 
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-00558: error encountered while parsing input commands
    RMAN-01009: syntax error: found "integer": expecting one of: "channel_id, double-quoted-string, equal, identifier, single-quoted-string"
    RMAN-01007: at line 3 column 18 file: standard inputRMAN> 
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-00558: error encountered while parsing input commands
    RMAN-01009: syntax error: found "integer": expecting one of: "for"
    RMAN-01007: at line 1 column 18 file: standard input。
    RMAN> 
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-00558: error encountered while parsing input commands
    RMAN-01009: syntax error: found "integer": expecting one of: ";"
    RMAN-01007: at line 1 column 17 file: standard inputRMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-00558: error encountered while parsing input commands
    RMAN-01009: syntax error: found ";": expecting one of: "allocate, alter, backup, beginline, blockrecover, catalog, change, connect, copy, convert, create, crosscheck, configure, duplicate, debug, delete, drop, exit, endinline, flashback, host, {, library, list, mount, open, print, quit, recover, register, release, replace, report, renormalize, reset, restore, resync, rman, run, rpctest, set, setlimit, sql, switch, spool, startup, shutdown, send, show, test, transport, upgrade, unregister, validate"
    RMAN-01007: at line 1 column 18 file: standard inputRMAN> 
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-00558: error encountered while parsing input commands
    RMAN-01009: syntax error: found "integer": expecting one of: ";"
    RMAN-01007: at line 1 column 17 file: standard inputRMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-00558: error encountered while parsing input commands
    RMAN-01009: syntax error: found ";": expecting one of: "allocate, alter, backup, beginline, blockrecover, catalog, change, connect, copy, convert, create, crosscheck, configure, duplicate, debug, delete, drop, exit, endinline, flashback, host, {, library, list, mount, open, print, quit, recover, register, release, replace, report, renormalize, reset, restore, resync, rman, run, rpctest, set, setlimit, sql, switch, spool, startup, shutdown, send, show, test, transport, upgrade, unregister, validate"
    RMAN-01007: at line 1 column 18 file: standard inputRMAN> 
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-00558: error encountered while parsing input commands
    RMAN-01009: syntax error: found "}": expecting one of: "allocate, alter, backup, beginline, blockrecover, catalog, change, connect, copy, convert, create, crosscheck, configure, duplicate, debug, delete, drop, exit, endinline, flashback, host, {, library, list, mount, open, print, quit, recover, register, release, replace, report, renormalize, reset, restore, resync, rman, run, rpctest, set, setlimit, sql, switch, spool, startup, shutdown, send, show, test, transport, upgrade, unregister, validate"
    RMAN-01007: at line 1 column 1 file: standard inputRMAN> Recovery Manager complete.
      

  22.   


    先查询你的channel
    show channel; 定义你的channel
    CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT   '%U';这里是默认的通道如果要在你的脚本里手工通道,也是通过以上类似语句
    ALLOCATE CHANNEL n1 DEVICE TYPE DISK format '%u';你的脚本里写错了
    1.掉了device,
    2.名字不能为integer
      

  23.   

    谢谢楼上,修改脚本为:
    RUN {
    ALLOCATE CHANNEL C1 DEVICE TYPE DISK FORMAT '/opt/ora_data/backup/ORCTEST_full%s_%t_%U';
    ALLOCATE CHANNEL C2 DEVICE TYPE DISK FORMAT '/opt/ora_data/backup/ORCTEST_full%s_%t_%U';
    BACKUP DATABASE;
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
    RELEASE CHANNEL C1;
    RELEASE CHANNEL C2;
    }现在备份成功,但是我有点疑问:
    1.ALLOCATE CHANNEL C1 DEVICE TYPE DISK FORMAT '/opt/ora_data/backup/ORCTEST_full%s_%t_%U'是自己指定通道,必须要FORMAT么?我在配置中已经配置好的设置不是没用么?
      我的配置:CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/opt/ora_data/backup/ORCTEST_CF_%F';
    2.这里手工指定的CHANNEL和我配置的CHANNAL 1有关系么,或者说两个根本就没有关系?是否我可以这样理解,假设在RUN中没有ALLOCATE CHANNEL,则直接调用配置中的CHANNEL 1,假设RUN中使用ALLOCATE CHANNEL,则优先使用RUN中的CHANNEL,不摘掉我这样理解对不对。
    谢谢。
      

  24.   

    1. format 只是channel配置的参数之一,这里只是举例子而已2. 是的,你是手动指定自己的channel而已。
      

  25.   

    测试了一下,假设我不加FORMAT则报错:
    RUN { 
    ALLOCATE CHANNEL C1 DEVICE TYPE DISK ; 
    ALLOCATE CHANNEL C2 DEVICE TYPE DISK ; 
    BACKUP DATABASE; 
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'; 
    RELEASE CHANNEL C1; 
    RELEASE CHANNEL C2; 

    错误信息:
    Recovery Manager: Release 10.2.0.4.0 - Production on Thu Apr 30 17:08:18 2009Copyright (c) 1982, 2007, Oracle.  All rights reserved.connected to target database: ORC_TEST (DBID=2652864220)RMAN> 
    RMAN> 2> 3> 4> 5> 6> 7> 8> 
    using target database control file instead of recovery catalog
    allocated channel: C1
    channel C1: sid=158 devtype=DISKallocated channel: C2
    channel C2: sid=132 devtype=DISKStarting backup at 30-APR-09
    channel C1: starting full datafile backupset
    channel C1: specifying datafile(s) in backupset
    input datafile fno=00001 name=/opt/oradata/orc_test/system01.dbf
    input datafile fno=00004 name=/opt/oradata/orc_test/users01.dbf
    channel C1: starting piece 1 at 30-APR-09
    channel C2: starting full datafile backupset
    channel C2: specifying datafile(s) in backupset
    input datafile fno=00003 name=/opt/oradata/orc_test/sysaux01.dbf
    input datafile fno=00002 name=/opt/oradata/orc_test/undotbs01.dbf
    channel C2: starting piece 1 at 30-APR-09
    RMAN-03009: failure of backup command on C1 channel at 04/30/2009 17:08:27
    ORA-19806: cannot make duplex backups in recovery area
    continuing other job steps, job failed will not be re-run
    released channel: C1
    released channel: C2
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03009: failure of backup command on C2 channel at 04/30/2009 17:08:28
    ORA-19806: cannot make duplex backups in recovery areaRMAN> Recovery Manager complete.如果要手工指定CHANNEL则必须是这样的格式ALLOCATE CHANNEL C1 DEVICE TYPE DISK FORMAT '/opt/ora_data/backup/ORCTEST_full%s_%t_%U'; 是么?
      

  26.   

    还想请教一下,
    backup filesperset 3 format 。是什么意思?
      

  27.   

    刚才测试了一下,发现,如果在手工指定通道的地方不FORMAT文件,则必须在BACKUP DATABASE 处FORMAT,否则必须在 ALLOCATE CHANNEL 处指定FORMAT。
      

  28.   


    是备份集的一种方式,你可以google一下,有介绍的。