當前位置:首頁 » 編程語言 » sql如何形成事務日誌
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql如何形成事務日誌

發布時間: 2022-05-24 19:01:00

1. sql Server事務日誌的幾個常用操作

我們知道,SQL Server事務日誌主要是用來記錄所有事務對資料庫所做的修改,如果系統出現故障,它將成為最新數據的唯一來源。日誌的操作常有以下幾個應用:
一、事務日誌文件LDF的丟失
當我們不小刪除或者LDF文件丟失的時候,資料庫只剩下MDF文件,此時直接通過附加MDF是無法恢復資料庫的,那我們怎麼樣才能恢復資料庫呢?我們可以把SQL Server的日誌文件分為兩種形式:一類是無活動事務的日誌,另一類是有活動事務的日誌,我們分別根據兩種情況來進行資料庫恢復。
1、無活動事務的日誌恢復
當文件並沒有發生活動性的日誌,我們就可以很容易的利用MDF文件就可以直接恢復資料庫了,具體操作方法如下:
1)資料庫要是沒有日誌,就會處於置疑的狀態,我們先可以通過企業管理器中在對應資料庫中點擊右鍵,然後在「所有任務」下選擇「分離資料庫」把資料庫進行分離;
2)利用MDF文件附加資料庫生成新的日誌文件,可用企業管理器中資料庫點擊右鍵選擇「所有任務」下的「附加資料庫」把資料庫附加上。
這樣就可以直接恢復好資料庫了,而如果資料庫的日誌文件中含有活動事務,利用此方法就不能恢復資料庫,所以得使用下面的方法。
2、有活動事務的日誌恢復
當日誌發生了事務的記錄,丟失的時候,我們採用如下的方法來實現:
1)新建一個同名的資料庫,如原資料庫名為MYDB,然後停止SQL Server伺服器,再把資料庫主數據MDF文件移走,然後重新啟動SQL Server伺服器,新建一個同名的資料庫MYDB,然後再停止SQL Server伺服器,把移走的MDF文件再覆蓋回來,然後再重新啟動SQL Server伺服器,在默認的情況下,系統表是不允許被修改的,我們需要運行以下語句才可以,在查詢分析器中,選擇Master資料庫,然後執行:
Sp_configure 'allow updates',1
Reconfigure With Override
接著運行以下語句,把Sysdatabases表中MYDB資料庫的status屬性設為『37268』,把MYDB資料庫設置為緊急模式。
update sysdatabases set status=32768 where name=』MYDB』
然後再把資料庫MYDB設置為單用戶模式,然後重啟SQL Server伺服器,並把資料庫MYDB設為單用戶模式
Sp_dboption 'MYDB','single user', 'true'

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 事務日誌的特點是:
事務日誌不是作為一個表實現,而是作為單獨的文件或資料庫內的一組文件實現。日誌高速緩存與數據頁的高速緩沖存儲器分開管理,從而使資料庫引擎內的編碼更簡單、更快速和更可靠。
日誌記錄和頁的格式不必遵守數據頁的格式。
事務日誌可以在幾個文件上實現。可以根據需要定義這些文件為自動增長。這樣可減少事務日誌內空間不足的可能性,同時減少管理開銷。
截斷日誌中未用部分的機制速度快且對事務吞吐量影響最小。

3. 事務日誌是什麼

事務日誌文件Transaction Log File是用來記錄資料庫更新情況的文件,擴展名為ldf。在 SQL Server 7.0 和 SQL Server 2000 中,如果設置了自動增長功能,事務日誌文件將會自動擴展。一般情況下,在能夠容納兩次事務日誌截斷之間發生的最大數量的事務時,事務日誌的大小是穩定的,事務日誌截斷由檢查點或者事務日誌備份觸發。然而,在某些情況下,事務日誌可能會變得非常大,以致用盡空間或變滿。通常,在事務日誌文件占盡可用磁碟空間且不能再擴展時,您將收到如下錯誤消息:
Error:9002, Severity:17, State:2
The log file for database 』%.*ls』 is full.
除了出現此錯誤消息之外,SQL Server 還可能因為缺少事務日誌擴展空間而將資料庫標記為 SUSPECT。有關如何從此情形中恢復的其他信息,請參見 SQL Server 聯機幫助中的「磁碟空間不足」主題。

另外,事務日誌擴展可能導致下列情形:
· 非常大的事務日誌文件。
· 事務可能會失敗並可能開始回滾。
· 事務可能會用很長時間才能完成。
· 可能發生性能問題。
· 可能發生阻塞現象。

