解決思路:
(1)跟蹤執行插入的SQL/預存程序,找到罪魁禍首的行,修改後再次插入。
(2)最簡單的辦法就是增加目的欄位的精度。
由於定位不到具體的表以及具體的欄位,需要跟蹤錯誤
1、首先進行建立表
SQL> create table t (many number(4,2));
Table created
精度為4,刻度為2 也就說整數位元最多為2,小數位元會佔去2位
2、然後進行實驗插入
SQL> insert into t values(1000000);
錯誤:
ORA-01438: value larger than specified precision allowed for this column
出現錯誤
3、進行系統設定改變進行TRACE
alter system set events='1438 trace name Errorstack forever,level 10';
4、新開一個會話(我覺得這樣的改變只對隨後的會話起作用,並不會對設定前的會話起作用)進行類比錯誤。
SQL> insert into tony.t values(100000000);
錯誤:
ORA-01438: value larger than specified precision allowed for this column
5、在後台系統
[Oracle@localhost udump]$ pwd
/home/oracle/admin/ORCL/udump
[oracle@localhost udump]$ ls
ORCL_ora_5035.trc
還可以通過SQL指令碼尋找產生的trace檔案:
SELECT a.VALUE || b.symbol || c.instance_name || '_ora_' || d.spid || '.trc'
trace_file
FROM (SELECT VALUE
FROM v$parameter
WHERE name = 'user_dump_dest') a,
(SELECT SUBSTR (VALUE, -6, 1) symbol
FROM v$parameter
WHERE name = 'user_dump_dest') b,
(SELECT instance_name FROM v$instance) c,
(SELECT spid
FROM v$session s, v$process p, v$mystat m
WHERE s.paddr = p.addr AND s.sid = m.sid AND m.statistic# = 0) d
找到了TRACE檔案,當然我是先清空了所有以前的TRACE如果很多的話可以使用
ls -lrt 進行排序找最近的TRC檔案。
6、查看TRACE檔案
[oracle@localhost udump]$ more ORCL_ora_5035.trc
檔案很多內容,我所用到的只有前面幾行。
ORA-01438: value larger than specified precision allowed for this column
Current SQL statement for this session:
insert into tony.t
values(100000000)
順利找到語句.
最後加一句如果想DISABLE掉可以使用
SQL> alter system set events='1438 trace name Errorstack off';
System altered
附件:Table 2-2 Storage of Scale and Precision
Actual Data |
Specified As |
Stored As |
123.89 |
NUMBER |
123.89 |
123.89 |
NUMBER(3) |
124 |
123.89 |
NUMBER(6,2) |
123.89 |
123.89 |
NUMBER(6,1) |
123.9 |
123.89 |
NUMBER(3) |
exceeds precision |
123.89 |
NUMBER(4,2) |
exceeds precision |
123.89 |
NUMBER(6,-2) |
100 |
.01234 |
NUMBER(4,5) |
.01234 |
.00012 |
NUMBER(4,5) |
.00012 |
.000127 |
NUMBER(4,5) |
.00013 |
.0000012 |
NUMBER(2,7) |
.0000012 |
.00000123 |
NUMBER(2,7) |
.0000012 |
1.2e-4 |
NUMBER(2,5) |
0.00012 |
1.2e-5 |
NUMBER(2,5) |
0.00001 |
SPFILE 錯誤導致資料庫無法啟動(ORA-01565)
ORA-01172、ORA-01151錯誤處理
ORA-00600 [2662]錯誤解決