【CREATE DATABASE】因缺失單引號導致手工建庫命令執行報錯的故障排查
今天有朋友反映,在執行手工建庫命令之後報錯退出,丟擲“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-NONECREATE 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 --
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-NONECREATE 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 --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-695060/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【故障處理】因GREP“花哨”功能導致ORA-12157錯誤的排查過程
- pymysql 非執行緒安全導致的故障.MySql執行緒
- 因為CPU數變化導致執行sar命令報錯:Invalid system activity file: /var/log/sa/saxx
- Openstackneutron報錯503故障排查
- 【故障恢復】因spfile修改錯誤導致資料庫無法啟動的恢復方法資料庫
- ./mongod命令執行報錯Go
- 執行srvctl命令報錯
- 因壞道問題導致的硬碟故障如何進行資料恢復?硬碟資料恢復
- mysqldump缺失-q引數導致mysql被oom幹掉MySqlOOM
- 執行SQL查詢導致磁碟耗盡故障演示SQL
- Oracle 11.2.0.3 Database for AIX bug導致ORA-04030的報錯OracleDatabaseAI
- 故障分析 | 手動 rm 掉 binlog 導致主從報錯
- 【故障處理】 DBCA建庫報錯CRS-2566
- RHEL 6.5環境Oracle 11g R2手工建庫指令碼(create database manually)Oracle指令碼Database
- MacOS 裡執行 sed 命令報錯Mac
- 解決 PBootCMS 中因資料庫名稱錯誤導致的“執行 SQL 發生錯誤!錯誤:no such table: ay_config”問題boot資料庫SQL
- 因為arp 問題導致的vip 故障與解決方案
- db2 create database 命令DB2Database
- 執行dbca命令的時候報錯了
- 一些執行maven命令的報錯Maven
- 故障分析 | MySQL convert 函式導致的字符集報錯處理MySql函式
- Node出錯導致執行崩潰的解決方案
- 執行create table as 報ora-600的錯誤的解決方案
- 11g 最大保護模式 standby database網路故障導致主庫當機模式Database
- 手動create database 的可用命令Database
- 手工建庫
- Abp框架之執行Update-Database 命令系列錯誤框架Database
- ORA-00922: 選項缺失或無效 dbca 建庫報錯
- Jenkins中執行docker命令報錯JenkinsDocker
- mysql執行命令報segmentation fault 錯誤MySqlSegmentation
- DBCA 建庫執行報錯ora-12547 ----深刻的教訓
- Bitcode導致的編譯報錯編譯
- java由於越界導致的報錯Java
- 記一次,因表變數導致SQL執行效率變慢變數SQL
- 動態建立 @ViewChild 導致執行時錯誤的原因分析View
- 【故障處理】手工刪除歸檔日誌導致RMAN備份時報ORA-19625錯誤
- MySQL 8.0因關閉Gtid 引發從庫故障MySql
- 手工建庫與dbca建庫