語句失敗是指處理SQL語句時出現邏輯失敗。當出現語句失敗時,Oracle Server會自動回退失敗的SQL語句,並且會給使用者返回錯誤碼和錯誤訊息。
1,應用邏輯錯誤
應用邏輯錯誤主要指SQL語句的編寫錯誤。例如在未串連DB的情況下執SQL語句。該類錯誤應該由開發人員解決,而不是DBA的責任。
Example:
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 21 11:51:02 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> select * from emp where rownum < 2;
SP2-0640: 未串連
SQL>
解決方案:需要以正確的使用者串連到Oracle DB,然後再執行相應的SQL語句。
SQL> connect scott/tiger@orcl
已串連。
SQL> set pagesize 50
SQL> set linesize 600
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
SQL>
2,輸入錯誤資料
輸入錯誤資料是指使用者試圖輸入違反約束規則的錯誤。
Example:
SQL> Alter Table EMP Add Constraint CHK_SAL CHECK(SAL>=800 AND SAL<=5000);
表已更改。
SQL> UPDATE EMP SET SAL = 100 WHERE EMPNO = 7788;
UPDATE EMP SET SAL = 100 WHERE EMPNO = 7788
*
第 1 行出現錯誤:
ORA-02290: 違反檢查約束條件 (SCOTT.CHK_SAL)
解決方案:仔細審核要輸入的資料,然後輸入正確的資料重新執行SQL。
SQL> UPDATE EMP SET SAL = 1000 WHERE EMPNO = 7788;
已更新 1 行。
SQL>
3,執行未授權操作
執行未授權操作是指DB使用者試圖執行未被授權的DB操作。
Example:
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 21 13:05:46 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> connect / as sysdba
已串連。
SQL> Create User TEST Identified by TEST;
使用者已建立。
SQL> Grant connect to TEST;
授權成功。
SQL> connect test/test@orcl
已串連。
SQL> select * from scott.emp where rownum < 2;
select * from scott.emp where rownum < 2
*
第 1 行出現錯誤:
ORA-00942: 表或視圖不存在
解決方案:為使用者授予必需的許可權。
SQL> connect scott/tiger@orcl
已串連。
SQL> Grant SELECT On EMP To TEST;
授權成功。
SQL> conn test/test@orcl
已串連。
SQL> select empno, ename from scott.emp where rownum < 2;
EMPNO ENAME
---------- ----------
7369 SMITH
4,超出空間配額
超出空間配額是指使用者在特定資料表空間上所需實際空間超過了該使用者在該資料表空間上可佔用的最大空間。
Example:
SQL> conn / as sysdba
已串連。
SQL> Alter User TEST Quota 3K On Users;
使用者已更改。
SQL> Grant Create Any Table to TEST;
授權成功。
SQL> conn test/test@orcl;
已串連。
SQL> Create Table TableA
2 (
3 ColA varchar2(50),
4 ColB varchar2(100)
5 )
6 TableSpace Users;
Create Table TableA
*
第 1 行出現錯誤:
ORA-01536: 超出資料表空間 'USERS' 的空間限額
解決方案:使用DBA身份登入到DB,使用Alter User語名為使用者指派更多的空間配額,然後重新執行。
SQL> conn / as sysdba
已串連。
SQL> Alter User TEST Quota 50M On Users;
使用者已更改。
SQL> conn test/test@orcl
已串連。
SQL> Create Table TableA
2 (
3 ColA varchar2(50),
4 ColB varchar2(100)
5 )
6 TableSpace Users;
表已建立。
SQL>
5,資料表空間無足夠空間
資料表空間無足夠空間是指當SQL操作需要從資料表空間分配空間時,資料表空間沒有足夠剩餘空間所導致的錯誤。
Example:
SQL> connect new/new@orcl
已串連。
SQL> Grant Select On Stock To Test;
授權成功。
SQL> connect test/test@orcl
已串連。
SQL> insert /*+append*/into tablea value(select colA,colB from new.temp);
insert /*+append*/into tablea value(select colA,colB from new.temp)
*
第 1 行出現錯誤:
ORA-01653: 表 TEST.TABLEA 無法通過 128 (在資料表空間 USERS 中) 擴充
解決方案:擴充資料表空間
SQL> conn / as sysdba
已串連。
SQL> ALTER TABLESPACE "USERS" ADD DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF' SIZE
500M;
資料表空間已更改。
SQL> insert /*+append*/into tablea value(select colA,colB from new.temp);
已建立8045614行。
SQL>