事務日誌擴展可能由於以下原因或情形而發生:
· 未提交的事務
· 非常大的事務
· 操作:DBCC DBREINDEX 和 CREATE INDEX
· 在從事務日誌備份還原時
· 客戶端應用程序不處理所有結果
· 查詢在事務日誌完成擴展之前超時,您收到假的「Log Full」錯誤消息
· 未復制的事務

解決方法 日誌文件滿而造成SQL資料庫無法寫入文件時,可用兩種方法: 一種方法:清空日誌。
1.打開查詢分析器,輸入命令DUMP TRANSACTION 資料庫名 WITH NO_LOG
2.再打開企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮文件--選擇日誌文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了。

另一種方法有一定的風險性,因為SQL SERVER的日誌文件不是即時寫入資料庫主文件的,如處理不當,會造成數據的損失。
1: 刪除LOG.分離資料庫 企業管理器->伺服器->資料庫->右鍵->分離資料庫
2:刪除LOG文件.附加資料庫 企業管理器->伺服器->資料庫->右鍵->附加資料庫
此法生成新的LOG,大小隻有500多K。

注意:建議使用第一種方法。

如果以後,不想要它變大。 SQL2000下使用:在資料庫上點右鍵->屬性->選項->故障恢復-模型-選擇-簡單模型。
或用SQL語句:alter database 資料庫名 set recovery simple

定期對資料庫進行檢查當資料庫文件或日誌文件的未用空間超過其大小的25%時,系統將會自動縮減文件使其未用空間等於25% 當文件大小沒有超過其建立時的初始大小時不會縮減文件縮減後的文件也必須大於或等於其初始大小對事務日誌文件的縮減只有在對其作備份時或將 Truncate log on checkpoint 選項設為True 時才能進行。

注意:一般建立的資料庫默認屬性已設好,但碰到意外情況使資料庫屬性被更改,請用戶清空日誌後,檢查資料庫的以上屬性,以防事務日誌再次充滿

4. SQL2000 事務日誌

首先你要確定事務日誌是否有用,對於資料庫數據比較重要的情況,建議不要直接清理日誌,而是定期備份日誌,備份日誌以後,之前的事務日誌佔用的空間就會變為可分配空間,這樣就會被重新分配後寫入其他事務日誌。事務日誌的作用非常重要,如果資料庫出現異常,需要盡可能的減少數據丟失,可以通過還原最近一次完全備份和之後的事務日誌來彌補。如果你確實不需要事務日誌,可以在資料庫屬性中將故障恢復模式設置為簡單,這樣就不會使日誌不斷增長了。不過如果有一個比較大的事務,日誌文件會按事務的需要進行增長的。另外,可以定期截斷事務日誌,執行
backup log 資料庫名 with no_log

5. sql事務日誌採用什麼的方式

簡介
SQL Server中的事務日誌無疑是SQL Server中最重要的部分之一。因為SQL SERVER利用事務日誌來確保持久性(Durability)和事務回滾(Rollback)。從而還部分確保了事務的ACID屬性.在SQL Server崩潰時,DBA還可以通過事務日誌將數據恢復到指定的時間點。當SQL Server運轉良好時,多了解一些事務日誌的原理和概念顯得並不是那麼重要。但是,一旦SQL SERVER發生崩潰時,了解事務日誌的原理和概念對於快速做出正確的決策來恢復數據顯得尤為重要.本系列文章將會從事務日誌的概念,原理,SQL Server如何使用日誌來確保持久性屬性等方面來談SQL Server的事務日誌.

事務日誌的物理組織構架
事務日誌僅僅是記錄與其對應資料庫上的事務行為和對資料庫修改的日誌文件.在你新建資料庫時,伴隨著資料庫文件,會有一個默認以ldf為擴展名的事務日誌文件. 當然,一個資料庫也可以配有多個日誌文件,但是在邏輯上,他們可以看成一個.
在SQL Server對於日誌文件的管理,是將邏輯上一個ldf文件劃分成多個邏輯上的虛擬日誌文件(virtual log files,簡稱VLFs).以便於管理。用個類比方法來看,日誌文件(ldf)好比一趟火車,每一節車廂都是一個虛擬日誌文件(VLFs):

6. 如何讀懂SQL Server的事務日誌

如何讀懂SQL Server的事務日誌
SQL Server事務日誌主要是用來記錄所存在事務對資料庫所做的修改,可能系統出現故障,它用成為最新數據的唯一來源。日誌的操作常存在下面幾個應用:

