oracle 查詢昨天記錄專題及常見問題 - CSDN

2021-01-08 CSDN技術社區

Oracle診斷案例-Job任務停止執行

昨天接到研發人員報告,資料庫定時任務未正常執行,導致某些操作失敗。

開始介入處理該事故.

系統環境:

SunOS DB 5.8 Generic_108528-21 sun4u sparc SUNW,Ultra-4

Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production

1.首先介入檢查資料庫任務

$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.3.0 - Production on Wed Nov 17 20:23:53 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to:

Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.3.0 - Production

SQL> select job,last_date,last_sec,next_date,next_sec,broken,failures from dba_jobs;

JOB LAST_DATE LAST_SEC NEXT_DATE NEXT_SEC B FAILURES INTERVAL

---- - ---- - - ---

31 16-NOV-04 01:00:02 17-NOV-04 01:00:00 N 0 trunc(sysdate+1)+1/24

27 16-NOV-04 00:00:04 17-NOV-04 00:00:00 N 0 TRUNC(SYSDATE) + 1

35 16-NOV-04 01:00:02 17-NOV-04 01:00:00 N 0 trunc(sysdate+1)+1/24

29 16-NOV-04 00:00:04 17-NOV-04 00:00:00 N 0 TRUNC(SYSDATE) + 1

30 01-NOV-04 06:00:01 01-DEC-04 06:00:00 N 0 trunc(add_months(sysdate,1),'MM')+6/24

65 16-NOV-04 04:00:03 17-NOV-04 04:00:00 N 0 trunc(sysdate+1)+4/24

46 16-NOV-04 02:14:27 17-NOV-04 02:14:27 N 0 sysdate+1

66 16-NOV-04 03:00:02 17-NOV-04 18:14:49 N 0 trunc(sysdate+1)+3/24

8 rows selected.

發現JOB任務是都沒有正常執行,最早一個應該在17-NOV-04 01:00:00執行。但是沒有執行。

2.建立測試JOB

create or replace PROCEDURE pining

IS

BEGIN

NULL;

END;

/

variable jobno number;

variable instno number;

begin

select instance_number into :instno from v$instance;

dbms_job.submit(:jobno, 'pining;', trunc(sysdate+1/288,'MI'), 'trunc(SYSDATE+1/288,''MI'')', TRUE, :instno);

end;

/

發現同樣的,不執行。

但是通過dbms_job.run()執行沒有任何問題。

3.進行恢復嘗試

懷疑是CJQ0進程失效,首先設置JOB_QUEUE_PROCESSES為0,Oracle會殺掉CJQ0及相應job進程

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;

等2~3分鐘,重新設置

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 5;

此時PMON會重起CJQ0進程

在警報日誌中可以看到以下信息:

Thu Nov 18 11:59:50 2004

ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;

Thu Nov 18 12:01:30 2004

ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;

Thu Nov 18 12:01:30 2004

Restarting dead background process CJQ0

CJQ0 started with pid=8

但是Job仍然不執行,而且在再次修改的時候,CJQ0直接死掉了。

Thu Nov 18 13:52:05 2004

ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;

Thu Nov 18 14:09:30 2004

ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;

Thu Nov 18 14:10:27 2004

ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;

Thu Nov 18 14:10:42 2004

ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;

Thu Nov 18 14:31:07 2004

ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;

Thu Nov 18 14:40:14 2004

ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;

Thu Nov 18 14:40:28 2004

ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;

Thu Nov 18 14:40:33 2004

ALTER SYSTEM SET job_queue_processes=1 SCOPE=MEMORY;

Thu Nov 18 14:40:40 2004

ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;

Thu Nov 18 15:00:42 2004

ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;

Thu Nov 18 15:01:36 2004

ALTER SYSTEM SET job_queue_processes=15 SCOPE=MEMORY;

4.嘗試重起資料庫

這個必須在晚上進行

PMON started with pid=2

DBW0 started with pid=3

LGWR started with pid=4

CKPT started with pid=5

SMON started with pid=6

RECO started with pid=7

CJQ0 started with pid=8

QMN0 started with pid=9

....

CJQ0正常啟動,但是Job仍然不執行。

