當前位置:首頁 » 編程語言 » 哪些sql執行需要停機操作
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

哪些sql執行需要停機操作

發布時間: 2022-06-23 08:59:03

A. sql server服務有哪些,怎樣全部停止

服務都在安裝sql時的一個工具里,sql server configuration manager
如果要運行資料庫,必須啟動的應該是:
SQL Server(SQLEXPRESS)
SQL Server(MSSQLSERVER)
SQL Server Browser;
右鍵停止就是了.
net start sql server開啟
net stop sql server關閉

B. sqlserver常用命令行操作(啟動、停止、暫停)

啟動sql
server
Net
Start
MSSqlServer
暫停sql
server
Net
Pause
MSSqlServer
重新啟動暫停的sql
server
Net
Continue
MSSqlServer
停止sql
server
Net
stop
MSSqlServer
命令行方式修改sql
server
sa
的密碼
一直都是使用企業管理器操作sql的,昨天幫一朋友部署網站,租的國外vps主機,登陸上去只看到sql的圖標正常運行的,企業管理器和查詢分析器的影都沒看到,汗一個。。。空間提供商也不給技術支持,暈了,只有自己想辦法了。
今天網上google一下,終於搞定。
在cmd
窗口下
復制代碼
代碼如下:
C:\Documents
and
Settings\Administrator>osql
-E
1>
sp_password
null,'abc123','sa'
2>
go
Password
changed.
1>
exit
大功告成,sa的密碼修改成了abc123
關鍵是osql這個東東,具體查看
http://msdn.microsoft.com/zh-cn/vstudio/ms162806.aspx
SQL
Server
命令行工具
isql

osql
常用命令
命令行操作有時比在圖形界面下用滑鼠還高效,所以高手常用命令行操作,下面簡介SQL
Server
命令行工具
isql

osql。
isql
實用工具使您得以輸入
Transact-SQL
語句、系統過程和腳本文件;並且使用
DB-Library

SQL
Server
2000
進行通訊。
osql
實用工具使您得以輸入
Transact-SQL
語句、系統過程和腳本文件。該實用工具通過
ODBC
與伺服器通訊。

信任連接:
>isql
-E

>osql
-E

察看所有資料庫:
use
master
exec
sp_helpdb
GO

察看資料庫
pubs:
use
master
exec
sp_helpdb
pubs
GO

察看資料庫
pubs
中的對象:
USE
pubs
EXEC
sp_help
GO
相當於
Oracle

SELECT
table_name
FROM
user_objects;

察看資料庫
pubs
中的表
employee
結構:
USE
pubs
EXEC
sp_help
employee
GO
相當於
Oracle

SQL*PLUS
中的
DESC
employees

SELECT
語句:
USE
pubs
SELECT
*
FROM
employee
GO

當使用單引號分隔一個包括嵌入單引號的字元常量時,用兩個單引號表示嵌入單引號,例如:
SELECT
'O''Leary'
GO

用7.個雙引號表示嵌入雙引號,例如:
SELECT
'O"Leary'
GO

SQL
Server
資料庫信息查詢
use
master
exec
sp_helpdb
pubs
GO
或:
use
master
SELECT
name,
dbid
FROM
sysdatabases
GO

查資料庫對象
(相當於
Oracle

SELECT
*
FROM
user_tables;)
USE
pubs
EXEC
sp_help
GO

use
master
SELECT
name,
id
FROM
pubs.dbo.sysobjects
WHERE
type='U'
GO

查欄位
(相當於
Oracle

SQL*PLUS
中的
DESC
employees
)
USE
pubs
EXEC
sp_help
employee
GO

查看指定
USE
pubs
SELECT
name,
id,
xtype,
length
FROM
syscolumns
WHERE
id=277576027
GO
USE
pubs
SELECT
*
FROM
syscolumns
WHERE
id=277576027
GO

查看數據類型名字的定義:
SELECT
name,
xtype
FROM
systypes
GO

從命令行啟動「查詢分析器」
>isqlw

isql命令
描述
GO
執行最後一個
GO
命令之後輸入的所有語句。
RESET
清除已輸入的所有語句。
ED
調用編輯器。
!!
command
執行操作系統命令。
QUIT

EXIT(
)
退出
isql。
CTRL+C
不退出
isql
而結束查詢。
僅當命令終止符
GO(默認)、RESET、ED、!!、EXIT、QUIT

CTRL+C
出現在一行的開始(緊跟
isql
提示符)時才可以被識別。isql
忽視同一行中這些關鍵字後輸入的任何內容。

C. sql語句執行中停止

可以設置一個timeout啊

D. C# 中如何立即停止SQL 語句的執行

可以,如:
string sql ="select * from users";
SqlCommand cmd = new SqlCommand(sql,cnn);
//執行
cmd.ExecuteNonQuery();
//取消
cmd.Cancel();

E. 如何啟動和停止SQL資料庫服務

使用 SQL Server 配置管理器啟動或停止 SQL Server Browser 服務
在「開始」菜單中,右鍵單擊「所有程序」,依次指向「Microsoft SQL Server 2008 R2」、「配置工具」,然後單擊「SQL Server 配置管理器」。
在 SQL Server 配置管理器中,單擊「SQL Server 服務」。
在詳細信息窗格中,右鍵單擊「SQL Server Browser」,然後單擊「啟動」或「停止」。

F. SQL資料庫導出導入時要不要停止服務

導入和導出不需要停止的
如果服務停止了,你沒有啟動SQL。你還怎麼導入和導出呢?
不過復制一定要停止SQL服務

G. 請問下sql裡面 哪些錯誤是要中斷執行,哪些錯誤不中斷執行呀

