手动创建数据库的一点问题ORA-02165

今天有朋友反映,在执行 手工建库命令之后 报错退出,抛出“ORA-02165”错误。这是一个“既简单有复杂”的故障。之所以说它复杂,就是因为在 数据库创建脚本中涉及的语句众多,很难一时间定位问题的出处,进而浪费了大量的时间;说它简单是因为我们有一些小技巧协助我们很快地定位这类错误。介绍在此,供参考。

1.手工建库脚本运行报错提示信息
SQL> CREATE DATABASE secdb
  2     USER SYS IDENTIFIED BY oracle1
  3     USER SYSTEM IDENTIFIED BY oracle1
  4     LOGFILE GROUP 1 ('/u01/app/oracle/oradata/secdb/lfile/redo01a.log') SIZE 100M,
  5             GROUP 2 ('/u01/app/oracle/oradata/secdb/lfile/redo02a.log') SIZE 100M,
  6             GROUP 3 ('/u01/app/oracle/oradata/secdb/lfile/redo03a.log') SIZE 100M
  7     MAXLOGFILES 30
  8     MAXLOGMEMBERS 5
  9     MAXLOGHISTORY 1
10     MAXDATAFILES 100
11     MAXINSTANCES 1
12     CHARACTER SET US7ASCII
13     NATIONAL CHARACTER SET AL16UTF16
14     DATAFILE '/u01/app/oracle/oradata/secdb/dfile/system01.dbf' SIZE 325M REUSE
15     EXTENT MANAGEMENT LOCAL
16     SYSAUX DATAFILE '/u01/app/oracle/oradata/secdb/dfile/sysaux01.dbf' SIZE 325M REUSE
17     DEFAULT TABLESPACE tbs_1 DATAFILE '/u01/app/oracle/oradata/secdb/dfile/tbs_1.dbf size 50m
18     DEFAULT TEMPORARY TABLESPACE tempts1
19        TEMPFILE '/u01/app/oracle/oradata/secdb/dfile/temp01.dbf'
20        SIZE 20M REUSE
21     UNDO TABLESPACE undotbs
22        DATAFILE '/u01/app/oracle/oradata/secdb/dfile/undotbs01.dbf'
23        SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
      TEMPFILE '/u01/app/oracle/oradata/secdb/dfile/temp01.dbf'
                *
ERROR at line 19:
ORA-02165: invalid option for CREATE DATABASE


请给大家暂停先不要向下看,仔细观察一下上面的创建数据库的命令,问题到底出在哪里呢?

……自行思考时间……

……自行思考时间……

……自行思考时间……

……自行思考时间……

……自行思考时间……

……自行思考时间……

……时间到!是不是还是没有思路?……

2.问题原因揭晓
首先这个报错有它本身的误导性,真正出问题的位置不是第19行,而是第17行:数据文件后面缺少一个“ 单引号”!
类似这样的语句错误很难快速的定位并进行处理。有没有比较好的方法避免类似问题的发生呢?答案是肯定的,继续分解。

3.快速定位问题的方法和技巧
解决这类语句结构方面的问题的最好方法便是使用“编辑器的语法高亮显示功能”。可以根据自己的习惯选择编辑器,推荐的编辑器有:vim、UltraEdit、Notepad++等。
在vim中使用 SQL语法高亮的方法是“:set filetype=sql”。

另外一种方法便是将创建数据库的命令拷贝到Toad或PL/SQL Developer等数据库连接工具,这些工具自身便带有SQL语句语法高亮显示的功能。

在使用语法高亮显示之后语句问题便会瞬间浮出水面!
CREATEDATABASEsecdb
USERSYSIDENTIFIEDBYoracle1
USERSYSTEMIDENTIFIEDBYoracle1
LOGFILEGROUP1('/u01/app/oracle/oradata/secdb/lfile/redo01a.log')SIZE100M,
GROUP2('/u01/app/oracle/oradata/secdb/lfile/redo02a.log')SIZE100M,
GROUP3('/u01/app/oracle/oradata/secdb/lfile/redo03a.log')SIZE100M
MAXLOGFILES30
MAXLOGMEMBERS5
MAXLOGHISTORY1
MAXDATAFILES100
MAXINSTANCES1
CHARACTERSETUS7ASCII
NATIONALCHARACTERSETAL16UTF16
DATAFILE'/u01/app/oracle/oradata/secdb/dfile/system01.dbf'SIZE325MREUSE
EXTENTMANAGEMENTLOCAL
SYSAUXDATAFILE'/u01/app/oracle/oradata/secdb/dfile/sysaux01.dbf'SIZE325MREUSE
DEFAULTTABLESPACEtbs_1DATAFILE'/u01/app/oracle/oradata/secdb/dfile/tbs_1.dbf size 50m
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/app/oracle/oradata/secdb/dfile/temp01.dbf'
SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE '/u01/app/oracle/oradata/secdb/dfile/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

语句上的错误此时已经很容易定位。

4.故障处理
既然问题已经定位,处理的方法便非常简单,将 缺失的单引号补全后执行便可。

5.小结
对于一名优秀的DBA,细心是最重要的基本素质!与此同时,好的方法和技巧可以大大减少出错的几率。
当故障来临时,我们应该做到沉着、冷静,往往变通一下便会柳暗花明!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值