5.沒辦法了...

繼續研究...居然發現Oralce有這樣一個bug

1. Clear description of the problem encountered:

slgcsf() / slgcs() on Solaris will stop incrementing after

497 days 2 hrs 28 mins (approx) machine uptime.

2. Pertinent configuration information

No special configuration other than long machine uptime. .

3. Indication of the frequency and predictability of the problem

100% but only after 497 days.

4. Sequence of events leading to the problem

If the gethrtime() OS call returns a value > 42949672950000000

nanoseconds then slgcs() stays at 0xffffffff. This can

cause some problems in parts of the code which rely on

slgcs() to keep moving.

eg: In kkjssrh() does "now = slgcs(&se)" and compares that

to a previous timestamp. After 497 days uptime slgcs()

keeps returning 0xffffffff so "now - kkjlsrt" will

always return 0. .

5. Technical impact on the customer. Include persistent after effects.

In this case DBMS JOBS stopped running after 497 days uptime.

Other symptoms could occur in various places in the code.

好麼,原來是計時器溢出了,一檢查我的主機:

bash-2.03$ uptime

10:00pm up 500 day(s), 14:57, 1 user, load average: 1.31, 1.09, 1.08

bash-2.03$ date

Fri Nov 19 22:00:14 CST 2004

剛好到事發時是497天多一點.ft.

6.安排重起主機系統..

這個問題夠鬱悶的,NND,誰曾想Oracle這都成...

Oracle最後聲稱:

fix made it into 9.2.0.6 patchset

在Solaris上的9206尚未發布...暈.

好了,就當是個經歷吧,如果有問題非常不可思議的話,那麼大膽懷疑Oracle吧,是Bug,可能就是Bug。

重起以後問題解決,狀態如下:

$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.3.0 - Production on Fri Nov 26 09:21:21 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to:

Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.3.0 - Production

SQL> select job,last_date,last_sec,next_date,next_sec from user_jobs;

JOB LAST_DATE LAST_SEC NEXT_DATE NEXT_SEC

---- - ---- -

70 26-NOV-04 09:21:04 26-NOV-04 09:26:00

SQL> /

JOB LAST_DATE LAST_SEC NEXT_DATE NEXT_SEC

---- - ---- -

70 26-NOV-04 09:26:01 26-NOV-04 09:31:00

SQL>

SQL> select * from v$timer;

HSECS

3388153

SQL> select * from v$timer;

HSECS

3388319

SQL>

7.FAQ

一些朋友在Pub上問的問題

Q:對於不同平臺,是否存在同樣的問題?

A:對於不同平臺,存在同樣的問題

因為Oracle使用了標準C函數gethrtime

參考:

http://www.eygle.com/unix/Man.Page.Of.gethrtime.htm

使用了該函數的代碼都會存在問題.

在Metalink Note:3427424.8 文檔中,Oracle定義的平臺影響為:Generic (all / most platforms affected)

Q.計數器溢出,看了看job 中基本都是1天左右執行一次,如果設置 3 天執行一次的 job , 是否出問題的uptime 應該是 497*3 之後呢 ?

A:不會

Oracle內部通過計時器來增進相對時間.

由於Oracle內部hrtime_t使用了32位計數

那麼最大值也就是0xffffffff

0xffffffff = 4294967295

slgcs()是10億分之一秒,溢出在42949672950000000這個點上.

注意,這裡0xffffffff,達到這個值時,本來是無符號整型,現在變成了-1,那麼這個值遞增時,+1 = 0了。

時間就此停住了。我寫了一小段代碼來驗證這個內容,參考:

[oracle@jumper oracle]$ cat unsign.c

#include int main(void){

unsigned int num = 0xffffffff;

printf("num is %d bits long\n", sizeof(num) * 8);

printf("num = 0x%x\n", num);

printf("num + 1 = 0x%x\n", num + 1);

return 0;

}

[oracle@jumper oracle]$ gcc -o unsign.sh unsign.c

[oracle@jumper oracle]$ ./unsign.sh

num is 32 bits long

num = 0xffffffff

num + 1 = 0x0

