1.V$SESSION_WAIT?
session在數據庫中當前正在等待什么,每一個連接到實例的session都對應一條記錄。
(2)-V$SESSION_EVENT
記錄了session自啟動起所有的事件。
通過ADDRESS和HASH_VALUE可以為一判定一個SQL
v$sqltext存儲的是完整的SQL,SQL被分割
v$sqlarea存儲的SQL 和一些相關的信息,比如累計的執行次數,邏輯讀,物理讀等統計信息
v$sql存儲的是具體的SQL 和執行計劃相關信息,實際上,v$sqlarea 可以看做 v$sql 根據 sqltext 等 做了 group by 之后的信息
即使是相同的數據庫用戶,若 session 的優化模式、session 級的參數 等不一樣,執行計劃也能不同。
所以即使相同的sql,也可能具有不同的執行計劃!
v$sql join to v$sql_plan 就代表了具體的sql的執行計劃,通過下面3個字段做連接
ADDRESS RAW(4)
HASH_VALUE NUMBER
CHILD_NUMBER NUMBER
而v$SQLAREA 忽略了 執行計劃 等差異,只是在形式上sql文本看起來一樣!相當于做了個聚合,是多個不同執行計劃的sql的聚合和累計信息
v$session_longops:
當事務回滾時,事件被記錄在視圖 V$SESSION_LONGOPS 中,該視圖顯示長期運行的事務。如果進程耗時超過六秒,則記錄出現在該視圖中。
可以通過如下語句查看回滾需要的時間:
select time_remaining from v$session_longops where sid = ;
V$FAST_START_TRANSACTIONS:
在大型的更新期間,實例異常關閉,或spid異常中斷,發生故障的事務被回滾。如果啟用了用于并行恢復的初始化參數值,則回滾是并行地而不是串行地發生。
視圖 V$FAST_START_TRANSACTIONS 顯示為回滾故障事務所產生的事務。類似的視圖 V$FAST_START_SERVERS 顯示對回滾進行處理的并行查詢服務器的數量。
select * from v$fast_start_transactions;
可通過UNDOBLOCKSDONE、UNDOBLOCKSTOTAL估算回滾時間。
當我們想查看當前session的sid時經常會用到這兩個function,此外也可通過這兩個function查詢當前session的更多信息。
such as:
select userenv('sid') from dual;
select sys_context('userenv', 'sid') from dual;
select sys_context('userenv', 'session_user') from dual;
select sys_context('userenv', 'ip_address') from dual;
sys_context包含了userenv的所有功能,詳細參數參看:
userenv:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions208.htm#SQLRF06157
sys_context:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions165.htm#SQLRF06117
spool 生成純凈文件
1.創建sql文件,該文件包含格式相關的參數設置和腳本生成語句
例:
[oracle@db 20090709]$ more exp.sql
set trimspool on --去除重定向(spool)輸出每行的拖尾空格,缺省為off
set term off?? --關閉顯示腳本中的命令的執行結果,防止滾屏影響操作,當數據量大時非常有用,缺省為on
set feedback off --關閉回顯本次sql命令處理的記錄條數,如:** rows selected,缺省為on
set pagesize 0? --設置輸出每頁行數,缺省為24,為了避免分頁,設定為0,使用set head off去除列名時會造成空行
set line 1200?? --設置輸出每行的字符數,可根據實際情況設置,防止換行
spool userSecurity.sql
@exp_data1.sql
spool off
spool pay.sql
@exp_data2.sql
spool off
@exp_data1.sql、@exp_data2.sql中是select語句
如果不創建該sql腳本,則生成的文件中文件頭尾分別為:
SQL> ....sql語句或@文件
SQL>spool off
補充:當不采用上述方式時,sqlplus -s / as sysdba也可達到效果
2.通過shell或直接sqlplus調用該腳本
例1:
sqlplus / as sysdba
SQL> @exp.sh
例2:
[oracle@db 20090709]$ more exp.sh
#!/bin/sh
sqlplus / as sysdba <<EOF
@exp.sql
EOF
[oracle@db 20090709]$ sh exp.sh
dbms_scheduler調用shell腳本
1.使用sys用戶創建EXECUTABLE類型scheduler。
2.指定shell類型,如:#!/bin/sh
3.shell腳本內設置環境變量
[oracle@dbathree qxy]$ more check_env.sh
#!/bin/sh
env | sort | tee >> /orahome/qxy/env.out
執行后可以看到:
[oracle@dbathree qxy]$ more env.out
PWD=/
SHLVL=1
_=/bin/env
4.腳本中使用全路徑
如果想使用其它用戶可以通過grant create external job to user_name實現,但好像10g有bug,沒調試成功。
創建語句:
begin
dbms_scheduler.create_job(job_name??????? => 'sys.test_schem',
??????????????????????????? job_type??????? => 'EXECUTABLE',
??????????????????????????? job_action????? => '/orahome/qxy/test_schem.sh',
??????????????????????????? start_date????? => trunc(sysdate) + 16 / 24 +
?????????????????????????????????????????????? 44 / 60 / 24,
??????????????????????????? enabled???????? => true,
??????????????????????????? comments??????? => 'expdp busi02!');
end;
執行腳本:
[oracle@dbathree qxy]$ more test_schem.sh
#!/bin/bash
export ORACLE_SID=busi
export ORACLE_BASE=/orahome/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export PATH=$ORACLE_HOME/bin:$PATH
expdp system/oracle dumpfile=busi020616.dmp directory=DUMP_FILE schemas=busi02
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