使用@@error, 就是在的查詢,修改,刪除的時候使用,當你要進行2步或者2步以上的操作,比如,你要刪除一條語句成功後 才插入一條數據,在事物中就會使用@@error,判斷上次請求是否發生錯誤, 主要用於,你認為該語句可能報錯的地方

H. SQL語句執行過程詳解

SQL語句執行過程詳解
一條sql,plsql的執行到底是怎樣執行的呢?
一、SQL語句執行原理:
第一步:客戶端把語句發給伺服器端執行當我們在客戶端執行 select 語句時,客戶端會把這條 SQL 語句發送給伺服器端,讓伺服器端的
進程來處理這語句。也就是說,Oracle 客戶端是不會做任何的操作,他的主要任務就是把客戶端產生
的一些 SQL 語句發送給伺服器端。雖然在客戶端也有一個資料庫進程,但是,這個進程的作用跟伺服器
上的進程作用事不相同的。伺服器上的資料庫進程才會對SQL 語句進行相關的處理。不過,有個問題需
要說明,就是客戶端的進程跟伺服器的進程是一一對應的。也就是說,在客戶端連接上伺服器後,在客戶
端與伺服器端都會形成一個進程,客戶端上的我們叫做客戶端進程;而伺服器上的我們叫做伺服器進程。
第二步:語句解析
當客戶端把 SQL 語句傳送到伺服器後,伺服器進程會對該語句進行解析。同理,這個解析的工作,
也是在伺服器端所進行的。雖然這只是一個解析的動作,但是,其會做很多「小動作」。
1. 查詢高速緩存(library cache)。伺服器進程在接到客戶端傳送過來的 SQL 語句時,不
會直接去資料庫查詢。而是會先在資料庫的高速緩存中去查找,是否存在相同語句的執行計劃。如果在
數據高速緩存中,則伺服器進程就會直接執行這個 SQL 語句,省去後續的工作。所以,採用高速數據緩
存的話,可以提高 SQL 語句的查詢效率。一方面是從內存中讀取數據要比從硬碟中的數據文件中讀取
數據效率要高,另一方面,也是因為這個語句解析的原因。
不過這里要注意一點,這個數據緩存跟有些客戶端軟體的數據緩存是兩碼事。有些客戶端軟體為了
提高查詢效率,會在應用軟體的客戶端設置數據緩存。由於這些數據緩存的存在,可以提高客戶端應用軟
件的查詢效率。但是,若其他人在伺服器進行了相關的修改,由於應用軟體數據緩存的存在,導致修改的
數據不能及時反映到客戶端上。從這也可以看出,應用軟體的數據緩存跟資料庫伺服器的高速數據緩存
不是一碼事。
2. 語句合法性檢查(data dict cache)。當在高速緩存中找不到對應的 SQL 語句時,則服
務器進程就會開始檢查這條語句的合法性。這里主要是對 SQL 語句的語法進行檢查,看看其是否合乎
語法規則。如果伺服器進程認為這條 SQL 語句不符合語法規則的時候,就會把這個錯誤信息,反饋給客
戶端。在這個語法檢查的過程中,不會對 SQL 語句中所包含的表名、列名等等進行 SQL 他只是語法
上的檢查。
3. 語言含義檢查(data dict cache)。若 SQL 語句符合語法上的定義的話,則伺服器進程
接下去會對語句中的欄位、表等內容進行檢查。看看這些欄位、表是否在資料庫中。如果表名與列名不
准確的話,則資料庫會就會反饋錯誤信息給客戶端。所以,有時候我們寫 select 語句的時候,若語法
與表名或者列名同時寫錯的話,則系統是先提示說語法錯誤,等到語法完全正確後,再提示說列名或表名
錯誤。
4. 獲得對象解析鎖(control structer)。當語法、語義都正確後,系統就會對我們需要查詢
的對象加鎖。這主要是為了保障數據的一致性,防止我們在查詢的過程中,其他用戶對這個對象的結構發
生改變。
5. 數據訪問許可權的核對(data dict cache)。當語法、語義通過檢查之後,客戶端還不一定
能夠取得數據。伺服器進程還會檢查,你所連接的用戶是否有這個數據訪問的許可權。若你連接上伺服器
的用戶不具有數據訪問許可權的話,則客戶端就不能夠取得這些數據。有時候我們查詢數據的時候,辛辛苦
苦地把 SQL 語句寫好、編譯通過,但是,最後系統返回個 「沒有許可權訪問數據」的錯誤信息,讓我們氣
半死。這在前端應用軟體開發調試的過程中,可能會碰到。所以,要注意這個問題,資料庫伺服器進程先
檢查語法與語義,然後才會檢查訪問許可權。
6. 確定最佳執行計劃 ?。當語句與語法都沒有問題,許可權也匹配的話,伺服器進程還是不會直接對
資料庫文件進行查詢。伺服器進程會根據一定的規則,對這條語句進行優化。不過要注意,這個優化是有
限的。一般在應用軟體開發的過程中,需要對資料庫的 sql 語言進行優化,這個優化的作用要大大地大
於伺服器進程的自我優化。所以,一般在應用軟體開發的時候,資料庫的優化是少不了的。當伺服器進程
的優化器確定這條查詢語句的最佳執行計劃後,就會將這條 SQL 語句與執行計劃保存到數據高速緩存
(library cache)。如此的話,等以後還有這個查詢時,就會省略以上的語法、語義與許可權檢查的步驟,
而直接執行 SQL 語句,提高 SQL 語句處理效率。
第三步:語句執行
語句解析只是對 SQL 語句的語法進行解析,以確保伺服器能夠知道這條語句到底表達的是什麼意
思。等到語句解析完成之後,資料庫伺服器進程才會真正的執行這條 SQL 語句。這個語句執行也分兩
種情況。
一是若被選擇行所在的數據塊已經被讀取到數據緩沖區的話,則伺服器進程會直接把這個數據傳遞
給客戶端,而不是從資料庫文件中去查詢數據。
若數據不在緩沖區中,則伺服器進程將從資料庫文件中查詢相關數據,並把這些數據放入到數據緩沖
區中(buffer cache)。
第四步:提取數據
當語句執行完成之後,查詢到的數據還是在伺服器進程中,還沒有被傳送到客戶端的用戶進程。所以,
在伺服器端的進程中,有一個專門負責數據提取的一段代碼。他的作用就是把查詢到的數據結果返回給
用戶端進程,從而完成整個查詢動作。從這整個查詢處理過程中,我們在資料庫開發或者應用軟體開發過
程中,需要注意以下幾點:
一是要了解資料庫緩存跟應用軟體緩存是兩碼事情。資料庫緩存只有在資料庫伺服器端才存在,在
客戶端是不存在的。只有如此,才能夠保證資料庫緩存中的內容跟資料庫文件的內容一致。才能夠根據
相關的規則,防止數據臟讀、錯讀的發生。而應用軟體所涉及的數據緩存,由於跟資料庫緩存不是一碼事
情,所以,應用軟體的數據緩存雖然可以提高數據的查詢效率,但是,卻打破了數據一致性的要求,有時候
會發生臟讀、錯讀等情況的發生。所以,有時候,在應用軟體上有專門一個功能,用來在必要的時候清除
數據緩存。不過,這個數據緩存的清除,也只是清除本機上的數據緩存,或者說,只是清除這個應用程序
的數據緩存,而不會清除資料庫的數據緩存。
二是絕大部分 SQL 語句都是按照這個處理過程處理的。我們 DBA 或者基於 Oracle 資料庫的
開發人員了解這些語句的處理過程,對於我們進行涉及到 SQL 語句的開發與調試,是非常有幫助的。有
時候,掌握這些處理原則,可以減少我們排錯的時間。特別要注意,資料庫是把數據查詢許可權的審查放在
語法語義的後面進行檢查的。所以,有時會若光用資料庫的許可權控制原則,可能還不能滿足應用軟體許可權
控制的需要。此時,就需要應用軟體的前台設置,實現許可權管理的要求。而且,有時應用資料庫的許可權管
理,也有點顯得繁瑣,會增加伺服器處理的工作量。因此,對於記錄、欄位等的查詢許可權控制,大部分程
序涉及人員喜歡在應用程序中實現,而不是在資料庫上實現。
DBCC DROPCLEANBUFFERS
從緩沖池中刪除所有清除緩沖區。
DBCC FREEPROCCACHE
從過程緩存中刪除所有元素。
DBCC FREESYSTEMCACHE
從所有緩存中釋放所有未使用的緩存條目
SQL語句中的函數、關鍵字、排序等執行順序:
1. FROM 子句返回初始結果集。
2. WHERE 子句排除不滿足搜索條件的行。
3. GROUP BY 子句將選定的行收集到 GROUP BY 子句中各個唯一值的組中。
4. 選擇列表中指定的聚合函數可以計算各組的匯總值。
5. 此外,HAVING 子句排除不滿足搜索條件的行。
6. 計算所有的表達式;
7. 使用 order by 對結果集進行排序。
8. 查找你要搜索的欄位。
二、SQL語句執行完整過程:
1.用戶進程提交一個 sql 語句:
update temp set a=a*2,給伺服器進程。
2.伺服器進程從用戶進程把信息接收到後,在 PGA 中就要此進程分配所需內存,存儲相關的信息,如在會
話內存存儲相關的登錄信息等。
3.伺服器進程把這個 sql 語句的字元轉化為 ASCII 等效數字碼,接著這個 ASCII 碼被傳遞給一個
HASH 函數,並返回一個 hash 值,然後伺服器進程將到shared pool 中的 library cache 中去查找是否存在相
同的 hash 值,如果存在,伺服器進程將使用這條語句已高速緩存在 SHARED POOL 的library cache 中的已
分析過的版本來執行。
4.如果不存在,伺服器進程將在 CGA 中,配合 UGA 內容對 sql,進行語法分析,首先檢查語法的正確性,接
著對語句中涉及的表,索引,視圖等對象進行解析,並對照數據字典檢查這些對象的名稱以及相關結構,並根據
ORACLE 選用的優化模式以及數據字典中是否存在相應對象的統計數據和是否使用了存儲大綱來生成一個
執行計劃或從存儲大綱中選用一個執行計劃,然後再用數據字典核對此用戶對相應對象的執行許可權,最後生成
一個編譯代碼。
5.ORACLE 將這條 sql 語句的本身實際文本、HASH 值、編譯代碼、與此語名相關聯的任何統計數據
和該語句的執行計劃緩存在 SHARED POOL 的 library cache中。伺服器進程通過 SHARED POOL 鎖存
器(shared pool latch)來申請可以向哪些共享 PL/SQL 區中緩存這此內容,也就是說被SHARED POOL 鎖存
器鎖定的 PL/SQL 區中的塊不可被覆蓋,因為這些塊可能被其它進程所使用。
6.在 SQL 分析階段將用到 LIBRARY
CACHE,從數據字典中核對表、視圖等結構的時候,需要將數據
字典從磁碟讀入 LIBRARY
CACHE,因此,在讀入之前也要使用LIBRARY
CACHE 鎖存器(library cache
pin,library cache lock)來申請用於緩存數據字典。 到現在為止,這個 sql 語句已經被編譯成可執行的代碼了,
但還不知道要操作哪些數據,所以伺服器進程還要為這個 sql 准備預處理數據。
7.首先伺服器進程要判斷所需數據是否在 db buffer 存在,如果存在且可用,則直接獲取該數據,同時根據
LRU 演算法增加其訪問計數;如果 buffer 不存在所需數據,則要從數據文件上讀取首先伺服器進程將在表頭部
請求 TM 鎖(保證此事務執行過程其他用戶不能修改表的結構),如果成功加 TM 鎖,再請求一些行級鎖(TX
鎖),如果 TM、TX 鎖都成功加鎖,那麼才開始從數據文件讀數據,在讀數據之前,要先為讀取的文件准備好
buffer 空間。伺服器進程需要掃面 LRU list 尋找 free db buffer,掃描的過程中,伺服器進程會把發現的所有
已經被修改過的 db buffer 注冊到 dirty list 中, 這些 dirty buffer 會通過 dbwr 的觸發條件,隨後會被寫出到
數據文件,找到了足夠的空閑 buffer,就可以把請求的數據行所在的數據塊放入到 db buffer 的空閑區域或者
覆蓋已經被擠出 LRU list 的非臟數據塊緩沖區,並排列在 LRU list 的頭部,也就是在數據塊放入 DB
BUFFER 之前也是要先申請 db buffer 中的鎖存器,成功加鎖後,才能讀數據到 db buffer。
8.記日誌 現在數據已經被讀入到 db buffer 了,現在伺服器進程將該語句所影響的並被讀
入 db buffer 中的這些行數據的 rowid 及要更新的原值和新值及 scn 等信息從 PGA 逐條的寫入 redo log
buffer 中。在寫入 redo log buffer 之前也要事先請求 redo log buffer 的鎖存器,成功加鎖後才開始寫入,當
寫入達到 redo log buffer 大小的三分之一或寫入量達到 1M 或超過三秒後或發生檢查點時或者 dbwr 之前
發生,都會觸發 lgwr 進程把 redo log buffer 的數據寫入磁碟上的 redo file 文件中(這個時候會產生log file
sync 等待事件)
已經被寫入 redofile 的 redo log buffer 所持有的鎖存器會被釋放,並可被後來的寫入信息覆蓋,
redo log buffer是循環使用的。Redo file 也是循環使用的,當一個 redo file 寫滿後,lgwr 進程會自動切換到
下一 redo file(這個時候可能出現 log fileswitch(checkpoint complete)等待事件)。如果是歸檔模式,歸檔進
程還要將前一個寫滿的 redo file 文件的內容寫到歸檔日誌文件中(這個時候可能出現 log file
switch(archiving needed)。
9.為事務建立回滾段 在完成本事務所有相關的 redo log buffer 之後,伺服器進程開始改寫這個 db buffer
的塊頭部事務列表並寫入 scn,然後 包含這個塊的頭部事務列表及 scn 信息的數據副本放入回滾段中,將
這時回滾段中的信息稱為數據塊的「前映像「,這個」前映像「用於以後的回滾、恢復和一致性讀。(回滾段可以
存儲在專門的回滾表空間中,這個表空間由一個或多個物理文件組成,並專用於回滾表空間,回滾段也可在其它
表空間中的數據文件中開辟。
10.本事務修改數據塊 准備工作都已經做好了,現在可以改寫 db buffer 塊的數據內容了,並在塊的頭部寫
入回滾段的地址。
11.放入 dirty list 如果一個行數據多次 update 而未 commit,則在回滾段中將會有多個「前映像「,除了第
一個」前映像「含有 scn 信息外,其他每個「前映像「的頭部都有 scn 信息和「前前映像」回滾段地址。一個
update 只對應一個 scn,然後伺服器進程將在 dirty list 中建立一
條指向此 db buffer 塊的指針(方便 dbwr 進程可以找到 dirty list 的 db buffer 數據塊並寫入數據文件中)。
接著伺服器進程會從數據文件中繼續讀入第二個數據塊,重復前一數據塊的動作,數據塊的讀入、記日誌、建
立回滾段、修改數據塊、放入 dirty list。當 dirty queue 的長度達到閥值(一般是 25%),伺服器進程將通知
dbwr 把臟數據寫出,就是釋放 db buffer 上的鎖存器,騰出更多的 free db buffer。前面一直都是在說明
oracle 一次讀一個數據塊,其實 oracle 可以一次讀入多個數據塊(db_file_multiblock_read_count 來設置一
次讀入塊的個數)
說明:
在預處理的數據已經緩存在 db buffer 或剛剛被從數據文件讀入到 db buffer 中,就要根據 sql 語句
的類型來決定接下來如何操作。
1>如果是 select 語句,則要查看 db buffer 塊的頭部是否有事務,如果有事務,則從回滾段中讀取數據;如
果沒有事務,則比較 select 的 scn 和 db buffer 塊頭部的 scn,如果前者小於後者,仍然要從回滾段中讀取數據;
如果前者大於後者,說明這是一非臟緩存,可以直接讀取這個 db buffer 塊的中內容。
2>如果是 DML 操作,則即使在 db buffer 中找到一個沒有事務,而且 SCN 比自己小的非臟
緩存數據塊,伺服器進程仍然要到表的頭部對這條記錄申請加鎖,加鎖成功才能進行後續動作,如果不成功,則要
等待前面的進程解鎖後才能進行動作(這個時候阻塞是 tx 鎖阻塞)。
用戶 commit 或 rollback 到現在為止,數據已經在 db buffer 或數據文件中修改完
成,但是否要永久寫到數文件中,要由用戶來決定 commit(保存更改到數據文件) rollback 撤銷數據的更改)。
1.用戶執行 commit 命令
只有當 sql 語句所影響的所有行所在的最後一個塊被讀入 db buffer 並且重做信息被寫入 redo log
buffer(僅指日誌緩沖區,而不包括日誌文件)之後,用戶才可以發去 commit 命令,commit 觸發 lgwr 進程,但不
強制立即 dbwr來釋放所有相應 db buffer 塊的鎖(也就是no-force-at-commit,即提交不強制寫),也就是說有
可能雖然已經 commit 了,但在隨後的一段時間內 dbwr 還在寫這條 sql 語句所涉及的數據塊。表頭部的行鎖
並不在 commit 之後立即釋放,而是要等 dbwr 進程完成之後才釋放,這就可能會出現一個用戶請求另一用戶
已經 commit 的資源不成功的現象。
A .從 Commit 和 dbwr 進程結束之間的時間很短,如果恰巧在 commit 之後,dbwr 未結束之前斷電,因為
commit 之後的數據已經屬於數據文件的內容,但這部分文件沒有完全寫入到數據文件中。所以需要前滾。由
於 commit 已經觸發 lgwr,這些所有未來得及寫入數據文件的更改會在實例重啟後,由 smon 進程根據重做日
志文件來前滾,完成之前 commit 未完成的工作(即把更改寫入數據文件)。
B.如果未 commit 就斷電了,因為數據已經在 db buffer 更改了,沒有 commit,說明這部分數據不屬於數
據文件,由於 dbwr 之前觸發 lgwr 也就是只要數據更改,(肯定要先有 log) 所有 DBWR,在數據文件上的修改
都會被先一步記入重做日誌文件,實例重啟後,SMON 進程再根據重做日誌文件來回滾。
其實 smon 的前滾回滾是根據檢查點來完成的,當一個全部檢查點發生的時候,首先讓 LGWR 進程將
redo log buffer 中的所有緩沖(包含未提交的重做信息)寫入重做日誌文件,然後讓 dbwr 進程將 db buffer 已
提交的緩沖寫入數據文件(不強制寫未提交的)。然後更新控制文件和數據文件頭部的 SCN,表明當前資料庫
是一致的,在相鄰的兩個檢查點之間有很多事務,有提交和未提交的。
像前面的前滾回滾比較完整的說法是如下的說明:

A.發生檢查點之前斷電,並且當時有一個未提交的改變正在進行,實例重啟之後,SMON 進程將從上一個
檢查點開始核對這個檢查點之後記錄在重做日誌文件中已提交的和未提交改變,因為
dbwr 之前會觸發 lgwr,所以 dbwr 對數據文件的修改一定會被先記錄在重做日誌文件中。因此,斷電前被
DBWN 寫進數據文件的改變將通過重做日誌文件中的記錄進行還原,叫做回滾,
B. 如果斷電時有一個已提交,但 dbwr 動作還沒有完全完成的改變存在,因為已經提交,提交會觸發 lgwr
進程,所以不管 dbwr 動作是否已完成,該語句將要影響的行及其產生的結果一定已經記錄在重做日誌文件中
了,則實例重啟後,SMON 進程根據重做日誌文件進行前滾.
實例失敗後用於恢復的時間由兩個檢查點之間的間隔大小來決定,可以通個四個參數設置檢查點執行的頻
率:

Log_checkpoint_interval:
決定兩個檢查點之間寫入重做日誌文件的系統物理塊(redo blocks)
的大小,默認值是 0,無限制。
log_checkpoint_timeout:
兩 個 檢 查 點 之 間 的 時 間 長 度(秒)默 認 值 1800s。
fast_start_io_target:
決定了用於恢復時需要處理的塊的多少,默認值是 0,無限制。
fast_start_mttr_target:
直接決定了用於恢復的時間的長短,默認值是 0,無限制(SMON 進程執行的前滾
和回滾與用戶的回滾是不同的,SMON 是根據重做日誌文件進行前滾或回滾,而用戶的回滾一定是根據回滾段
的內容進行回滾的。
在這里要說一下回滾段存儲的數據,假如是 delete 操作,則回滾段將會記錄整個行的數據,假如是 update,
則回滾段只記錄被修改了的欄位的變化前的數據(前映像),也就是沒有被修改的欄位是不會被記錄的,假如是
insert,則回滾段只記錄插入記錄的 rowid。 這樣假如事務提交,那回滾段中簡單標記該事務已經提交;假如是
回退,則如果操作是 delete,回退的時候把回滾段中數據重新寫回數據塊,操作如果是 update,則把變化前數據
修改回去,操作如果是 insert,則根據記錄的 rowid 把該記錄刪除。
2.如果用戶 rollback。
則伺服器進程會根據數據文件塊和 DB BUFFER 中塊的頭部的事務列表和 SCN 以及回滾段地址找到
回滾段中相應的修改前的副本,並且用這些原值來還原當前數據文件中已修改但未提交的改變。如果有多個
「前映像」,伺服器進程會在一個「前映像」的頭部找到「前前映像」的回滾段地址,一直找到同一事務下的最早的
一個「前映像」為止。一旦發出了 COMMIT,用戶就不能rollback,這使得 COMMIT 後 DBWR 進程還沒有
全部完成的後續動作得到了保障。到現在為例一個事務已經結束了。
說明:
TM 鎖:
符合 lock 機制的,用於保護對象的定義不被修改。 TX 鎖:
這個鎖代表一個事務,是行
級鎖,用數據塊頭、數據記錄頭的一些欄位表示,也是符合 lock 機制,有 resource structure、lock
structure、enqueue 演算法。

I. SQL server 腳本寫什麼就能主動停止運行

SQL Server Management Studio裡面可以通過設置斷點
也可以用
raiserror或者noexec語句

raiserror例子

set noexec off
print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'

結果
消息 2745,級別 16,狀態 2,第 1 行
進程 ID 52 引發了用戶錯誤 50000,嚴重性 20。SQL Server 正在終止此進程。
消息 2745,級別 16,狀態 2,第 1 行
進程 ID 52 引發了用戶錯誤 50000,嚴重性 20。SQL Server 正在終止此進程。
消息 50000,級別 20,狀態 1,第 1 行
Oh no a fatal error
消息 0,級別 20,狀態 0,第 0 行
當前命令發生了嚴重錯誤。應放棄任何可能產生的結果。

noexec例子
set noexec off

print 'hi'
go

print 'Fatal error, script will not continue!'
set noexec on
go

print 'ho'
go

結果
hi
Fatal error, script will not continue!

J. plsql developer暫停當前操作

Edit/Undo Ctrl+Z
Edit/Redo Shift+Ctrl+Z
Edit/PL/SQL Beautifier Ctrl+W (自定義)

Shift+Home 選擇游標位置到行首
Shift+End 選擇游標位置到行尾
Ctrl+Shift+Home 選擇游標位置到首行行首
Ctrl+Shift+End 選擇游標位置到尾行行尾
Object:View Shift+Ctrl+V 查看 (自定義)
Object:Describe Shift+Ctrl+D 結構 (自定義)
Object:Properties Shift+Ctrl+P 屬性 (自定義)
Object:Browse Shift+Ctrl+B 瀏覽 (自定義)
Object:Edit Data Shift+Ctrl+E 編輯數據(自定義)
Object:Standard Query Shift+Ctrl+S 標准查詢(自定義)

Edit/Find Replace Ctrl+F
Edit/Find Next Ctrl+L
Edit/Find Previous Shift+Ctrl+L
Edit/Replace Next Ctrl+P
EDIT/Full Screen Ctrl+F11
Edit/Go to Line Ctrl+G
Edit/Next Tab Page Ctrl+H
Edit/Previous Tab Page Shift+Ctrl+H

Session/Execute F8
Session/Break Shift+Esc
Session/Commit F10
Session/Rollback Shift+F10

Debug/Toggle Breakpoint Ctrl+B
Debug/Start F9
Debug/Run Ctrl+R
Debug/Step Into Ctrl+N
Debug/Step Over Ctrl+O
Debug/Step Out Ctrl+T

Tools/Explain Plan F5
Tools/Code Assistant F6

Editor: Start of Document Ctrl+PgUp OR Ctrl+Home
Editor: End of Document Ctrl+PgDn OR Ctrl+End
Editor: Delete Line Ctrl+Y
Editor: Navigate Back Alt+Left
Editor: Navigate Forward Alt+Right
SQL Window: Previous SQL Ctrl+Up
SQL Window: Next SQL Ctrl+Down

1. PL/SQL Developer記住登陸密碼
在使用PL/SQL Developer時,
為了工作方便希望PL/SQL Developer記住登錄Oracle的用戶名和密碼;
設置方法:
PL/SQL Developer->tools->Preferences->Oracle->Logon History,
在右邊界面的"Definition"中,"Store history"是默認勾選的,
再勾選上"Store with password",即可.
上述方法若不好用,使用下面的方式:
在上面所說的界面中的"Fixed Users"中,
添加需要直接選擇後就可登錄的用戶名/密碼@ORACLE_SID,
如:
cbsdb/cbsdb@cbsdb
重新登錄的時候,從Oracle Logon的登錄界面的Username後面的...按鈕處,
選擇需要登錄的用戶即可。
2. 執行單條SQL語句(SQL Window中根據游標位置自動選擇語句)
在使用PL/SQL Developer的SQL Window時,按F8鍵,PL/SQL Developer默認是執行該窗口的所
有SQL語句,需要設置為滑鼠所在的那條SQL語句,即執行當前SQL語句;
設置方法:PL/SQL Developer->tools->Preferences->SQL Window->Window types,
勾上"AutoSelect Statement" 即可。
注意,每條語句後面要加分號。

3. 格式化SQL語句
在使用PL/SQL Developer的SQL Window時,有時候輸入的SQL語句太長或太亂,
希望能用比較通用的寫法格式話一下,這樣看起來會好看些,也好分析;
使用方法:
選中需要格式化的SQL語句,然後點擊工具欄的PL/SQL beautifier按鈕即可.
4. 查看執行計劃
在使用PL/SQL Developer的SQL Window時,有時候輸入的SQL語句執行的效率,分析下表結構,
如何可以提高查詢的效率,可以通過查看Oracle提供的執行計劃;
使用方法:
選中需要分析的SQL語句,然後點擊工具欄的Explain plan按鈕(即執行計劃),
或者直接按F5即可。

5. 調試存儲過程
在使用PL/SQL Developer操作Oracle時,有時候調用某些存儲過程,或者調試存儲過程;
調用存儲過程的方法:
首先,在PL/SQL Developer左邊的Browser中選擇Proceres,
查找需要調用的存儲過程;然後,選中調試的存儲過程,點擊右鍵,
選擇Test,在彈出來的Test script窗口中,
對於定義為in類型的參數,需要給該參數的Value輸入值;
最後點擊上面的條數按鈕:Start debugger或者按F9;
最後點擊:RUN或者Ctrl+R。
(具體要調式一個存儲過程,請參照操作手冊,這個大概說明下應用)。
6. oralce精簡客戶端的使用
要想PL/SQL連接oracle資料庫,除了PL/SQL Developer 之外還需要Oracle客戶端,
有一個更方便的方法就是使用Oracle精簡客戶端,很多地方可以下載,文件很小,耗資源也少。
安裝完成後修改安裝目錄下的\Oracle\ora90\network\ADMIN\tnsnames.ora文件:
格式如下:
DATABASE_NAME =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
#(SERVICE_NAME = dealer)
(SID = SID_NAME)
#(SERVER = DEDICATED)
)
)
7. 關鍵字自動大寫:
了解一點編程的常識的人都知道,編碼風格很重要。
在閱讀代碼方面,保持一致的編碼風格,閱讀起來比較容易;
在執行效率方面,保持一致的編碼風格,更有可能被放到共享SQL區中,
這樣就提供了執行的效率。

