oracle 查詢 今天、昨天、本周、本月、本季度的所有記錄

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 查詢昨天記錄專題及常見問題 - CSDN
    Oracle診斷案例-Job任務停止執行昨天接到研發人員報告,資料庫定時任務未正常執行,導致某些操作失敗。開始介入處理該事故.我寫了一小段代碼來驗證這個內容,參考:[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("
  • 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) )往裡面插入幾條學生實體記錄
  • 零基礎學Oracle之4:理解oracle的啟動與關閉
    Oracle資料庫的啟動可以分為四個階段startup順序1) shutdown:沒有啟動,oracle3、 oracle資料庫的關閉關閉資料庫選項shutdown normal4、 排除故障找日誌文件類型:1)alertSID.log有以下這些被記錄資料庫啟動或關閉;非默認值的參數列表(包括參數名稱和參數值,在spfile或pfile
  • mysql查詢前一周的數據_mysql查詢當天的數據 - CSDN
    mysql 昨天 一周前 一月前 一年前的數據 這裡主要用到了DATE_SUB,參考如下代碼如下:SELECT * FROM
  • Oracle資料庫參數優化參考
    下面為一些參數調優參考:一、db_file_multiblock_read_count:oracle讀取數據有兩種方式:1)通過rowid(即索引掃描)2)通過全表掃描如果是全表掃描時,oracle會一次讀取多個blocks,每次讀取的塊數將受初始化參數db_file_multiblock_read_count和作業系統的
  • 零基礎學Oracle之6:Oracle數字字典和動態視圖的理解
    1、 本部分介紹二個內容數字字典和動態視圖。這二個都是一些表,數字字典是一些相對靜態的信息,動態視圖是一些相對動態表。2、數字字典(DD)1)在執行數據定義語言(definition language,DDL)語句或有些數據操縱語言 (data manipulation language ,DML) 語句時會更新數據字典2)有幾個特點存儲在system表空間它是由sys擁有由oracle server自動維護。
  • 零基礎學Oracle之2:開始使用oracle
    零基礎學Oracle之2:開始使用oracle1、 資料庫管理工具OUI:安裝使用,自帶的DBCA:圖形化創建資料庫,初學者使用SQL*PLUS:重點掌握OEM:外圍產品2、 OUI:統一安裝器而oracle則力推java,把java虛擬機內嵌到oracle中。[oracle@wl database]$ ./runInstaller 在資料庫軟體目錄下執行這個安裝,類似於windows的setup
  • Alphabet Inc(GOOG)2020年第三季度收益通話記錄
    感謝您今天加入我們。本季度,我們的表現與更廣泛的在線環境一致。這也證明了我們為改善搜索質量和提供高度相關的體驗而進行的投資,人們無論大小都可以從中尋求幫助。我們發現,所有地區以及大部分垂直領域的廣告客戶支出都有所改善。隨著世界範圍內向在線和數字服務的加速過渡,我們在第三季度也看到了Google Cloud,Play和YouTube訂閱的強勁增長。
  • solr之http請求查詢記錄兩點
    今天犯了兩個很傻的錯誤,特此記錄一下,避免日後再犯:(1) solr提供http請求相關API:平常通過瀏覽器直接訪問:http://192.168.133.129:8983/solr/#/test/query,輸入查詢條件即可,但是由於request
  • 【乾貨】ORACLE-AWR報告分析
    因為關聯表太多的時候,資料庫並不會窮舉所有的執行計劃,這會消耗太多的時間,oracle怎麼知道這條數據是你要的,另一個就不是你要的呢,這是需要cpu來過濾的。內存:SQL語句和執行計劃都需要在內存保留一段時間,還有取到的數據,根據LRU算法也會儘量在內存中保留,在執行SQL語句過程中,各種表之間的連接,排序等操作也要佔用內存。
  • 昨天杭城最高氣溫36.9℃ 本周每天都可能有雷陣雨
    快拍小友 不知道的人 攝  昨天,杭城最高氣溫36.9℃,是今年夏天以來的第14個高溫日。  你是不是已經覺得很熱了?說個好消息讓你鬆一口氣吧。杭州市氣象臺說,昨天,可能是本周最熱的一天。  昨天傍晚,市氣象臺依然發布了高溫報告:因為受副熱帶高壓影響,今明兩天,杭州以晴熱高溫天氣為主,最高氣溫可達35-37℃。
  • 日本消費者事務署:去年加密貨幣交易和初始硬幣產品查詢次數是前...
    本周,日本金融廳(FSA)舉辦了第二次加密貨幣交易所研究會議,日本消費者事務署在會議上披露相關數據,也展示了日本人對加密貨幣行業領域的興趣和關注正在大幅增加。日本金融廳援引了日本消費者事務署的數據,並表示去年共有2769次本地查詢,基本上均是普通消費者就一般加密貨幣相關提議提交的。相比之前,過去三年的查詢數據分別是:2016年為847筆,2015年為440筆,2014年為186筆。值得注意的是,前三年的查詢總數還不到去年一年查詢總量的一半。
  • 今天是本周最暖和的一天 明天開始又要降溫
    相比起來,今天就要算是本周最「暖和」的一天了,今天杭州陰天,偶有小雨,白天最高氣溫16℃,早晨最低氣溫10℃。和前兩天相比,今天杭州的氣溫有所回升,最高氣溫升至16℃的樣子。但這樣的升溫也只是曇花一現,今天夜裡開始到明天,受又一股冷空氣影響,杭州的氣溫將再次下跌。明天開始直到月底,氣溫總體是下降趨勢,最高氣溫10℃出頭,而最低氣溫將降至6-7℃,再次創下入秋以來的新低。 不過接下來總算有個好消息傳來。
  • 今天白銀期貨走勢查詢-白銀期貨...
    周二(11月24日)中國白銀期貨今天價格如何?今天白銀期貨開盤報5030元/千克,期銀今天價格最高上探5049元/千克,最低觸及4852元/千克,截至發稿,滬銀主力報4899元/千克,上漲幅度-3.68%。
  • 網上如何查詢徵信,個人徵信記錄查詢網站
    網上如何查詢徵信,個人徵信記錄查詢網站 2020年11月13日 10:36作者:網絡編輯:王動 如何查詢個人信用報告及個人信用報告網上查詢解讀1、央行查詢個人徵信報告到當地中國人民銀行,領取《個人信用報告查詢申請表》並填寫,取號等待查詢。
  • 踩坑oracle dbms_job簡單使用
    用sql創建時必須顯示指定,系統會自己算(Pass:此處指oracle資料庫的系統時間,暗中觀察比實際時間要稍慢,引起原因多種多樣,一時說不清,所以不要大驚小怪即可= =)也就是sysdate,用job window創建時可以不指定,同樣都是默認用創建job的時間。重頭戲之時間設置。
  • 今天倫敦銀行情查詢-倫敦銀
    周二(11月24日)倫敦銀價今天價格走勢如何?倫敦銀今天開盤報23.594美元/盎司,今天倫敦白銀價格格最高上探23.632美元/盎司,最低觸及23.226美元/盎司,倫敦白銀價格目前報23.459美元/盎司,上漲幅度-0.45%。
  • Oracle 19C rac集群靜默安裝操作手冊v2.0 for centos7
    1.3.創建用戶和組創建用戶和組,用戶uid和組gid所有節點需要相同。1.3.1.添加用戶和用戶組1./usr/sbin/groupadd -g 50001 oinstall2./usr/sbin/groupadd -g 50002 dba3./usr/sbin/groupadd -g 50003 oper4.
  • 杭州本周高溫雨水很少 今天是"香桃木日"要有愛哦
    杭州市氣象臺說,本周幾乎天天高溫,是我們熟悉的炎夏感覺。大家得再次做好迎接暑熱的各種準備。因為就目前看來,這一波的炎熱天氣不會「虎頭蛇尾」,而是會充滿耐力地持續上一段時間。  中央氣象臺昨天預測,8月14日之後,長江中下遊轉為晴熱少雨天氣,大部分地區將出現3到5天日最高氣溫在35-37℃的高溫天氣。