一、事務日誌文件LDF的丟失
當不小卸載或者LDF文件丟失的時候,資料庫只剩下MDF文件,這種時候直接通過附加MDF是不可以恢復資料庫的,那大家怎麼樣才能恢復資料庫呢?大家可以把SQL Server的日誌文件分為兩種形式:一類是無活動事務的日誌,另一類是存在活動事務的日誌,大家分別參考兩種情況來進行資料庫恢復。

1、無活動事務的日誌恢復 當文件並無發生活動性的日誌,大家就可以很簡單的使用MDF文件就可以直接恢復資料庫了,具體操作做法如下:
1)資料庫要是無日誌,就會處於臵疑的狀態,大家先可以通過企業管理器中在對應資料庫中點擊右鍵,接下來在‚所存在任務‛下選擇‚分離資料庫‛把資料庫進行分離;
2)使用MDF文件附加資料庫生成新的日誌文件,可用企業管理器中資料庫點擊右鍵選擇‚所存在任務‛下的‚附加資料庫‛把資料庫附加上。
這種就可以直接恢復好資料庫了,而可能資料庫的日誌文件中含存在活動事務,使用此做法就不可以恢復資料庫,所以得使用下面的做法。

7. sql server 中事務日誌與日誌的關系為如何

事務日誌用於記錄所有事務以及每個事務對資料庫所做的修改。事務日誌是資料庫的重要組件,如果系統出現故障,則可能需要使用事務日誌將資料庫恢復到一致狀態
SQL
Server
將某些系統事件和用戶定義事件記錄到
SQL
Server
錯誤日誌和
Microsoft
Windows
應用程序日誌中。這兩種日誌都會自動給所有記錄事件加上時間戳。使用
SQL
Server
錯誤日誌中的信息可以解決
SQL
Server
的相關問題。
事務日誌你是看不到的
而事件日誌可以看到

8. 求:《資料庫》1、什麼是事務日誌,事務日誌包括什麼內容 2、了解SQL的GRANT 和REVOKE語句

事務日誌是一個與資料庫文件分開的文件。它存儲對資料庫進行的所有更改,並全部記錄插入、更新、刪除、提交、回退和資料庫模式變化。事務日誌還稱作前滾日誌或重做日誌。
事務日誌是備份和恢復的重要組件,也是使用 SQL Remote 或 [復制代理] 復制數據所必需的。
在預設情況下,所有資料庫都使用事務日誌。事務日誌的使用是可選的,但是,除非您因特殊原因而不使用,否則您應始終使用它。運行帶有事務日誌的資料庫可提供更強的故障保護功能、更好的性能以及數據復制功能。
每個 Microsoft® SQL Server™ 2000 資料庫都有事務日誌,用以記錄所有事務和每個事務對資料庫所做的修改。記錄事務及其修改有三個作用:
恢復個別的事務。
如果應用程序發出 ROLLBACK 語句,或者 SQL Server 檢測到錯誤(例如失去與客戶端的通訊),就使用日誌記錄回滾未完成的事務所做的修改。
SQL Server 啟動時恢復所有未完成的事務。
當運行 SQL Server 的伺服器發生故障時,資料庫可能處於這樣的狀態:還沒有將修改從高速緩沖存儲器寫入數據文件,在數據文件內有未完成的事務所做的修改。當啟動 SQL Server 的復本時,它對每個資料庫執行恢復操作。前滾日誌中記錄的、可能尚未寫入數據文件的每個修改。然後回滾在事務日誌中找到的每個未完成的事務,以確保資料庫的完整性。
將還原的資料庫前滾到故障點。
丟失資料庫(在沒有 RAID 驅動器的伺服器上,硬碟驅動器出現故障時可能會出現這種情況)後,可以將資料庫還原到故障點。首先還原上一次的完整資料庫備份或差異資料庫備份,然後將事務日誌備份序列還原到故障點。當還原每個日誌備份時,SQL Server 重新應用日誌中記錄的所有修改以前滾所有事務。當最後的日誌備份還原後,SQL Server 將使用日誌信息回滾到該點未完成的所有事務。
SQL Server 2000 事務日誌的特點是:
事務日誌不是作為一個表實現,而是作為單獨的文件或資料庫內的一組文件實現。日誌高速緩存與數據頁的高速緩沖存儲器分開管理,從而使資料庫引擎內的編碼更簡單、更快速和更可靠。
日誌記錄和頁的格式不必遵守數據頁的格式。
事務日誌可以在幾個文件上實現。可以根據需要定義這些文件為自動增長。這樣可減少事務日誌內空間不足的可能性,同時減少管理開銷。
截斷日誌中未用部分的機制速度快且對事務吞吐量影響最小。
GRANT是授予許可權
REVOKE是撤銷許可權
GRANT
名稱
GRANT — 賦予一個用戶,一個組或所有用戶訪問許可權