另外,信息系統的核心是資料庫,系統出問題時最先要查的就是SQL語句,
怎樣在浩瀚的日誌中快速找到那條SQL語句是件比較痛苦的事情。
SQL語句全部大寫並不能徹底解決這一問題,
但在一堆代碼中間找一行全部大寫的字元相對容易些,你的眼睛會感謝你。
設置也很簡單:
Tools->Preferences->Editor,將Keyword case選擇Uppercase。
我一般是讓關鍵字大寫,其他比如表名,欄位名等都是小寫。
大家都應該養成一種自己的編碼習慣,並保持下去。

8. 右鍵菜單
在PL/SQL Developer(下面簡稱PLD)中的每一個文本編輯窗口,
如SQL Window,Command Window和Porgram Window,
右鍵點擊某個對象名稱,會彈出一個包含操作對象命令的菜單,我們這里稱之為右鍵菜單。
對象類型可以是表,視圖,同義詞,存儲過程和函數等。
根據對象類型的不同,彈出的菜單也有區別。
表和視圖有View, Edit, Rename, Drop, Query data 和Edit data等功能。
View和Edit分別是查看和修改表的結構信息,如欄位,主鍵,索引和約束等。
Query data相當於新打開一個窗口,並執行select * from 表。
Edit data相當於新打開一個窗口,並執行select * from 表 for update。
存儲過程和函數有Test功能,選中後可以進入調試狀態。
有時由於PLD識別錯誤,右鍵點擊對象並不能出來正確的菜單,
可以在對象所在的DDL或DML語句的前面,加上分號,這樣PLD就能正確的判斷出對象的類型

