今天有朋友反映,在执行手工建库命令之后报错退出,抛出“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语句语法高亮显示的功能。
在使用语法高亮显示之后语句问题便会瞬间浮出水面!
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE</w:LidThemeComplexScript.
<style. /* Style. Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}
</style.
CREATE DATABASE
secdb
USER
SYS IDENTIFIED BY
oracle1
USER
SYSTEM
IDENTIFIED
BY
oracle1
LOGFILE
GROUP
1 ('/u01/app/oracle/oradata/secdb/lfile/redo01a.log')
SIZE
100M,
GROUP
2 ('/u01/app/oracle/oradata/secdb/lfile/redo02a.log')
SIZE
100M,
GROUP
3 ('/u01/app/oracle/oradata/secdb/lfile/redo03a.log')
SIZE
100M
MAXLOGFILES
30
MAXLOGMEMBERS
5
MAXLOGHISTORY
1
MAXDATAFILES
100
MAXINSTANCES
1
CHARACTER
SET
US7ASCII
NATIONAL
CHARACTER
SET
AL16UTF16
DATAFILE
'/u01/app/oracle/oradata/secdb/dfile/system01.dbf'
SIZE
325M REUSE
EXTENT
MANAGEMENT
LOCAL
SYSAUX
DATAFILE
'/u01/app/oracle/oradata/secdb/dfile/sysaux01.dbf'
SIZE
325M REUSE
DEFAULT
TABLESPACE
tbs_1 DATAFILE '/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,细心是重要的基本素质!与此同时,好的方法和技巧可以大大减少出错的几率。
当故障来临时,我们应该做到沉着、冷静,往往变通一下便会柳暗花明!
Good luck.
secooler
11.05.11
-- The End --
【CREATE DATABASE】因缺失单引号导致手工建库命令执行报错的故障排查
分享好友
分享这个小栈给你的朋友们,一起进步吧。
订阅须知
• 所有用户可根据关注领域订阅专区或所有专区
• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询
• 专区发布评论属默认订阅所评论专区(除付费小栈外)