語法
GRANT privilege [, ...] ON object [, ...]
TO { PUBLIC | GROUP group | username }
輸入
privilege

可能的許可權有:
SELECT
訪問聲明的表/視圖的所有列/欄位.
INSERT
向聲明的表中插入所有列欄位.
UPDATE
更新聲明的表所有列/欄位.
DELETE
從聲明的表中刪除所有行.
RULE
在表/視圖上定義規則 (參見 CREATE RULE 語句).
ALL
賦予所有許可權.
object

賦予許可權的對象名.可能的對象是:
table
view

sequence

PUBLIC
代表是所有用戶的簡寫.
GROUP group
將要賦予許可權的組 group .
username
將要賦予許可權的用戶名.PUBLIC 是代表所有用戶的簡寫.

輸出
CHANGE
如果成功,返回此信息.
ERROR: ChangeAcl: class "object" not found
如果所聲明的對象不可用或不可能對聲明的組或用戶賦予許可權.
描述
GRANT 允許對象的創建者給某用戶或某組或所有用戶(PUBLIC)某些特定的許可權.對象創建後,除了創建者外,除非創建者賦予(GRANT)許可權,其他人沒有訪問對象的許可權.
一旦用戶有某對象的許可權,他就可以使用那個特權.不需要給創建者賦予(GRANT)對象的許可權,創建者自動擁有對象的所有許可權,包括刪除它的許可權.

注意
目前,要想在 Postgres 裡面只賦予幾列許可權,你必須創建一個包含那幾列的視圖(view),然後把許可權賦予那幾個視圖。
使用 psql \z 命令獲取關於現存對象許可權的更多信息:

Database = lusitania
+------------------+---------------------------------------------+
| Relation | Grant/Revoke Permissions |
+------------------+---------------------------------------------+
| mytable | {"=rw","miriam=arwR","group todos=rw"} |
+------------------+---------------------------------------------+
Legend:
uname=arwR -- privileges granted to a user
group gname=arwR -- privileges granted to a GROUP
=arwR -- privileges granted to PUBLIC

r -- SELECT
w -- UPDATE/DELETE
a -- INSERT
R -- RULE
arwR -- ALL
參考 REVOKE 語句廢除訪問許可權.

用法
給所有用戶向表 films 插入記錄的許可權:
GRANT INSERT ON films TO PUBLIC;
賦予用戶 manuel 操作視圖 kinds 的所有許可權:
GRANT ALL ON kinds TO manuel;
兼容性
SQL92
SQL92 GRANT 語法允許對表中的某單獨列/欄位設置許可權,並且允許設置一許可權以賦予別人相同許可權:
GRANT privilege [, ...]
ON object [ ( column [, ...] ) ] [, ...]
TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]
這些欄位與 Postgres 實現是兼容的,除了下面一些例外:
privilege
SQL92 允許聲明附加的許可權:
SELECT
REFERENCES
允許在一個聲明的表的完整性約束中使用某些或全部列/欄位.
USAGE
允許使用一個域,字元集,集合或事務.如果聲明的對象不是表/視圖, privilege 只能聲明為 USAGE.
object
[ TABLE ] table
SQL92 允許一個附加的非功能性關鍵字 TABLE.
CHARACTER SET
允許使用聲明的字元集.
COLLATION
允許使用聲明的集合序列.
TRANSLATION
允許使用聲明的字元集轉換.
DOMAIN
允許使用聲明的域.
WITH GRANT OPTION
允許向別人賦予同樣許可權.

9. 如何使用SQlyog創建主數據文件和事務日誌文件

方法/步驟

  • 打開SQLyog,此時彈出連接界面,點擊【新建】

10. 如何操作SQL Server事務日誌