9. Select for Update
有時我們需要把一些數據導入資料庫中,如果用UE拼Insert語句,會比較麻煩,而且操作性不強。
PLD的SQL Window可以查詢,新增,修改和刪除表的內容。
查詢自不必說,而新增,刪除和修改,只需在select語句後加入for update,
對表進行行級鎖定,然後點擊窗口的鎖型圖標,即可進入編輯狀態。
下面介紹一下如何從Excel中提取文本插入到資料庫中,
我們的Excel文件中有三列,在資料庫中建立臨時表:
CREATE TABLE t1(
cino varchar2(100),
contno varchar2(100),
loanno varchar2(100)
)
然後在SQL Window中輸入select t1 for update,並點擊鎖型滑鼠,進入編輯狀態,
用滑鼠點擊第一行的輸入窗口,這時PLD會死鎖幾秒鍾,
然後可以見到游標在第一行的輸入框中閃動,
用滑鼠把CINO, CONTNO, LOANNO選中,進入Excel中,把需要插入資料庫的內容選中,
然後切換到PLD,按Ctrl + V,點擊√,然後再點擊Commit按鈕,
則數據提交到表t1中,執行select * from t1可以看到內容.
10. PL/SQL Beautifier(PL/SQL 美化器)
PLD 6以上版本有對DML代碼格式化的功能。
在SQL Window或Program Window中選中部分代碼(如果不選則對整個窗口的代碼操作),
在菜單中選Edit -> PL/SQL Beautifier,得到格式化的代碼。
對於非法的DML語句或DDL語句,PLD將會在下方狀態欄提示:
PL/SQL Beautifier could not parse text。
在預設的狀態下,PLD會把DML語句的每一個欄位都排在單獨的一行,這樣不方便查看。
在菜單中選Edit à PL/SQL Beautifier Options,進入Preferences窗口,
選擇Edit,進入配置文件編輯界面,在標簽欄選DML,
在窗口中部的Select, Insert和Update組框中把Fit選中,然後點擊Save,
把配置文件保存到PLD的安裝目錄下,點擊Close關閉。
在Rules file中輸入配置文件所在位置,點擊OK,完成配置文件切換。
這時再對代碼進行格式化,就可以使每一個欄位盡可能的在一行上了。
11. TNS Names
菜單Help->Support Info->TNS Names,可以查看Oracle的tnsnames.ora。

