Oracle失敗──語句失敗

來源:互聯網
上載者:User

       語句失敗是指處理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>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.