[20161214]rman checksyntax.txt

[20161214]rman checksyntax.txt

--rman在命令行使用参数checksyntax可以检查命令语法是否正确,而且并不会真正执行.但是昨天在恢复一个10g的数据库时遇到问题,做
--一个记录:

1.环境:
--要恢复的数据库版本:
> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- ----------------------------------------------------------------
x86_64/Linux 2.4.xx            10.2.0.4.0     Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

2.建立脚本
$ cat reco.rman
run
{
set until time '2016-12-03 04:00:00';
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
restore database;
recover database;
release channel c1;
release channel c2;
release channel c3;
}

3.测试:
$ rlrman checksyntax
Recovery Manager: Release 10.2.0.4.0 - Production on Wed Dec 14 10:51:12 2016
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
connected to target database: STATISTI (DBID=3581654166)

RMAN> @ reco.rman
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01009: syntax error: found "identifier": 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-01008: the bad identifier was: reco
RMAN-01007: at line 1 column 2 file: standard input

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01009: syntax error: found "dot": 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 6 file: standard input

--//如果仔细看报错信息,RMAN-01008: the bad identifier was: reco,昨天学习如何看这种错误,采用从底向上的方式查看.
--//于是采用copy&paste的方式检查发现没有错误,难道10g支持脚本这样的检查方式吗?于是我取消@与reco.rman之间的空格(在这步我浪
--//费大量的时间):

RMAN> @reco.rman
RMAN> run
2> {
3> set until time '2016-12-03 04:00:00';
4> allocate channel c1 type disk;
5> allocate channel c2 type disk;
6> allocate channel c3 type disk;
7> restore database;
8> recover database;
9> release channel c1;
10> release channel c2;
11> release channel c3;
12> }
The cmdfile has no syntax errors
RMAN> **end-of-file**

--Ok,原来这样的检查方式不能在@与脚本文件之间存在空格.另外如果真正执行也是一样,不能在@与脚本文件之间存在空格.大家可以自行测试.

4.继续测试在11g的情况.
SYS@book> @ &r/ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

$ rlrman checksyntax
Recovery Manager: Release 11.2.0.4.0 - Production on Wed Dec 14 11:02:24 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
connected to target database: BOOK (DBID=1337401710)

RMAN> @ reco.rman
RMAN> run
2> {
3> set until time '2016-12-03 04:00:00';
4> allocate channel c1 type disk;
5> allocate channel c2 type disk;
6> allocate channel c3 type disk;
7> restore database;
8> recover database;
9> release channel c1;
10> release channel c2;
11> release channel c3;
12> }
The cmdfile has no syntax errors
RMAN> **end-of-file**

RMAN> @reco.rman
RMAN> run
2> {
3> set until time '2016-12-03 04:00:00';
4> allocate channel c1 type disk;
5> allocate channel c2 type disk;
6> allocate channel c3 type disk;
7> restore database;
8> recover database;
9> release channel c1;
10> release channel c2;
11> release channel c3;
12> }
The cmdfile has no syntax errors
RMAN> **end-of-file**

--//很明显11g已经修复了这个bug,可以在@与脚本文件加入空格.这个错误我浪费了1个多小时,晚下班半个小时,oracle真是处处是陷阱.

5.补充在10g的测试:
$ rlrman
run
{
  allocate channel c1 device type DISK;
  allocate channel c2 device type DISK;
  #list backup summary;
  release channel c1;
  release channel c2;
}

RMAN> @ r.rman
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01009: syntax error: found "identifier": 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-01008: the bad identifier was: r
RMAN-01007: at line 1 column 2 file: standard input

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01009: syntax error: found "dot": 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 3 file: standard input

RMAN> @r.rman
RMAN> run
2> {
3>   allocate channel c1 device type DISK;
4>   allocate channel c2 device type DISK;
5> #   list backup summary;
6>   release channel c1;
7>   release channel c2;
8> }
using target database control file instead of recovery catalog
allocated channel: c1
channel c1: sid=484 devtype=DISK

allocated channel: c2
channel c2: sid=483 devtype=DISK

released channel: c1

released channel: c2

RMAN> **end-of-file**

--//以后注意10g,rman下脚本执行时@与脚本文件之间不能带空格.
--//另外大家可以看看我以前写的blog http://blog.itpub.net/267265/viewspace-1988542/=> [20160214]rman执行脚本注解问题.txt
--//实际上这个问题再次体现一点,认真看出错信息很重要.我当时就是心里太浮躁.....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值