12. Copy to Excel
在SQL Window中執行Select語句,在結果出來以後,右鍵點擊下面的數據區,
選擇Copy to Excel,可以把數據區的記錄原樣拷貝到Excel中。
但有兩點需要注意:
(1) field中不能以=開始,否則Excel會誤認為是函數;
(2) 數字不要超過17位,否則後面的位數將會置為0,
但可以通過在數字前加'來使Excel認為該field是文本,
同時對於資料庫中Numbe類型的欄位,最好用to_char輸出,不然可能會顯示不正常;

13. 保持上次打開的SQL腳本
重新進入PL/SQL Developer時,Window List能打開上次退出時的文檔:
(1) 將菜單Tools->Window list選項勾上;
(2) Tools->Perferences->User Interface->Options的右邊,
將"Autosave desktop"勾選.
(3) 退出PL/SQL Developer重新進入.

14. 快速找到已知表名的表或其他對象:
在Tools菜單中,勾選上Object Browser,將對象瀏覽器打開,
雙擊對象瀏覽器中的某個對象所處的文件夾,
比如表都是在Tables文件夾中,
然後以盡快的速度輸入表名,即可找到以你輸入的幾個字母開頭的對象了.

15. 快速關閉打開於Windows List中的文檔窗口:
按住Shift鍵,左鍵點擊需要關閉的文檔窗口.

