『壹』 如何用sql准確的判斷一個表上面是否有活動事務
select * from user_tab_columns t where t.table_name=表名 and t.column_name =欄位;
欄位和表名都是大寫哦
『貳』 sql運行問題
sql運行問題?
資料庫運行過程中常見的故障有3類:事物故障、系統故障、介質故障。
恢復策略:
1、事物故障:
發生事務故障時,被迫中斷的事務可能已對資料庫進行丁修改,為了消除該事務對資料庫的影響,要利用日誌文件中所記載的信息,強行回滾該事務,將資料庫恢復到修改前的初始狀態。
為此,要檢查日誌文件中由這些事務所引起的發生變化的記錄,取消這些沒有完成的事務所做的一切改變,這類恢復操作稱為事務撤銷。
2、系統故障:
系統故障的恢復要完成兩方面的工作,既要撤銷所有末完成的事務,還要重做所有已提交的事務,這樣才能將資料庫真正恢復到一致的狀態。
3、介質故障:
介質故障比事務故障和系統故障發生的可能性要小,但這是最嚴重的一種故障,破壞性很大,磁碟上的物理數據和日誌文件可能被破壞,這需要裝入發生介質故障前最新的後備資料庫副本,然後利用日誌文件重做該副本後所運行的所有事務。
「數據故障恢復」和「完整性約束」、「並發控制」一樣,都是資料庫數據保護機制中的一種完整性控制。所有的系統都免不了會發生故障,有可能是硬體失靈,有可能是軟體系統崩潰,也有可能是其他外界的原因,比如斷電等等。
資料庫運行的突然中斷會使資料庫處在一個錯誤的狀態,而且故障排除後沒有辦法讓系統精確地從斷點繼續執行下去。這就要求DBMS要有一套故障後的數據恢復機構,保證資料庫能夠回復到一致的、正確地狀態去。
『叄』 SQL事務概念是什麼,舉個例子說明什麼樣的東西是事務,與程序又有何區別,
資料庫事務是構成單一邏輯工作單元的操作集合。
舉例:轉賬是生活中常見的操作,比如從A賬戶轉賬100元到B賬號。站在用戶角度而言,這是一個邏輯上的單一操作,然而在資料庫系統中,至少會分成兩個步驟來完成:
1、將A賬戶的金額減少100元
2、將B賬戶的金額增加100元。
與程序的區別:一個程序中包含多個事務。在關系資料庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程序。
(3)sql查看是否有事務擴展閱讀:
事務必須具備四個屬性,簡稱ACID屬性:
1、原子性(Atomicity):事務是一個完整的操作。事務的各步操作是不可分的(原子的);要麼都執行,要麼都不執行。
2、一致性(Consistency):當事務完成時,數據必須處於一致狀態。
3、隔離性(Isolation):對數據進行修改的所有並發事務是彼此隔離的,這表明事務必須是獨立的,它不應以任何方式依賴於或影響其他事務。
4、永久性(Durability):事務完成後,它對資料庫的修改被永久保持,事務日誌能夠保持事務的永久性。
『肆』 如何判斷一條SQL是否在事務中
select distinct event from v$session_wait;
檢查等待事件
『伍』 GBase如何查看回滾的事務sql
方法1:通過onstat -u|grep RP;可以獲取相關的sessionid。通過onstat -g ses sid 獲取sql;
方法2:通過onstat -x|grep 「A-R」;可以定位到userthread,例如「686cb9e8」,然後通過onstat -u|grep 「686cb9e8」獲取到sessionid;onstat -x 輸入中的rb_time表示回滾的剩餘時間。
『陸』 如何判斷sql server目前有沒有事務在運行
-- 此語句用於查看最老的活動事務、未完成的分布式事務或復制事務的信息。
dbcc opentran
-- 通過動態管理視圖查看活動事務
select * from sys.dm_tran_active_transactions where transaction_stat=2
『柒』 sql server 2000中,如何查詢事務日誌事務日誌有什麼作用
你好!
1.如果要看日誌內容,sql server下不直接支持,但是可以用LogExplorer(只支持2000)等工具來查看
如果你的意思是想看資料庫在執行什麼語句,可以用Sql profiler
菜單 Tool->Sql Server Profiler
進到Profiler的界面後新建一個跟蹤(new Trace),選擇好你的資料庫和相應的用戶、密碼,然後就可以看到所有傳到Sql Server來執行的語句了。
如果想更多的了解,可以去找些 Sql Server Profiler的資料看下,最好還是自己試幾下,操作很簡單,但是平時開發過程中調試很好用
2.每個 Microsoft® SQL Server™ 2000 資料庫都有事務日誌,用以記錄所有事務和每個事務對資料庫所做的修改。記錄事務及其修改有三個作用:
恢復個別的事務。
如果應用程序發出 ROLLBACK 語句,或者 SQL Server 檢測到錯誤(例如失去與客戶端的通訊),就使用日誌記錄回滾未完成的事務所做的修改。
SQL Server 啟動時恢復所有未完成的事務。
當運行 SQL Server 的伺服器發生故障時,資料庫可能處於這樣的狀態:還沒有將修改從高速緩沖存儲器寫入數據文件,在數據文件內有未完成的事務所做的修改。當啟動 SQL Server 的復本時,它對每個資料庫執行恢復操作。前滾日誌中記錄的、可能尚未寫入數據文件的每個修改。然後回滾在事務日誌中找到的每個未完成的事務,以確保資料庫的完整性。
將還原的資料庫前滾到故障點。
丟失資料庫(在沒有 RAID 驅動器的伺服器上,硬碟驅動器出現故障時可能會出現這種情況)後,可以將資料庫還原到故障點。首先還原上一次的完整資料庫備份或差異資料庫備份,然後將事務日誌備份序列還原到故障點。當還原每個日誌備份時,SQL Server 重新應用日誌中記錄的所有修改以前滾所有事務。當最後的日誌備份還原後,SQL Server 將使用日誌信息回滾到該點未完成的所有事務。
SQL Server 2000 事務日誌的特點是:
事務日誌不是作為一個表實現,而是作為單獨的文件或資料庫內的一組文件實現。日誌高速緩存與數據頁的高速緩沖存儲器分開管理,從而使資料庫引擎內的編碼更簡單、更快速和更可靠。
日誌記錄和頁的格式不必遵守數據頁的格式。
事務日誌可以在幾個文件上實現。可以根據需要定義這些文件為自動增長。這樣可減少事務日誌內空間不足的可能性,同時減少管理開銷。
截斷日誌中未用部分的機制速度快且對事務吞吐量影響最小。
『捌』 sql中什麼是事務啊
(1):事務(Transaction)是並發控制的單位,是用戶定義的一個操作序列。這些操作要麼都做,要麼都不做,是一個不可分割的工作單位。通過事務,SQL
Server能將邏輯相關的一組操作綁定在一起,以便伺服器保持數據的完整性。
(2):事務通常是以BEGIN
TRANSACTION開始,以COMMIT或ROLLBACK結束。
COMMIT表示提交,即提交事務的所有操作。具體地說就是將事務中所有對資料庫的更新寫回到磁碟上的物理資料庫中去,事務正常結束。
ROLLBACK表示回滾,即在事務運行的過程中發生了某種故障,事務不能繼續進行,系統將事務中對資料庫的所有以完成的操作全部撤消,滾回到事務開始的狀態。
(3):事務運行的三種模式:
A:自動提交事務
每條單獨的語句都是一個事務。每個語句後都隱含一個COMMIT。
B:顯式事務
以BEGIN
TRANSACTION顯式開始,以COMMIT或ROLLBACK顯式結束。
C:隱性事務
在前一個事務完成時,新事務隱式啟動,但每個事務仍以COMMIT或ROLLBACK顯式結束。
(4):事務的特性(ACID特性)
A:原子性(Atomicity)
事務是資料庫的邏輯工作單位,事務中包括的諸操作要麼全做,要麼全不做。
B:一致性(Consistency)
事務執行的結果必須是使資料庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
C:隔離性(Isolation)
一個事務的執行不能被其他事務干擾。
D:持續性/永久性(Durability)
一個事務一旦提交,它對資料庫中數據的改變就應該是永久性的。
注:事務是恢復和並發控制的基本單位。
『玖』 SQL 查詢能使用事務嘛合適嘛
事務,就是要麼全部執行,要麼全部不執行。
事務開始
插入表A一個欄位B (主鍵 int 標識 自動增)
<-- 假如這里意外發生了,那麼 最終 A 表不會多一條數據。
然後查詢出 這個表A的 欄位B的值
插入附屬表E 關聯欄位C (int )
<-- 假如這里意外發生了,那麼 最終 A 表 E 表 不會多數據。
結束事務
<-- 假如這里意外發生了,那麼 最終 A 表 E 表,還是有數據的。
==================================================
對於 Oracle 資料庫來說:
事務開始
插入表A一個欄位B (主鍵 int 標識 自動增)
-- 這個時候,只有你,能查詢到你剛才新增的那條記錄。
-- 你新增的,未提交的數據,其他人是看不到的。
然後查詢出 這個表A的 欄位B的值
插入附屬表E 關聯欄位C (int )
-- 這個時候,未提交, 你新增的 表A與表E的數據,只有你這個會話能看到
-- 別人看不到。
結束事務
-- 事務提交以後,別人
SELECT * FROM A
SELECT * FROM E
能夠看到你剛才插入的數據了。
============================
還是Oracle
事務是通過 一種叫 undo 的機制來處理的。
比如
事務開始
插入表A一個欄位B (主鍵 int 標識 自動增)
-- 將數據寫入到 表A的存儲區域
-- 同時記錄 undo 信息, 就是針對你的 INSERT INTO A ... 的SQL
-- undo 的 SQL 是 DELETE FROM A WHERE B=...
然後查詢出 這個表A的 欄位B的值
插入附屬表E 關聯欄位C (int )
-- 將數據寫入到 表E的存儲區域
-- 同時記錄 undo 信息, 就是針對你的 INSERT INTO E ... 的SQL
-- undo 的 SQL 是 DELETE FROM E WHERE C=...
-- 假如這個時候,伺服器重新啟動了
-- 那麼下次伺服器啟動的時候,將把沒有提交的事務 undo掉
-- 也就是執行前面的
-- DELETE FROM A WHERE B=...
-- DELETE FROM E WHERE C=...
結束事務
-- 這個時候,提交事務了,也就是 Commit 了。
-- 將 SCN ( System Change Number)遞增
-- 通過將 SCN 遞增,使得 別的用戶,可以訪問到你新增加的數據。
-- 前面所使用的 undo 空間,將騰出來,給別的用戶使用。
『拾』 SQL 作業 是否存在事務
SQL 作業本身不是隱含事務,可能會部分提交、執行,要想作為事務執行,必須用語句顯式標明。