但是,了解如何恢復資料庫是資料庫管理員技能背景中一個至關重要的組成部分。本文將說明如何把一個SQL Server資料庫回復到恢復一個數據表的時候。情況介紹update或delete語句忘帶了where子句,或where子句精度不夠,執行之後造成了嚴重的後果, 這種情況的數據恢復只能利用事務日誌的備份來進行,所以如果你的SQL沒有進行相應的全庫備份 或不能備份日誌(如果為了不讓日誌文件變大而置trunc. log on chkpt.選項為1),那麼就無法進行數據的恢復了,或者只能恢復到最近一次的備份的數據了。恢復過程注意,在本文中,我假定你的資料庫恢復模式設為FULL。恢復過程的第一步是執行尾日誌備份,(BACKUP LOG Student TO DISK='E:\stulog.dmp' ) 。在恢復一個資料庫之前,為保證上次備份之後發生改變的記錄都包含在恢復過程之中,你可能需要執行這種類型的備份。下一步,你應該查找資料庫備份文件在機器或網路中的存儲位置。如果你要在另一台伺服器上恢復資料庫,最好是把這些文件復制到目標伺服器中。在備份文件所在的位置,找出最後一個完整的資料庫備份(這些文件通常使用.bak為擴展名);你需要恢復這個完整的備份。下面的腳本將完整的備份文件應用於NewDatabase資料庫:RESTORE DATABASE NewDatabaseFROM DISK = 'D: .bak'WITHMOVE 'PreviousDatabase' TO 'D:DataFiles TestDatabase.mdf',MOVE 'PreviousDatabase_log' TO 'D:DataFiles TestDatabase_Log.ldf',NORECOVERY這段腳本指出完整備份文件位於伺服器的D盤中,你正在使用備份文件恢復NewDatabase這個資料庫。腳本中的語句將數據文件和日誌文件從完整備份文件轉移到TestDatabase資料庫的新文件中。腳本中的最後一個語句——NORECOVERY——非常重要。NORECOVERY模式有三種選項,如下所示:NORECOVERY:告訴SQL Server你沒有完成恢復資料庫的過程,隨後會出現恢復文件。當資料庫處於這種狀態時,資料庫還不能使用,因而不允許建立連接。 RECOVERY:告訴SQL Server你已經完成資料庫恢復過程,資料庫即將准備就緒。這是默認選項,也是最常用的選項。 STANDBY:告訴SQL Server當前資料庫還未為完成恢復做好准備,隨後可以使用日誌文件進行恢復。如果必要,你可以使用這個選項為恢復資料庫建立連接。但是,如果當前不存在連接,將來的事務日誌只能應用於資料庫。 一旦你使用NORECOVERY選項恢復了完整備份,你可以開始應用事務日誌備份或差異備份。差異備份差異備份是指對上次完整資料庫備份後資料庫發生的任何改變進行備份。如果你有幾個差異備份,你只需要恢復最後一個備份文件。在這種情況下,並不存在差異備份,因此你可以直接轉向事務日誌備份。事務日誌備份事務日誌備份保留上次事務日誌備份後發生的所有事務的痕跡;它還允許你把資料庫恢復到資料庫發生錯誤之前的一個時間點。事務日誌備份按順序發生,從而建立一個備份鏈。在把一連串事務日誌備份恢復到一個時間點時,事務日誌文件也必須按順序恢復。當你使用一個資料庫維護計劃來建立事務日誌備份時,事務日誌文件名中往往包含一個時間指示器。下面的腳本使用NORECOVERY選項應用三個事務日誌備份,最後一個語句把資料庫恢復到最後一個事務日誌文件的結束點。RESTORE LOG NewDatabaseFROM DISK = ''D: BackupFilesTestDatabase_TransactionLogBackup1.trn'WITH NORECOVERYRESTORE LOG NewDatabaseFROM DISK = ''D: BackupFiles TestDatabase_TransactionLogBackup2.trn'WITH NORECOVERYRESTORE LOG NewDatabaseFROM DISK = ''D: BackupFiles TestDatabase_TransactionLogBackup3.trn'WITH NORECOVERYRESTORE LOG NewDatabaseFROM DISK = ''D: BackupFiles TestDatabase_TransactionLogBackup4.trn'WITH RECOVERY恢復到一個時間點在上面的例子中,你把資料庫恢復到最後一個事務日誌的結束點。如果你想把資料庫恢復到事務日誌結束前的某個特定的時間點,你必須使用STOPAT選項。下面的腳本把日誌序列中的第四個事務日誌恢復到4:01 AM——正好在資料庫出錯之前。RESTORE LOG NewDatabaseFROM DISK = ''D: BackupFiles TestDatabase_TransactionLogBackup4.trn'WITH STOPAT = N'6/28/2007 4:01:45 PM', RECOVERY既然你已經把資料庫恢復到一個你指定的時間點上,現在該是決定如何幫助開發者,使他們的工作更加輕松的時候了。