16. PL/SQL DEVELOPER中的專用復制(Special Copy)
如果你正在用 PL/SQL Developer 寫 SQL 和 PL/SQL 代碼,
隨後你又要在其它工具里使用代碼,例如象 3GL 這樣的程序設計語言,
那麼你可能需要把這些代碼轉換為稍微不同的格式。
讓我們假設你已經在 PL/SQL Developer 里寫了並測試了這樣一個SQL 語句:
select deptno, sum(sal) mgr_sal
from emp
where job = 'MANAGER'
group by deptno
order by mgr_sal desc

例如,如果你要在Borland Delphi 里使用這個語句,你可能需要象這樣的格式:
SQL := 'select deptno, sum(sal) mgr_sal from emp' + #13#10 +
'where job = ''MANAGER''' + #13#10 +
'group by deptno' + #13#10 +
'order by mgr_sal desc';

為了這個目的,在PL/SQL DEVELOPER中選中已寫好的SQL語句,滑鼠右鍵,
在彈出的菜單中找到 Special Copy。這個功能有一個子菜單,它顯示了所有被定義的專用復制格式。
在選擇了格式之後,被轉換的代碼就被儲存在剪貼板上了,
這樣你就可以粘貼它到相應工具的編輯器里了。
專用復制格式被定義在 PL/SQL Developer 安裝目錄下的 SpecialCopy 子目錄里。
你可以改變預先確定的復制格式或者添加新的復制格式。
僅僅簡單地添加一個帶有 . 擴展名的文本文件就可以了,
它包含了一個針對 PL/SQL 代碼第一行的變數
(<line_1>)、一個針對 PL/SQL 代碼最後一行的變數(<line_N>)
和一個針對所有其它行的變數(<line_*>)。下面是一個針對 Borland Delphi 的例子:
;PL/SQL Developer SpecialCopy definition for Borland Delphi
;<line_1> for first line
;<line_*> for all other lines
;<line_N> for last line
;
SQL := '<line_1>' + #13#10 +
'<line_*>' + #13#10 +
'<line_n>';

