[20211206]toad下job建立檢視問題.txt
[20211206]toad下job建立檢視問題.txt
--//上班檢查發現同事建立的job不是很好,使用sys模式執行,我在測試環境演示遇到一些問題,做一個記錄:
1.環境:
SCOTT@book> @ ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
--//首先我跟蹤一下查詢,在sys使用者下執行如下:
Select job, what, log_user, priv_user, schema_user,
last_date, this_date, this_sec, next_date,
next_sec, total_time, broken, interval,
failures, nls_env
, instance
from DBA_JOBS
where 1=1
and schema_user = 'SYS'
--//在scott使用者下執行如下:
Select job, what, log_user, priv_user, schema_user,
last_date, this_date, this_sec, next_date,
next_sec, total_time, broken, interval,
failures, nls_env
, instance
from sys.user_jobs
where 1=1
and schema_user = 'SCOTT';
2.測試:
--//我使用sys使用者登入建立job如下,注我建立2次,一次使用current_schema=SCOTT,一次使用current_schema=SYS.
DECLARE
X NUMBER;
user_name varchar2(30);
BEGIN
select user into user_name from dual;
execute immediate 'alter session set current_schema = SCOTT';
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'SCOTT.TEST_JOB_DEPTX;'
,next_date => to_date('05/12/2021 09:35:55','dd/mm/yyyy hh24:mi:ss')
,interval => 'SYSDATE+5/1440 '
,no_parse => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
execute immediate 'alter session set current_schema = ' || user_name ;
EXCEPTION
WHEN OTHERS THEN
execute immediate 'alter session set current_schema = ' || user_name ;
RAISE;
END;
COMMIT;
END;
/
--//這樣在toad下使用schema browser瀏覽,兩個介面都無法發現我建立的job。
SCOTT@book> select * from DBA_JOBS where job in (392,393)
2 @ pr
==============================
JOB : 392
LOG_USER : SYS
PRIV_USER : SYS
SCHEMA_USER : SCOTT
LAST_DATE : 2021-12-06 09:49:18
LAST_SEC : 09:49:18
THIS_DATE :
THIS_SEC :
NEXT_DATE : 2021-12-06 09:54:18
NEXT_SEC : 09:54:18
TOTAL_TIME : 0
BROKEN : N
INTERVAL : SYSDATE+5/1440
FAILURES : 0
WHAT : SCOTT.TEST_JOB_DEPTX;
NLS_ENV : NLS_LANGUAGE='AMERICAN' NLS_TERRITORY='AMERICA' NLS_CURRENCY='$' NLS_ISO_CURRENCY='AMERICA' NLS_NUMERIC_CHARACTERS='.,' NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS' NLS_DATE_LANGUAGE='AMERICAN' NLS_SORT='BINARY'
MISC_ENV : 010200020A000000
INSTANCE : 0
==============================
JOB : 393
LOG_USER : SYS
PRIV_USER : SYS
SCHEMA_USER : SCOTT
LAST_DATE : 2021-12-06 09:47:18
LAST_SEC : 09:47:18
THIS_DATE :
THIS_SEC :
NEXT_DATE : 2021-12-06 09:52:18
NEXT_SEC : 09:52:18
TOTAL_TIME : 0
BROKEN : N
INTERVAL : SYSDATE+5/1440
FAILURES : 0
WHAT : SCOTT.TEST_JOB_DEPTX;
NLS_ENV : NLS_LANGUAGE='AMERICAN' NLS_TERRITORY='AMERICA' NLS_CURRENCY='$' NLS_ISO_CURRENCY='AMERICA' NLS_NUMERIC_CHARACTERS='.,' NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS' NLS_DATE_LANGUAGE='AMERICAN' NLS_SORT='BINARY'
MISC_ENV : 010200020A000000
INSTANCE : 0
PL/SQL procedure successfully completed.
--//上下比較,兩者方式建立並沒有什麼不同。
--//scott使用者在toad下使用sys.user_jobs檢視。
CREATE OR REPLACE FORCE VIEW SYS.USER_JOBS
(
JOB
,LOG_USER
,PRIV_USER
,SCHEMA_USER
,LAST_DATE
,LAST_SEC
,THIS_DATE
,THIS_SEC
,NEXT_DATE
,NEXT_SEC
,TOTAL_TIME
,BROKEN
,INTERVAL
,FAILURES
,WHAT
,NLS_ENV
,MISC_ENV
,INSTANCE
)
AS
SELECT j."JOB"
,j."LOG_USER"
,j."PRIV_USER"
,j."SCHEMA_USER"
,j."LAST_DATE"
,j."LAST_SEC"
,j."THIS_DATE"
,j."THIS_SEC"
,j."NEXT_DATE"
,j."NEXT_SEC"
,j."TOTAL_TIME"
,j."BROKEN"
,j."INTERVAL"
,j."FAILURES"
,j."WHAT"
,j."NLS_ENV"
,j."MISC_ENV"
,j."INSTANCE"
FROM dba_jobs j, sys.user$ u
WHERE j.priv_user = u.name AND u.user# = USERENV ('SCHEMAID');
--//查詢條件除了u.user# = USERENV ('SCHEMAID'),還加了j.priv_user = u.name,導致scoot使用者無法看到job在schema browser瀏覽
--//介面上。
--//而sys使用者查詢DBA_JOBS,但是限定條件是schema_user = 'SYS'。
3.收尾:
--//如何刪除:
SYS@book> @ desc_proc sys dbms_job remove;
INPUT OWNER PACKAGE_NAME OBJECT_NAME
sample : @desc_proc sys dbms_stats gather_%_stats
OWNER PACKAGE_NAME OBJECT_NAME SEQUENCE ARGUMENT_NAME DATA_TYPE IN_OUT DEFAULTED
---------- -------------------- ------------------------------ ---------- -------------------- -------------------- --------- ----------
SYS DBMS_JOB REMOVE 1 JOB BINARY_INTEGER IN N
SYS@book> exec sys.dbms_job.remove(392);
PL/SQL procedure successfully completed.
SYS@book> exec sys.dbms_job.remove(393);
PL/SQL procedure successfully completed.
SYS@book> select * from DBA_JOBS where job in (392,393);
no rows selected
--//實際上這些都是細節問題。實際上如果在sys使用者建立執行如下,就沒有這個問題。
--//注:我的測試環境scott具有dba許可權,執行一樣沒有問題,不過僅僅sys使用者能看到。
DECLARE
X NUMBER;
user_name varchar2(30);
BEGIN
select user into user_name from dual;
execute immediate 'alter session set current_schema = SYS';
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'SCOTT.TEST_JOB_DEPTX;'
,next_date => to_date('05/12/2021 09:35:55','dd/mm/yyyy hh24:mi:ss')
,interval => 'SYSDATE+5/1440 '
,no_parse => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
execute immediate 'alter session set current_schema = ' || user_name ;
EXCEPTION
WHEN OTHERS THEN
execute immediate 'alter session set current_schema = ' || user_name ;
RAISE;
END;
COMMIT;
END;
/
4.總結:
--//這些僅僅是一些細節問題,我們團隊更多依賴toad檢視,這樣可能出現一些問題。
--//另外我們有一些規定就是這些job建立要經過dba的核審來建立,這樣dba並沒有使用者的許可權,這樣只能以sys使用者建立,這樣建立下只能在
--//sys使用者能看見,我個人認為這樣不是很好。
--//在測試結束前我發現sys使用者還是可以看到就是要設定scott在schema browser。這樣查詢條件是
Select job, what, log_user, priv_user, schema_user,
last_date, this_date, this_sec, next_date,
next_sec, total_time, broken, interval,
failures, nls_env
, instance
from DBA_JOBS
where 1=1
and schema_user = 'SCOTT';
--//主要區別普通使用者使用user_XXX 檢視,dba使用者是DBA_XXX檢視。順便說一下我們團隊job管理太亂了。
SYS@127.0.0.1:9105/dbcn> select job,log_user,priv_user,schema_user from dba_jobs where priv_user<>'APEX_030200';
JOB LOG_USER PRIV_USER SCHEMA_USER
---------- ------------------------------ ------------------------------ ------------------------------
61 SYSTEM SYSTEM TOAD
3 SYSTEM SYSTEM PPPPPP
41 SYSTEM SYSTEM PPPPPP_HHH
101 SYSTEM SYSTEM PPPPPP_HHH
121 SYSTEM SYSTEM PPPPPP_HHH
12 SYS SYS SYS
5614 SYS SYS SYS
342 PPPPPP_HHH PPPPPP_HHH PPPPPP_HHH
8 rows selected.
--//有好幾個實際上使用system使用者建立。給維護新增不必要的麻煩。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2845881/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20211206]修改job屬性問題.txt
- [20210114]toad檢視真實執行計劃問題.txt
- [20210205]toad檢視真實執行計劃問題3.txt
- [20181206]toad 12小問題.txt
- [20211229]toad下優化sql語句注意的問題.txt優化SQL
- [20221010]使用toad管理索引改名問題.txt索引
- [20220324]toad與sql profile使用問題.txtSQL
- [20220414]toad呼叫執行指令碼問題.txt指令碼
- [20210418]查詢v$檢視問題.txt
- [20220517]toad使用gather_plan_statistics提示問題.txt
- [20181128]toad連線資料庫的問題.txt資料庫
- [20181006]12c使用toad連線問題.txt
- [20211214]檢視檢視V$ACTIVE_SESSION_HISTORY遇到奇怪問題.txtSession
- [20190531]建立job與commit.txtMIT
- [20181128]toad連線資料庫的問題(補充).txt資料庫
- [20221128]再談防水牆(檢視訪問效能問題).txt
- [20210423]建立檢視以及欄位長度.txt
- [20240313]toad gather_plan_statistics執行計劃相關問題.txt
- toad使用(檢視alert日誌、Database Report)Database
- [20181107]低版本toad連線18c資料庫問題.txt資料庫
- [20231026]bbed檢視索引kd_off結構的問題.txt索引
- [20191213]toad 12下BIND_AWARE提示無效.txt
- [20190320]關於使用smem檢視記憶體使用的問題.txt記憶體
- [20220311]windwos下使用seq與xargs建立多個子目錄問題.txt
- [20211206]分析表取樣最小大小是多少.txt
- [20210126]bash ln建立軟連結問題.txt
- [20220329]windwos下使用seq與xargs建立多個子目錄問題(補充).txt
- [20190118]toad下如何除錯儲存過程和函式.txt除錯儲存過程函式
- [20210205]警惕toad下優化直方圖相關sql語句.txt優化直方圖SQL
- [20230130]toad看執行計劃注意.txt
- [20210722]sqlplus下show recycebin的小問題.txtSQL
- [20180420]windows下使用cmd的小問題.txtWindows
- [20180503]檢視提示使用索引.txt索引
- 問題:PCB檔案PADS檢視不了
- 資料檢視的重複問題
- thinkphp6 檢視問題總結PHP
- [20240911]檢視超長檢視的定義2.txt
- [20230214]資料庫連線訪問asm相關檢視.txt資料庫ASM