语法中的可选项顺序写反造成的 ORA-01970错误

简介:

昨天一位网友在看完我曾经录制的《数据库手工备份与克隆》视频后 http://www.boobooke.com/v/bbk1201

发现在做实验的过程当中,创建控制文件的时候出现了一个ORA-01970的错误,后来解决掉但是没有在视频中播放出来。

于是找了一个测试环境,重现一下这个错误。

首先找到一个LINUX服务器,已经存在一个数据库(未使用归档模式,这里只为了重现一下这个错误)。

1.关闭掉这个数据库,把系统表空间拷贝到新建的目录。

2.新建一个初始化参数文件,修改目录地址,控制文件地址。

3.export ORACLE_SID=newdb

4.startup nomount

5.新建控制文件

CREATE CONTROLFILE SET REUSE DATABASE "newdb" NORESETLOGS NOARCHIVELOG MAXLOGFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 32 MAXINSTANCES 1 MAXLOGHISTORY 449LOGFILE GROUP 1 '/path/oracle/dbs/t_log1.f' SIZE 5M, GROUP 2 '/path/oracle/dbs/t_log2.f' SIZE 5MDATAFILE '/path/oracle/dbs/system01.f'CHARACTER SET UTF8;

6.报出异常

CREATE CONTROLFILE set reuse DATABASE “test” RESETLOGS ARCHIVELOG

*

ERROR at line 1:

ORA-01970: You must specify a database name for CREATE CONTROLFILE

排错:

注意看到SET  REUSE,不注意的话就觉得没有问题,但是看看语法,其实是有顺序的。

CREATE CONTROLFILE [ REUSE ] [ SET ] DATABASE database [ logfile_clause ] { RESETLOGS | NORESETLOGS } [ DATAFILE file_specification [, file_specification ]... ] [ { MAXLOGFILES integer | MAXLOGMEMBERS integer | MAXLOGHISTORY integer | MAXDATAFILES integer | MAXINSTANCES integer | { ARCHIVELOG | NOARCHIVELOG } | FORCE LOGGING } [ MAXLOGFILES integer | MAXLOGMEMBERS integer | MAXLOGHISTORY integer | MAXDATAFILES integer | MAXINSTANCES integer | { ARCHIVELOG | NOARCHIVELOG } | FORCE LOGGING ]... ] [ character_set_clause ] ;

实际上问题就出在REUSE和SET的顺序上

让我们看看解释:

REUSE

Specify 

REUSE

 to indicate that existing control files identified by the initialization parameter 

CONTROL_FILES

can be reused, overwriting any information they may currently contain. If you omit this clause and any of these control files already exists, then Oracle Database returns an error.

SET

Use 

SET

 

DATABASE

 to change the name of the database. The name of a database can be as long as eight bytes.

把SET和REUSE的顺序颠倒就OK了,如果控制文件不存在的话把REUSE去掉也行.

CREATE CONTROLFILE REUSE SET DATABASE "newdb" NORESETLOGS NOARCHIVELOG MAXLOGFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 32 MAXINSTANCES 1 MAXLOGHISTORY 449LOGFILE GROUP 1 '/path/oracle/dbs/t_log1.f' SIZE 5M, GROUP 2 '/path/oracle/dbs/t_log2.f' SIZE 5MDATAFILE '/path/oracle/dbs/system01.f'CHARACTER SET UTF8;

这个问题告诉我们,语法一定要严谨。

相关文章
|
4月前
|
SQL Oracle 关系型数据库
Oracle之如何处理空值
Oracle之如何处理空值
51 0
|
3月前
|
SQL Oracle 关系型数据库
Oracle PL/SQL 第二章--块结构与标识符
Oracle PL/SQL 第二章--块结构与标识符
|
5月前
|
SQL Oracle 关系型数据库
Oracle 插入时间时 ,报错:ORA-01861: 文字与格式字符串不匹配
Oracle 插入时间时 ,报错:ORA-01861: 文字与格式字符串不匹配
|
5月前
|
Oracle 关系型数据库
ORA-22859 无效的列修改
ORA-22859 无效的列修改
109 0
|
SQL Oracle 关系型数据库
Python 技术篇-操作oracle数据库执行SQL语句报错,提示ORA-00911: 无效字符解决方法
Python 技术篇-操作oracle数据库执行SQL语句报错,提示ORA-00911: 无效字符解决方法
498 0
Python 技术篇-操作oracle数据库执行SQL语句报错,提示ORA-00911: 无效字符解决方法
|
Oracle 关系型数据库 数据库
Oracle语句判断字符串是否为数字及translate函数解析
Oracle语句判断字符串是否为数字及translate函数解析
366 0
|
SQL Oracle 关系型数据库
Oracle 无效对象查询,编译无效对象
编译无效对象 有两种方式: 1、执行sql查询结果 2、脚本编译

热门文章

最新文章