第一行需要為指派到 SQL 的變數加上前言,接下來需要有一個 CR/LF 對。
最後一行不需要有CR/LF 對,但需要用分號來終止。所有其它行僅僅需要 CR/LF 接在後面。
如果 <line_1> 和 <line_n> 都與 <line_*> 一樣,你可以忽略它們。
在一些語言里,你需要對特定的字元使用換碼序列。
例如,在 C++ 里,你要對 tab字元(ASCII 碼為 9)使用 \t 。
要定義這些換碼序列,請使用 #define 關鍵詞:
#define char(9) = \t
#define \ = \\
String("<line_1>\n") +
String("<line_*>\n") +
String("<line_n>");
你還可以使用 "#define compress"來指出你要從結果里移除所有多餘的空字元(空格、製表符和換行)。
注意,. 文件的名字將被包括在菜單里,所以你應該使用描述性的文件名。

17. 在PL/SQL DEVELOPER中復制行記錄的簡便方法
(1) 單擊要拷貝的行記錄左邊的黑色小三角,該行被選中,右鍵復制。
(2) 粘貼至記事本里,然後復制剛才粘貼的內容。(該步驟不知何故不能缺)
(3) 單擊新記錄左邊的黑色小三角,右鍵粘貼即可。

18. 快捷鍵定義的位置:
Tools->Preferences->User Interface->Key configuration
選中需要定義的Item,然後按一個快捷鍵組合即可,
如果所按的快捷鍵已有定義,會有提示,這時候Cancel,另外選擇快捷鍵組合即可;
通常情況下,打開PLSQL Developer後,最經常乾的事就是打開SQL Window和Command Window,
就給這兩個操作定義了快捷鍵, ALT+S 和 ALT + C,這樣拿滑鼠點三下的事情只需要按一下鍵。
設置方法:
菜單Tools -> Preferences -> Key Configuration