[oracle@jumper oracle]$

Q:內部時鐘之一應該就是這個吧: v$timer 精確到1/100 秒的數據

沒錯!

注意前面說的:

4. Sequence of events leading to the problem

If the gethrtime() OS call returns a value > 42949672950000000

nanoseconds then slgcs() stays at 0xffffffff. This can

cause some problems in parts of the code which rely on

slgcs() to keep moving.

也就是說如果gethrtime() 作業系統調用返回值大於42949672950000000(單位10億分之一秒)

也就是說Oracle將得到一個cs值為4294967295的時間值

而4294967295值就是0xffffffff

所以當時v$timer的計時也就是:

SQL> select * from v$timer;

HSECS

4294967295

SQL> /

HSECS

4294967295

SQL> /

HSECS

4294967295

SQL>

By eygle on 2004-11-26 14:41 |

Comments (1) |

Case | 101 |

1 Comment

還是有一點不明白,關於v$timer中顯示的時間。是在重啟資料庫的時候清零嗎?我的資料庫上個月剛重啟了,但是現在查看v$timer,接近4094967295。請問是什麼問題?

相關焦點

  • oracle 查詢 今天、昨天、本周、本月、本季度的所有記錄
    Oracle診斷案例-Job任務停止執行昨天接到研發人員報告,資料庫定時任務未正常執行,導致某些操作失敗。開始介入處理該事故.但是通過dbms_job.run()執行沒有任何問題。Q:對於不同平臺,是否存在同樣的問題?
  • oracle查詢過去專題及常見問題 - CSDN
  • 卡方檢驗結果分析專題及常見問題 - CSDN
    簡單統計之後,得到總數和死亡率:此處需要使用到ggbarstats函數,其參數可謂是非常的多,詳細的參數表我放在另一個博客中了,有興趣的朋友可以去看看(https://blog.csdn.net/m0_45248682/article/details/104086729)。
  • mysql 矩陣類型專題及常見問題 - CSDN
    查詢數據模糊查詢LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄。RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。
  • 卡方檢驗相關性專題及常見問題 - CSDN
    那麼有一個問題:協方差數值大小是否代表了相關程度呢?也就是說如果協方差為 100 是否一定比協方差為 10 的正相關性強呢?假如X1、Y1 和 X2、Y2 分別聯合分布圖,如下所示:考察兩個變量的相關關係,首先得看清楚兩個變量都是什麼類型的,統計分析中常見的變量類型有連續型數值變量,無序分類變量、有序分類變量:連續型數值變量:如銷售額、氣溫、工資收入、考試成績;無序分類變量:如性別男和女,血型種類;有序分類變量:如學歷水平小學、初中、高中
  • bootstrap 有統計圖專題及常見問題 - CSDN
    這裡只是藍圖的結構,主要用到的是views.py視圖函數,models.py定義Dashboard類,提供一些查詢方法,以及模板文件dashboard.html。我們只要關注傳入的group_and_count_users這個參數就可以了,這是展示內容所需的數據,來自於資料庫的查詢。
  • pc端的rem布局專題及常見問題 - CSDN
    子元素的float、clear和vertical-align屬性將失效flex布局又叫伸縮布局、彈性布局、伸縮布局、彈性盒子布局採用flex布局的元素稱為flex容器(flex container)簡稱容器,它的所有子元素自動成為容器成員,稱為(flex item)「項目」總之:就是通過給父盒子添加flex屬性,來控制盒子的位置和排列方式父項常見屬性
  • f檢驗 matlab專題及常見問題 - CSDN
    15.71985 15.91986 15.71987 16.71988 15.31989 16.11990 16.2MATLAB實現參考網上多個代碼可得https://www.ilovematlab.cn/thread-246993-1-1.htmlhttps://blog.csdn.net
  • a標籤 href vue專題及常見問題 - CSDN
    Survivor區與Eden區內存為2:8 java -Djava.rmi.server.hostname=主機ip -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremo查詢字符串指的是連結中後邊的問號後的查詢語句
  • 零基礎學Oracle之4:理解oracle的啟動與關閉
    Oracle資料庫的啟動可以分為四個階段startup順序1) shutdown:沒有啟動,oracle3、 oracle資料庫的關閉關閉資料庫選項shutdown normal4、 排除故障找日誌文件類型:1)alertSID.log有以下這些被記錄資料庫啟動或關閉;非默認值的參數列表(包括參數名稱和參數值,在spfile或pfile
  • android啟動頁設計專題及常見問題 - CSDN
    轉載請註明出處:http://blog.csdn.net/wangjihuanghun/article/details/63255144啟動頁幾乎成為了每個app的標配,有些商家在啟動頁中增加了開屏廣告以此帶來更多的收入。
  • mysql查詢前一周的數據_mysql查詢當天的數據 - CSDN
    mysql 昨天 一周前 一月前 一年前的數據 這裡主要用到了DATE_SUB,參考如下代碼如下:SELECT * FROM
  • 零基礎學Oracle之2:開始使用oracle
    零基礎學Oracle之2:開始使用oracle1、 資料庫管理工具OUI:安裝使用,自帶的DBCA:圖形化創建資料庫,初學者使用SQL*PLUS:重點掌握OEM:外圍產品2、 OUI:統一安裝器而oracle則力推java,把java虛擬機內嵌到oracle中。[oracle@wl database]$ ./runInstaller 在資料庫軟體目錄下執行這個安裝,類似於windows的setup
  • mysql昨天的日期時間函數 - CSDN
    mysql時間日期內置函數–非常方便用於查詢今天、昨天、上周,本月,上月,年度查詢等,但是千萬要監控mysql語句的性能,適當加索引優化一下查詢速度哦今天select * from 表名 where to_days(時間欄位名) = to_days(now());
  • Oracle分組查詢group by的用法及講解
    今天我們就以Oracle為例,來講解下分組查詢group by的用法。一,group by 語法規範首先我們準備一張Student表CREATE TABLE STUDENT( SNO VARCHAR2(10) not null,SNAME VARCHAR2(20),SAGE NUMBER(2),SSEX VARCHAR2(5) )往裡面插入幾條學生實體記錄
  • 網上如何查詢徵信,個人徵信記錄查詢網站
    網上如何查詢徵信,個人徵信記錄查詢網站 2020年11月13日 10:36作者:網絡編輯:王動 如何查詢個人信用報告及個人信用報告網上查詢解讀1、央行查詢個人徵信報告到當地中國人民銀行,領取《個人信用報告查詢申請表》並填寫,取號等待查詢。
  • Oracle資料庫參數優化參考
    下面為一些參數調優參考:一、db_file_multiblock_read_count:oracle讀取數據有兩種方式:1)通過rowid(即索引掃描)2)通過全表掃描如果是全表掃描時,oracle會一次讀取多個blocks,每次讀取的塊數將受初始化參數db_file_multiblock_read_count和作業系統的
  • python 顯著性水平專題及常見問題 - CSDN
    年度數據pisa.csv文件記錄了從1975年到1987年測量塔的傾斜,其中lean代表了偏離的角度。在這個任務,我們將嘗試使用線性回歸來估計傾斜率以及解釋其係數和統計數據。R2 = RSS/TSSprint(R2)'''0.987979715684'''T-Distribution統計測驗表明塔的傾斜程度與年份有關係,一個常見的統計顯著性測試是student t-test。這個測試的基礎是T分布,和正態分布很相似,都是鍾型但是峰值較低。
  • cdn邊緣計算專題及常見問題 - CSDN
    您必須說,速度足夠快,而且我從未遇到任何問題! 你猜怎麼了? 他們已經在網絡中處於邊緣並且離您更近了,簡而言之,他們正在使用Content Delivery Network(CDN )。 CDN如何運作? (How does CDN work?)
  • 零基礎學Oracle之6:Oracle數字字典和動態視圖的理解
    2、數字字典(DD)1)在執行數據定義語言(definition language,DDL)語句或有些數據操縱語言 (data manipulation language ,DML) 語句時會更新數據字典2)有幾個特點存儲在system表空間它是由sys擁有由oracle server自動維護。