顯示具有 oracle 標籤的文章。 顯示所有文章
顯示具有 oracle 標籤的文章。 顯示所有文章

2021年8月12日 星期四

學習心得 : 查詢Oracle當前交易處理時間

 問題描述

查詢Oracle當前交易處理時間

解決方式

1. 正執行交易指令

SELECT T1.SID,T1.SQL_ID, T1.USERNAME, T2.XIDUSN, T2.USED_UREC, T2.USED_UBLK,T2.START_TIME,SQL_TEXT 

FROM V$SESSION  T1, V$TRANSACTION T2 , V$SQL T3

WHERE T1.SADDR = T2.SES_ADDR   AND T1.SQL_HASH_VALUE=T3.HASH_VALUE;

2. 交易語法執行完成但尚未COMMIT或ROLLBACK

SELECT T1.SID,T1.USERNAME, T2.XIDUSN, T2.USED_UREC, T2.USED_UBLK,T2.START_TIME

FROM V$SESSION  T1, V$TRANSACTION T2

WHERE T1.SADDR = T2.SES_ADDR;



此外SQL DEVELOPER的Real-Time SQL Monitoring報表可查詢執行時間超過5秒的SQL指令,不論是否有交易,執行完成或與執行中都會紀錄於V$SQL_MONITOR,並保留一段時間。






2021年7月7日 星期三

經驗分享:如何確認還有SESSION執行交易

問題描述

當Oracle執行DML時,我要怎麼確認交易尚未結束(Commit Or Rollback)

解決方式


1.建立兩個session,並針對資料表執行Insert



2.使用語法查詢交易狀態,查詢到有兩個Session正進行交易

select t1.sid, t1.username, t2.xidusn, t2.used_urec, t2.used_ublk

from v$session  t1, v$transaction t2

where t1.saddr = t2.ses_addr;


3.COMMIT再次查詢,已無任何交易




2014年3月29日 星期六

使用SQL*Loader匯入資料到Oracle資料庫

問題:
今天早上同事要我幫忙匯入資料到Oracle資料庫,丟了一個CSV檔給我,我要如何將CSV檔匯入到Oracle資料庫呢?

解答:
使用SQL*Loader可以將CSV檔匯入到資料庫。
那甚麼是SQL*Loader?
SQL*Loader 是一個將外部資料(TXT,CSVExcel)大量匯入到Oracle資料庫的一個工具。

Step01 確認資料內容:
範例資料內容如下:
檔名:data1.dat,請確認檔案路徑。
內容:
userid,names,dep
1,ryo,rddep
2,"william liu",sadep
3,"ryo.lu",sddep

Step02 撰寫SQL*Loader指令:
範例語法:
OPTIONS (SKIP=1)
load data
 infile '/home/oracle/script/data1'
 into table emp
 fields terminated by "," optionally enclosed by '"'
 ( userid, names, dep )

Step03 執行SQL*Loader指令:
範例指令:sqlldr william/william@william control=sqlloaddata.ctl

Step04 檢視結果


搞定


結論:SQL*Loader 是一個將外部資料(TXT,CSVExcel)大量匯入到Oracle資料庫的一個工具,如果有外部資料可以使用SQL*Loader匯入到Oracle資料庫(目前測試可以匯入的檔案類型為CSVXLS)

2014年3月23日 星期日

如何在Oracle建立帳號(USER),並給予DBA的權限。

方法:使用Create UserGRANT語法
Step1:首先使用system連線到資料庫。

Step2:建立一個檔案並輸入SQL語法,本範例檔案名稱為createuser.sql
語法如下:
-- CREATE USER SQL
CREATE USER william
IDENTIFIED BY william
DEFAULT TABLESPACE "USERS"
TEMPORARY TABLESPACE "TEMP";

-- ROLES
GRANT DBA TO william;

Step3 執行createuser.sql

Step4:測試連線,輸入帳號密碼,如果顯示Connected,代表連線成功。


結論:Create User可以建立使用者帳號,並可以透過GRANT語法給予DBA的權限。

如何列出Oracle內所有的Database名稱?

問題:我想要知道在Oracle Instance下有多少個Database,我該如何做呢?

解答:使用/etc/oratab即可查出所有的Database


STEP1 檢視/etc/oratab

STEP2 建立Shell
#!/bin/bash
cat /etc/oratab | grep -v "^#"| grep -v "^$" | cut -f 1 -d:

STEP3 執行Shell即可檢視所有DB的名稱


結論:/etc/oratab內記錄了DB的名稱,可以使用Shell加以處理方便檢視檔案內容。