注意:
如果設置了快捷鍵不起作用,
回到Tools -> Preferences -> Key Configuration界面,
點擊最上方的"Default Administrator"右邊的"..."按鈕,
在彈出的"Preference Set"界面中,對"Personal Preferences"
以及下面的"Definition"->"Description"進行一下設置.

19. 在窗口標題欄內顯示文件的完全路徑
Tools->Preferences->User Interface->Options
勾選"Show complete file path in windows titles"

20. Object Brower中自定義Object的順序以及登錄後默認自動選中My Objects
默認情況下,PL/SQL Developer登錄後,Brower里會選擇All objects,
如果你登錄的用戶是dba,要展開tables目錄,正常情況都需要Wait幾秒鍾,
而選擇My Objects後響應速率則是以毫秒計算的。
設置方法:
Tools菜單 -> Object Brower Filters,會打開Define Browser Filters界面,
選中"My Objects",並勾選 "Default" 設為默認即可。
Tools菜單 -> Object Brower Folders,會打開Define Browser Folders界面,
這里可以把經常用到的幾個目錄(比如:Tables Views Seq Functions Proceres)
移得靠上一點,並加上顏色區分,這樣你的平均尋表時間會大大縮短,試試看。

21. 雙擊即顯示表數據
滑鼠雙擊表或者視圖時的默認響應實在讓我感到失望,因為我最關心的是表結構和數據,
但是雙擊後這兩件事情都沒有發生,也許默認響應是高手們需要的,
但對我來說查看數據和表結構是最主要的,其他的我不關心。
不過好的是這是可以設置的,你可以給滑鼠雙擊和拖放綁定需要的事件,
比如:雙擊編輯數據,拖放顯示表結構,Yeah!
設置方法:
菜單Tools -> Preferences -> Object Browser,
在右側,為不同的Object Type綁定雙擊和拖放操作。

22. 去掉注釋的斜體樣式:
菜單Tools -> Preferences -> User Interface->Editor
在右邊的界面中"Syntax Highlighting"下,去掉"Comment"右邊的"Italic"的勾選.