當前位置:首頁 » 編程語言 » sql排隊機制
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql排隊機制

發布時間: 2023-08-15 21:11:53

❶ 通過jdbc執行sql比在plsql中慢好多

大哥,plsql是只檢索出前面的20條,即rownum<20 的數據,JDBC是查全部。你把PLSQL的數據全展開,你看看要多少秒!

❷ mysql 分區和分表 哪個好

mysql 分區和分表好
一,什麼是mysql分表,分區
什麼是分表,從表面意思上看呢,就是把一張表分成N多個小表,具體請看mysql分表的3種方法
什麼是分區,分區呢就是把一張表的數據分成N多個區塊,這些區塊可以在同一個磁碟上,也可以在不同的磁碟上

一,先說一下為什麼要分表
當一張的數據達到幾百萬時,你查詢一次所花的時間會變多,如果有聯合查詢的話,我想有可能會死在那兒了。分表的目的就在於此,減小資料庫的負擔,縮短查詢時間。
根據個人經驗,mysql執行一個sql的過程如下:
1,接收到sql;2,把sql放到排隊隊列中 ;3,執行sql;4,返回執行結果。在這個執行過程中最花時間在什麼地方呢?第一,是排隊等待的時間,第二,sql的執行時間。其實這二個是一回事,等待的同時,肯定有sql在執行。所以我們要縮短sql的執行時間。

mysql中有一種機制是表鎖定和行鎖定,為什麼要出現這種機制,是為了保證數據的完整性,我舉個例子來說吧,如果有二個sql都要修改同一張表的同一條數據,這個時候怎麼辦呢,是不是二個sql都可以同時修改這條數據呢?很顯然mysql對這種情況的處理是,一種是表鎖定(myisam存儲引擎),一個是行鎖定(innodb存儲引擎)。表鎖定表示你們都不能對這張表進行操作,必須等我對表操作完才行。行鎖定也一樣,別的sql必須等我對這條數據操作完了,才能對這條數據進行操作。如果數據太多,一次執行的時間太長,等待的時間就越長,這也是我們為什麼要分表的原因。
二,分表
1,做mysql集群,例如:利用mysql cluster ,mysql proxy,mysql replication,drdb等等
有人會問mysql集群,根分表有什麼關系嗎?雖然它不是實際意義上的分表,但是它啟到了分表的作用,做集群的意義是什麼呢?為一個資料庫減輕負擔,說白了就是減少sql排隊隊列中的sql的數量,舉個例子:有10個sql請求,如果放在一個資料庫伺服器的排隊隊列中,他要等很長時間,如果把這10個sql請求,分配到5個資料庫伺服器的排隊隊列中,一個資料庫伺服器的隊列中只有2個,這樣等待時間是不是大大的縮短了呢?這已經很明顯了。所以我把它列到了分表的范圍以內,我做過一些mysql的集群:
linux mysql proxy 的安裝,配置,以及讀寫分離
mysql replication 互為主從的安裝及配置,以及數據同步
優點:擴展性好,沒有多個分表後的復雜操作(php代碼)
缺點:單個表的數據量還是沒有變,一次操作所花的時間還是那麼多,硬體開銷大。
2,預先估計會出現大數據量並且訪問頻繁的表,將其分為若干個表
這種預估大差不差的,論壇裡面發表帖子的表,時間長了這張表肯定很大,幾十萬,幾百萬都有可能。 聊天室裡面信息表,幾十個人在一起一聊一個晚上,時間長了,這張表的數據肯定很大。像這樣的情況很多。所以這種能預估出來的大數據量表,我們就事先分出個N個表,這個N是多少,根據實際情況而定。以聊天信息表為例:
我事先建100個這樣的表,message_00,message_01,message_02..........message_98,message_99.然後根據用戶的ID來判斷這個用戶的聊天信息放到哪張表裡面,你可以用hash的方式來獲得,可以用求余的方式來獲得,方法很多,各人想各人的吧。下面用hash的方法來獲得表名:
查看復制列印?
<?php
function get_hash_table($table,$userid) {
$str = crc32($userid);
if($str<0){
$hash = "0".substr(abs($str), 0, 1);
}else{
$hash = substr($str, 0, 2);
}

return $table."_".$hash;
}

echo get_hash_table('message','user18991'); //結果為message_10
echo get_hash_table('message','user34523'); //結果為message_13
?>
說明一下,上面的這個方法,告訴我們user18991這個用戶的消息都記錄在message_10這張表裡,user34523這個用戶的消息都記錄在message_13這張表裡,讀取的時候,只要從各自的表中讀取就行了。
優點:避免一張表出現幾百萬條數據,縮短了一條sql的執行時間
缺點:當一種規則確定時,打破這條規則會很麻煩,上面的例子中我用的hash演算法是crc32,如果我現在不想用這個演算法了,改用md5後,會使同一個用戶的消息被存儲到不同的表中,這樣數據亂套了。擴展性很差。
3,利用merge存儲引擎來實現分表
我覺得這種方法比較適合,那些沒有事先考慮,而已經出現了得,數據查詢慢的情況。這個時候如果要把已有的大數據量表分開比較痛苦,最痛苦的事就是改代碼,因為程序裡面的sql語句已經寫好了,現在一張表要分成幾十張表,甚至上百張表,這樣sql語句是不是要重寫呢?舉個例子,我很喜歡舉子
mysql>show engines;的時候你會發現mrg_myisam其實就是merge。
查看復制列印?
mysql> CREATE TABLE IF NOT EXISTS `user1` (
-> `id` int(11) NOT NULL AUTO_INCREMENT,
-> `name` varchar(50) DEFAULT NULL,
-> `sex` int(1) NOT NULL DEFAULT '0',
-> PRIMARY KEY (`id`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Query OK, 0 rows affected (0.05 sec)

mysql> CREATE TABLE IF NOT EXISTS `user2` (
-> `id` int(11) NOT NULL AUTO_INCREMENT,
-> `name` varchar(50) DEFAULT NULL,
-> `sex` int(1) NOT NULL DEFAULT '0',
-> PRIMARY KEY (`id`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO `user1` (`name`, `sex`) VALUES('張映', 0);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `user2` (`name`, `sex`) VALUES('tank', 1);
Query OK, 1 row affected (0.00 sec)

mysql> CREATE TABLE IF NOT EXISTS `alluser` (
-> `id` int(11) NOT NULL AUTO_INCREMENT,
-> `name` varchar(50) DEFAULT NULL,
-> `sex` int(1) NOT NULL DEFAULT '0',
-> INDEX(id)
-> ) TYPE=MERGE UNION=(user1,user2) INSERT_METHOD=LAST AUTO_INCREMENT=1 ;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> select id,name,sex from alluser;
+----+--------+-----+
| id | name | sex |
+----+--------+-----+
| 1 | 張映 | 0 |
| 1 | tank | 1 |
+----+--------+-----+
2 rows in set (0.00 sec)

mysql> INSERT INTO `alluser` (`name`, `sex`) VALUES('tank2', 0);
Query OK, 1 row affected (0.00 sec)

mysql> select id,name,sex from user2
-> ;
+----+-------+-----+
| id | name | sex |
+----+-------+-----+
| 1 | tank | 1 |
| 2 | tank2 | 0 |
+----+-------+-----+

❸ sql server 2000 個人版怎麼安裝

按如下步驟安裝(建議操作系統為XP或以下):
1. 1):將SQLServer 2000光碟放入光碟機或下載的文件找到autorun.exe並雙擊,出現Microsoft SQL Server2000對話框,單擊 安裝SQL Server2000組件選項,或者直接運行光碟上的 autorun.exe。彈出如圖所示1-2窗口:
圖1-2
3):單擊「安裝SQL Server 2000組件」項,系統彈出如圖1-3所示窗口:
圖1-3

4):選擇「安裝資料庫伺服器」,系統彈出安裝向導窗口,如圖1-4所示:
圖1-4
5):單擊「下一步」按鈕,系統彈出「計算機名」窗口,系統提示創建SQL Server實例的計算機的名稱,如圖1-5所示:
圖1-5

6):選擇「本地計算機」項,單擊「下一步」按鈕,系統彈出「安裝選項」窗口,如圖1.6所示:
圖1-6

7):選擇「創建新的SQL Server實例,或安裝客戶端工具」項,單擊「下一步」按鈕,系統彈出「用戶信息」設置窗口,如圖1-7所示:

圖1-7

8):在「用戶信息」窗口中錄入用戶姓名和公司名,然後單擊「下一步」按鈕,系統進入「軟體許可協議」窗口,如圖1-8所示:

圖1-8

9):單擊「是」按鈕接受協議,系統彈出「安裝定義」窗口,如圖1-9所示:
圖1-9
10):選擇「伺服器和客戶端工具」項,單擊「下一步」按鈕,系統彈出「實例名」窗口,如圖1-10所示:
圖1-10

11):勾選「默認」項,使用由系統提供的默認實例名,單擊「下一步」按鈕,系統彈出「安裝類型」選擇窗口,如圖1-11所示:
圖1-11
12):選擇「典型」項,單擊「下一步」按鈕,系統彈出「服務賬戶」設置窗口,如圖1-12所示:
圖1-12

13):選擇「對每個服務使用同一賬戶,自動啟動SQL Server服務」項,服務設置選項「使用本地系統賬戶」,單擊「下一步」按鈕,系統彈出「身份驗證模式」窗口,如圖1-13:
圖1-13

14):選擇「混合模式(Windows身份驗證和SQLServer身份驗證)」項----勾選「空密碼(不推薦)」項,單擊「下一步」按鈕,系統進入「開始復制文件」窗口,如圖1-14所示:
圖1-14

15):單擊「下一步」按鈕,系統開始執行安裝工作,並出現安裝進度條指示,如圖1-15所示:
圖1-15

16):安裝完成後,系統彈出「安裝完畢」窗口,單擊「完成」按鈕,完成SQL Server 2000的安裝工作。
安裝完成後,建議重啟計算機以查看SQL Server 2000能否正常啟動。重啟後,單擊【開始】→【程序】→【Microsoft SQL Server】→【服務管理器】,系統彈出「SQL Server 服務管理器」窗口,如圖1-16所示,當圖中表示為「綠色三角形」符號時表示正常啟動。
圖1-16

說明:如若在安裝過程中,彈出如圖1-17所示窗口,

圖1-17
方法1(推薦):則重新啟動計算機重新安裝即可。
方法2(若對注冊表不熟悉,請務隨便操作):【開始】→【運行】→輸入regedit後點確定,按照下面分支順序:HKEY-LOCAL.MACHINE/SYSTEM/CurrentcontrolSet/Control/
Session Manage/PendingRenameOperations 項直接在PendingRenameOperations項目上單擊右鍵並刪除,再重新安裝即可。

附錄:
一:Sql server2000 與windows的對應關系:
SQL Server 2000企業版和標准版只能安裝在以下操作系統上:
• Windows Server 2003 R2
• Windows Server 2003, Standard Edition1
• Windows Server 2003, EnterpriseEdition2
• Windows Server 2003, DatacenterEdition3
• Windows® 2000 Server
• Windows 2000 Advanced Server
• Windows 2000 Datacenter Server
SQL Server2000 評估版和開發版只能安裝在以下操作系統上:
• 以上列出的企業版或者標准版或更高版本的操作系統
• Windows XP Professional
• Windows XP Home Edition
• Windows 2000 Professional
SQL Server2000個人版和桌面引擎(MSDE)只能安裝在以下操作系統上:
•以上列出的企業版,標准版,評估版,開發版或更高版本的操作系統
• WindowsServer 2003, Web Edition5 (MSDE only)
• Windows98
• WindowsMillennium Edition (Windows Me)
更多內容訪問:http://www.microsoft.com/sql/prodinfo/previousversions/system-requirements.mspx

二:MS SQL SERVER的網路特點
1、伺服器端的網路連接
微軟研製WINDOWS NT的一個設計目標就是為應用軟體提供強大的開發平台。為了達到這一目標,設計者在操作系統中創建了一系列非常強大的服務來解決伺服器所需的操作,例如文件存取、列印服務以及網路互連。SQL SERVER實際上是遠遠獨立於網路的,並且SQL SERVER的最底層只需具有網路識別功能。而這些底層的網路識別能力是被隔離在網路庫中的,如圖1所示。

SQL Server

TCP/IP庫

多協議庫

命名管道庫

NWLinK庫

RPC庫

文件服務

Windows NT網路

網路介面(物理層和數據鏈路層)

圖1 網路介面(物理層和數據鏈路層)

伺服器端的網路庫可以分成兩組。第一組依靠WINDOWS操作系統網路結構來提供通信服務。這組網路庫包括以下幾種:
n 命名管道庫(Named Pipe library)
n 多協議庫(Multi-Protocol library)
n 當地RPC庫(Local RPClibrary)
n 共享內存庫(Share Memory library)
命名管道庫在UNC網路結構的基礎上,採用一種簡單的通信系統。一個命名管道有一個完全的UNC路徑,如\\Server \pipe \SQL\Query。對於本地伺服器,這可以被縮寫為\\. \pipe \SQL\Query。從程序員的角度來看,編寫命名管道程序與編寫以文件為基礎的輸入和輸出程序非常相似。因此,可以看到,利用這一網路庫需要被WINDOWS NT驗證,這並不值得大驚小怪,用戶必須被WINDOWS NT的安全機制鑒別。
Multi-protocol 系統利用遠程過程調用(或RPC)來完成客戶機和伺服器之間的通信。RPC是一個安全的協議,與命名管道相似,用戶必須被WINDOWS NT的安全機制鑒別。
本組中的另一個網路庫是Local RPC (本地遠程調用)庫。盡管從表面上看,存在本地遠程調用是矛盾的,但這是一個真正的協議。Local RPC被運行在WINDOWS NT伺服器上的過程用於和SQL Server進行通信(例如運行在伺服器上的SQL Enterprise Manager 工具,或SQL Agent)。
共享內存庫(Share Memory library)同樣也被用於同一台伺服器上進程之間的通信。共享內存庫被自動安裝,不能被刪除,而且沒有配置選項,所以在此不對它們作進一步的討論。
由於Named pipe及Multi-protocol庫都利用了WINDOWS網路結構,因此它們其實是獨立於協議的(與使用什麼協議無關)。Namedpipe可以被用於任何文件服務支持的協議上,也就是說,它可以用於IPX/SPX,TCP/IP ,BANYAN VINES,以及NETBEUI上。RPC可以和任何支持遠程過程調用的協議一起使用,這些協議也包括了上面所說的幾個協議。唯一真正不支持RPC的協議的是DLC。
第二組伺服器端的網路協議庫是一組依靠協議的庫,它包括以下幾個協議:
n NWLINK
n TCP/IP SOCKETS
n BANYAN-VINES SPP LIBARRIES
與Named pipe及Multi-protocol不同,這些庫不用WINDOWS指定的文件伺服器或RPC。例如TCP/IP SOCKETS,就如其他任何以SOCKETS為基礎的程序(比如Telnetd or Oracle Listenerdaemon )利用TCP/IPSOCKETS一樣。SQL SERVER包括IPX/SPX,TCP/IP SOCKETS ,BANYAN-VINES 以及Apple Talk 的ADSP協議。
這些庫中的每一個協議都需要對某些配置進行設置.,以作為標識其自身的方法。例如,為了配置TCP/IP庫,必須指定埠號。對於IPX/SPX,Apple Talk ADSP或者BANYAN-VINES SPP,都必須提供一個服務名,這個服務名通常不與伺服器名相同。同樣,如果想用其中這些庫,相應的協議必須在Windows NT的控制面板的網路窗口中進行設置。換句話說,如果想支持IPX/SPX協議,則必須安裝NWLINK IPX/SPX協議。
在伺服器端,由於網路互連基本上被操作系統來管理了,因此幾乎不需要文件,復雜程度也大為下降。SQL Server提供了伺服器端網路庫,因此它能夠以不同的方式,與一些網路進行交互。例如,Multi-protocol庫利用RPC機制進行通信,以確保SQLServer提供集成的安全性。用於實現網路庫的文件存放在\MSSQL\BINN目錄下。表1列出所用的文件。
表1、SQL Server的伺服器端網路庫DLL文件

文件

用於

SSMSSH70.DLL

Local RPC

SSMSSO70.DLL

TCP/IP Sockets

SSNMPN70.DLL

Named-Pipe

SSMSRP70.DLL

Multi-prltocol

SSMSAD70.DL

ADSP(Apple Talk)

SSMSSP70.DLL

Nwlink IPX/SPX

SSMSVI70.DLL

Banyan VINES SPP

在這里值得說的是,與這些DLL相關的函數在文件中被描述為是Open Data Services的一部分。這意味著第三方可以提供新的網路庫,盡管這並不普通。
客戶網路庫被安放在獨立的DLL文件中,並且與伺服器的網路庫十分相似。表2列出了客戶端的DLL文件。區別伺服器端網路庫和客戶端網路庫最簡單的方法是,伺服器端網路庫以SS(代表SERVERSIDE)開頭,而客戶端的網路庫通常以DB開頭。除了Namedpipe 庫被存放在\windows\system目錄下或 winnt\system32目錄下之外,這些庫都被存放在\MSSQL7\ BINN目錄下。
表2、客戶端的網路DLL文件

DLL文件

網路庫

DBNMPNTW.DLL

Named pipe

DBMSRPCN.DLL

TCP/IP

DBMSRPCN.DLL

Multi-protocol

DBNSSPXN.DLL

Nwlink IPX/SPX

DBMADSN.DLL

Apple talk

DBMSVINN.DLL

Banyan VINE SPP

2、解決客戶連接的故障
客戶機/伺服器的連接問題可以由低到高地進行診斷。換句話說,先檢查網路的物理層,再檢查網路組件,最後檢查應用程序的網路調用。在里,我們將主要關注TCP/IP環境下的故障排除。其他環境下的故障排除與此類似。
如果在客戶機和伺服器之間存在著一個資料庫連接問題,首先你就的確認客戶機和伺服器之間的網路連接是否暢通無阻。以下幾個步驟說明了如何檢測TCP/IP連接。
(1) 打開一個命令行窗口(MSDOS窗口),PING本機地址127.0.0.1;如果PING不通本機,則在這一本地機器上存在著網路配置錯誤。
(2) PING本機的外部TCP/IP地址 。為了找到本機的IP地址,可以在WINDOWS9X下運行WINIPCFG,或在WINDOW S NT的命令行下運行IPCONFIG。如果PING本機IP地址操作失敗,則在本地機器上存在著網路配置錯誤。
(3) PING預設的網關地址(同樣利用WINPCFG或IPCONFIG,你可以同樣找到網關地址)。如果這一操作失敗,則可檢查一下你的IP地址是否和預設的網關在同一個子網下。如果這兩個地址在同一子網下,則本地機器的網路配置可能有問題。
(4) PING伺服器的IP地址,然後利用伺服器的機器名來PING伺服器。請確信你PING伺服器名返回的伺服器地址和通過PING伺服器IP地址返回的結果相同。
如果不相同,則表明在你的網路上,存在DNS(域名服務)錯誤。如果PING失敗,返回」Destination host unreachable」則在你的路由器上可能存在配置問題。
如果PING成功,則表明在客戶機和伺服器之間存在著良好的網路連接。
在確定網路連接良好之後,繼續查找其他方面的問題,打開SQL Server Client Configuration工具來檢查預設的網路協議是否配置正確,接下來,檢查伺服器端的網路庫,並查它們是否支持相應的協議。
作為最後一個求助手段,可以從SQLServer的光碟上安裝客戶軟體到客戶機上,並利用ISQL/W來連接SQL SERVER。ISQL/W是最容易實現的連接,如果它能夠連接成功,則你所使用的軟體可能存在著某個問題,妨礙了連接的實現。
三、MS SQL SERVER自動備份計劃配置
利用MSSQL SERVER的自動備份功能進行備份安排是非常方便的。現在,讓我們一起來了解怎樣安排備份以及怎樣才能夠定期備份。以下是主要內容:
n 創建備份設備
n 利用SQL 來執行備份
n 設置備份預定表
自動備份提供了一種SQLSERVER常式,它確保備份能夠按時執行,如果你每天早晨准備要做的第一件事情是手工運行備份程序,但某一天你由於交通擁擠而不能夠按時上班,就可能會漏掉一次備份,但對備份進行預定提供了更高級的可靠性,它能夠在用戶不想在辦公室也能執行備份操作。
在執行自動備份或進行以下步驟練習時,請確定「SQLServerAgent」服務已經啟動,因為自動備份需要「SQLServerAgent」服務支持。
1、創建備份設備
備份設備是用作備份目標的某種磁帶設備或磁碟文件,通過創建一種備份設備,就能夠確定每次都可以輕松的找到正確的文件,為了創建某種備份設備,應該先打開SQL Enterprise Mamager 並打開你想要使用的伺服器,右擊BACKUPDEVICES(備份設備),並選擇NEW BACKUP DEVICES…(新建備份設備),隨後會出現Backup Devices Properties(備份設備屬性)對話框,如圖所示,

接著,為該設備輸入一個名字,再選擇某種設備類型(磁帶或磁碟)以及設備名,對於磁帶驅動器,系統會提供一個磁帶驅動器名稱列表,對於磁碟驅動器,可以鍵入一個本地路徑(如果文件應該存放在本地計算機中),也可以鍵入一個UNC路徑(這樣就可以將備份將備份文件放在另一台計算機中)。單擊OK(確定)按鈕,則SQL SERVER會給出消息,」Backup Device CreatedSuccessfully(備份設備創建成功)。新創建的備份設備名將出現在Backup Device文件夾中。
2、利用SQL Enterprise Mamager執行備份
SQL Enterprise Mamager可以幫助用戶對資料庫進行快速備份。這就要求能夠創建一次性的備份,該備份用來傳輸數據或對某個備份進行測試。下面介紹的是具體過程:
(1)打開DATABASES(資料庫)文件夾,並右擊你想要進行備份的資料庫名。
(2)從上下文菜單中選擇TOOLS(工具),BACKUP DATABASES(備份數據)選項,隨後出現SQL SERVERBACKUP對話框,如圖所示:

(3)DESCRIPTION(說明)子端中填寫相應的信息,選擇備份類型(包括完全備份,差異備份,事務日誌備份,文件組備份),再選擇備份目標。如果你想同時備份到多個設備上,則應該為備份選擇多個目標,最後,選擇是否覆蓋現有的介質,或者將備份集合添加到現有的介質當中。
(4)在如圖所示的OPTIONS(選項)選項卡畫面中,你會發現可以獲得TRANSACT-SQLBACKUP DATABASES命令的選項列表中的全部選項,包括當備份完成時彈出磁帶以及與介質集合相關的各種選項。

(5)OK(確定)按鈕,以便啟動備份程序,於是,開始進行備份。當備份完成時,就會出現」The Backtup Operation has completed successfully 「(備份操作成功)的消息。備份進程要花費一些時間,這主要取決於資料庫的大小以及備份介質的速度,出現一個漂亮的藍色條也許會使你更欣賞該備份進程。
3、設置備份計劃
對備份進行預定是建立總體備份常式中的一個重要組成部分。預定好的備份可以在非高峰時間運行,這樣就可以避免損害用戶的利益。
為了設置一個備份預定表,可以先執行「利用來SQL Enterprise Mamager執行備份」中介紹的步驟3,然後單擊SCHEDULE(預定表)復選框。它可以對備份進行設置,使備份按照預設的循環日程預定進行,即預定在每周星期天的午夜進行。如果這一設置恰好是你想要的,則可以直接使用該選項。但是,情況可能不是這樣的。為了指定一個不同的備份預定時間,可單擊省略號按鈕(…),以便打開如圖所示的EditRecurring Job Schele(編輯可重復出現行的作業預定表)對話框。

選擇Recurring(重復出現)選項,接著對備份預定日程進行更改,使該預定表能夠反映你真正想要的某種設置。為了將備份預定設置在從周一到周五的每天凌晨兩點鍾進行,可選擇 Weekly(每周)單選鈕,並且選中從周一到周五的所有復選框,將時間設置為「2AM 」,然後,單擊OK(確定)按鈕即可。
在SQL Server中預定好所有的作業以後,就可以將事情交給 SQL Agent去做而我們撒手不管了。SQL Agent先將所有作業進行排隊,然後再分別予以處理。這就意味著SQL Agent必須運行各種預定好的作業。為了監視某個作業,可打開SQLEnterprise Mamager ,與指定用來運行該作業的伺服器進行連接,再打開SQL Agent 。SQL Agent 的JOBS文件夾中包含了所有被預定的作業。你可以右擊其中某個作業並選擇Job History,以便找出該作業前幾次運行的狀態信息。
三、MS SQL SERVER數據恢復配置
在SQL Enterprise Marnager 里操作項目選擇還原資料庫,
還原為資料庫名稱為ZKHR,從設備還原,

找到原來備份的資料庫文件,

選擇資料庫物理文件的存放位置

點擊「確定」按鈕,進入還原狀態(千萬不要去點擊「停止」,如反正不成讓它自行報錯再結束)

一會兒不願成功彈出下圖:

點擊確定退出即可。

❹ server資料庫寫進數據的同時,提取數據,為什麼提取數據的速度有時快,有時慢

環境描述還不全面,至少有兩種原因會造成此現象
1、還有其它用戶連接資料庫進行訪問,提取數據的請求如果發生在別的連接線程正在訪問數據的時候,後來的請求當然得排隊了,那麼,前面的請求多少和請求的復雜度就影響到快慢;
2、每隔半秒寫入數據的連接線程,就可能和提取數據的連接線程爭搶資源,雙方都可能搶先或者排後,只不過寫入數據是否慢了,你沒有特別關注,僅僅是發出命令後就不管了,而提取數據,一般會把它們展示出來,花了多長時間展示出來,就是快慢的感覺。

❺ 如何實現同步兩個伺服器的資料庫

同步兩個SQLServer資料庫x0dx0ax0dx0a如何同步兩個sqlserver資料庫的內容?程序代碼可以有版本管理cvs進行同步管理,可是資料庫同步就非常麻煩,只能自己改了一個後再去改另一個,如果忘記了更改另一個經常造成兩個資料庫的結構或內容上不一致.各位有什麼好的方法嗎?x0dx0ax0dx0a一、分發與復制x0dx0ax0dx0a用強制訂閱實現資料庫同步操作. 大量和批量的數據可以用資料庫的同步機制處理:x0dx0a//x0dx0a說明:x0dx0a為方便操作,所有操作均在發布伺服器(分發伺服器)上操作,並使用推模式x0dx0a在客戶機器使用強制訂閱方式。x0dx0ax0dx0a二、測試通過x0dx0ax0dx0a1:環境x0dx0ax0dx0a伺服器環境:x0dx0a機器名稱: zehuadbx0dx0a操作系統:windows 2000 serverx0dx0a資料庫版本:sql 2000 server 個人版x0dx0ax0dx0a客戶端x0dx0a機器名稱:zlpx0dx0a操作系統:windows 2000 serverx0dx0a資料庫版本:sql 2000 server 個人版x0dx0ax0dx0a2:建用戶帳號x0dx0ax0dx0a在伺服器端建立域用戶帳號x0dx0a我的電腦管理->本地用戶和組->用戶->建立x0dx0ausername:zlpx0dx0auserpwd:zlpx0dx0ax0dx0a3:重新啟動伺服器mssqlserverx0dx0ax0dx0a我的電腦->控制面版->管理工具->服務->mssqlserver 服務x0dx0a(更改為:域用戶帳號,我們新建的zlp用戶 .\zlp,密碼:zlp)x0dx0ax0dx0a4:安裝分發伺服器x0dx0ax0dx0aa:配置分發伺服器x0dx0a工具->復制->配置發布、訂閱伺服器和分發->下一步->下一步(所有的均採用默認配置)x0dx0ax0dx0ab:配置發布伺服器x0dx0a工具->復制->創建和管理發布->選擇要發布的資料庫(sz)->下一步->快照發布->下一步->選擇要發布的內容->下一步->下一步->下一步->完成x0dx0ax0dx0ac:強制配置訂閱伺服器(推模式,拉模式與此雷同)x0dx0a工具->復制->配置發布、訂閱伺服器和分發->訂閱伺服器->新建->sql server資料庫->輸入客戶端伺服器名稱(zlp)->使用sql server 身份驗證(sa,空密碼)->確定->應用->確定x0dx0ax0dx0ad:初始化訂閱x0dx0a復制監視器->發布伺服器(zehuadb)->雙擊訂閱->強制新建->下一步->選擇啟用的訂閱伺服器->zlp->下一步->下一步->下一步->下一步->完成x0dx0ax0dx0a5:測試配置是否成功x0dx0ax0dx0a復制監視器->發布衿?zehuadb)->雙擊sz:sz->點狀態->點立即運行代理程序x0dx0ax0dx0a查看:x0dx0a復制監視器->發布伺服器(zehuadb)->sz:sz->選擇zlp:sz(類型強制)->滑鼠右鍵->啟動同步處理x0dx0ax0dx0a如果沒有錯誤標志(紅色叉),恭喜您配置成功x0dx0ax0dx0a6:測試數據x0dx0ax0dx0a在伺服器執行:x0dx0ax0dx0a選擇一個表,執行如下sql: insert into wq_newsgroup_s select '測試成功',5x0dx0ax0dx0a復制監視器->發布伺服器(zehuadb)->sz:sz->快照->啟動代理程序 ->zlp:sz(強制)->啟動同步處理x0dx0ax0dx0a去查看同步的 wq_newsgroup_s 是否插入了一條新的記錄x0dx0ax0dx0a測試完畢,通過。x0dx0a7:修改資料庫的同步時間,一般選擇夜晚執行資料庫同步處理x0dx0a(具體操作略) :dx0dx0ax0dx0a/*x0dx0a注意說明:x0dx0a伺服器一端不能以(local)進行數據的發布與分發,需要先刪除注冊,然後新建注冊本地計算機名稱x0dx0ax0dx0a卸載方式:工具->復制->禁止發布->是在"zehuadb"上靜止發布,卸載所有的資料庫同步配置伺服器x0dx0ax0dx0a注意:發布伺服器、分發伺服器中的sqlserveragent服務必須啟動x0dx0a採用推模式: "d:\microsoft sql server\mssql\repldata\unc" 目錄文件可以不設置共享x0dx0a拉模式:則需要共享~!x0dx0a*/x0dx0a少量資料庫同步可以採用觸發器實現,同步單表即可。x0dx0ax0dx0a三、配置過程中可能出現的問題x0dx0ax0dx0a在sql server 2000里設置和使用資料庫復制之前,應先檢查相關的幾台sql server伺服器下面幾點是否滿足:x0dx0ax0dx0a1、mssqlserver和sqlserveragent服務是否是以域用戶身份啟動並運行的(.\administrator用戶也是可以的)x0dx0ax0dx0a如果登錄用的是本地系統帳戶local,將不具備網路功能,會產生以下錯誤:x0dx0ax0dx0a進程未能連接到distributor '@server name'x0dx0ax0dx0a(如果您的伺服器已經用了sql server全文檢索服務, 請不要修改mssqlserver和sqlserveragent服務的local啟動。x0dx0a會照成全文檢索服務不能用。請換另外一台機器來做sql server 2000里復制中的分發伺服器。)x0dx0ax0dx0a修改服務啟動的登錄用戶,需要重新啟動mssqlserver和sqlserveragent服務才能生效。x0dx0ax0dx0a2、檢查相關的幾台sql server伺服器是否改過名稱(需要srvid=0的本地機器上srvname和datasource一樣)x0dx0ax0dx0a在查詢分析器里執行:x0dx0ause masterx0dx0aselect srvid,srvname,datasource from sysserversx0dx0ax0dx0a如果沒有srvid=0或者srvid=0(也就是本機器)但srvname和datasource不一樣, 需要按如下方法修改:x0dx0ax0dx0ause masterx0dx0agox0dx0a-- 設置兩個變數x0dx0adeclare @serverproperty_servername varchar(100),x0dx0a@servername varchar(100)x0dx0a-- 取得windows nt 伺服器和與指定的 sql server 實例關聯的實例信息x0dx0aselect @serverproperty_servername = convert(varchar(100), serverproperty('servername'))x0dx0a-- 返回運行 microsoft sql server 的本地伺服器名稱x0dx0aselect @servername = convert(varchar(100), @@servername)x0dx0a-- 顯示獲取的這兩個參數x0dx0aselect @serverproperty_servername,@servernamex0dx0a--如果@serverproperty_servername和@servername不同(因為你改過計算機名字),再運行下面的x0dx0a--刪除錯誤的伺服器名x0dx0aexec sp_dropserver @server=@servernamex0dx0a--添加正確的伺服器名x0dx0aexec sp_addserver @server=@serverproperty_servername, @local='local'x0dx0ax0dx0a修改這項參數,需要重新啟動mssqlserver和sqlserveragent服務才能生效。x0dx0ax0dx0a這樣一來就不會在創建復制的過程中出現18482、18483錯誤了。x0dx0ax0dx0a3、檢查sql server企業管理器裡面相關的幾台sql server注冊名是否和上面第二點里介紹的srvname一樣x0dx0ax0dx0a不能用ip地址的注冊名。x0dx0ax0dx0a(我們可以刪掉ip地址的注冊,新建以sql server管理員級別的用戶注冊的伺服器名)x0dx0ax0dx0a這樣一來就不會在創建復制的過程中出現14010、20084、18456、18482、18483錯誤了。x0dx0ax0dx0a4、檢查相關的幾台sql server伺服器網路是否能夠正常訪問x0dx0ax0dx0a如果ping主機ip地址可以,但ping主機名不通的時候,需要在x0dx0ax0dx0awinnt\system32\drivers\etc\hosts (win2000)x0dx0awindows\system32\drivers\etc\hosts (win2003)x0dx0ax0dx0a文件里寫入資料庫伺服器ip地址和主機名的對應關系。x0dx0ax0dx0a例如:x0dx0ax0dx0a127.0.0.1 localhostx0dx0a192.168.0.35 oracledb oracledbx0dx0a192.168.0.65 fengyu02 fengyu02x0dx0a202.84.10.193 bj_db bj_dbx0dx0a或者在sql server客戶端網路實用工具里建立別名,例如:x0dx0a5、系統需要的擴展存儲過程是否存在(如果不存在,需要恢復):x0dx0ax0dx0asp_addextendedproc 'xp_regenumvalues',@dllname ='xpstar.dll'x0dx0agox0dx0asp_addextendedproc 'xp_regdeletevalue',@dllname ='xpstar.dll'x0dx0agox0dx0asp_addextendedproc 'xp_regdeletekey',@dllname ='xpstar.dll'x0dx0agox0dx0asp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll' x0dx0ax0dx0a接下來就可以用sql server企業管理器里[復制]-> 右鍵選擇 ->[配置發布、訂閱伺服器和分發]的圖形界面來配置資料庫復制了。x0dx0ax0dx0a下面是按順序列出配置復制的步驟:x0dx0ax0dx0a1、建立發布和分發伺服器x0dx0ax0dx0a[歡迎使用配置發布和分發向導]->[選擇分發伺服器]->[使"@servername"成為它自己的分發伺服器,sql server將創建分發資料庫和日誌]x0dx0a->[制定快照文件夾]-> [自定義配置] -> [否,使用下列的默認配置] -> [完成]x0dx0ax0dx0a上述步驟完成後, 會在當前"@servername" sql server資料庫里建立了一個distribion庫和 一個distributor_admin管理員級別的用戶(我們可以任意修改密碼)。x0dx0ax0dx0a伺服器上新增加了四個作業:x0dx0ax0dx0a[ 代理程序歷史記錄清除: distribution ]x0dx0a[ 分發清除: distribution ]x0dx0a[ 復制代理程序檢查 ]x0dx0a[ 重新初始化存在數據驗證失敗的訂閱 ]x0dx0ax0dx0asql server企業管理器里多了一個復制監視器, 當前的這台機器就可以發布、分發、訂閱了。x0dx0ax0dx0a我們再次在sql server企業管理器里[復制]-> 右鍵選擇 ->[配置發布、訂閱伺服器和分發]x0dx0ax0dx0a我們可以在 [發布伺服器和分發伺服器的屬性] 窗口-> [發布伺服器] -> [新增] -> [確定] -> [發布資料庫] -> [事務]/[合並] -> [確定] -> [訂閱伺服器] -> [新增] -> [確定]x0dx0ax0dx0a把網路上的其它sql server伺服器添加成為發布或者訂閱伺服器.x0dx0ax0dx0a新增一台發布伺服器的選項:x0dx0ax0dx0a我這里新建立的jin001發布伺服器是用管理員級別的資料庫用戶test連接的,x0dx0ax0dx0a到發布伺服器的管理鏈接要輸入密碼的可選框, 默認的是選中的,x0dx0ax0dx0a在新建的jin001發布伺服器上建立和分發伺服器fengyu/fengyu的鏈接的時需要輸入distributor_admin用戶的密碼。到發布伺服器的管理鏈接要輸入密碼的可選框,也可以不選,也就是不需要密碼來建立發布到分發伺服器的鏈接(這當然欠缺安全,在測試環境下可以使用)。x0dx0ax0dx0a2、新建立的網路上另一台發布伺服器(例如jin001)選擇分發伺服器x0dx0ax0dx0a[歡迎使用配置發布和分發向導]->[選擇分發伺服器]x0dx0ax0dx0a-> 使用下列伺服器(選定的伺服器必須已配置為分發伺服器) -> [選定伺服器](例如fengyu/fengyu)x0dx0ax0dx0a-> [下一步] -> [輸入分發伺服器(例如fengyu/fengyu)的distributor_admin用戶的密碼兩次]x0dx0ax0dx0a-> [下一步] -> [自定義配置] -> [否,使用下列的默認配置]x0dx0ax0dx0a-> [下一步] -> [完成] -> [確定]x0dx0ax0dx0a建立一個資料庫復制發布的過程:x0dx0ax0dx0a[復制] -> [發布內容] -> 右鍵選擇 -> [新建發布]x0dx0ax0dx0a-> [下一步] -> [選擇發布資料庫] -> [選中一個待發布的資料庫]x0dx0ax0dx0a-> [下一步] -> [選擇發布類型] -> [事務發布]/[合並發布]x0dx0ax0dx0a-> [下一步] -> [指定訂閱伺服器的類型] -> [運行sql server 2000的伺服器]x0dx0ax0dx0a-> [下一步] -> [指定項目] -> [在事務發布中只可以發布帶主鍵的表] -> [選中一個有主鍵的待發布的表]x0dx0ax0dx0a->[在合並發布中會給表增加唯一性索引和 rowguidcol 屬性的唯一標識符欄位[rowguid],默認值是newid()]x0dx0ax0dx0a(添加新列將: 導致不帶列列表的 insert 語句失敗,增加表的大小,增加生成第一個快照所要求的時間)x0dx0ax0dx0a->[選中一個待發布的表]x0dx0ax0dx0a-> [下一步] -> [選擇發布名稱和描述] ->x0dx0ax0dx0a-> [下一步] -> [自定義發布的屬性] -> [否,根據指定方式創建發布]x0dx0ax0dx0a-> [下一步] -> [完成] -> [關閉]x0dx0ax0dx0a發布屬性里有很多有用的選項:設定訂閱到期(例如24小時)x0dx0ax0dx0a設定發布表的項目屬性:x0dx0ax0dx0a常規窗口可以指定發布目的表的名稱,可以跟原來的表名稱不一樣。x0dx0ax0dx0a下圖是命令和快照窗口的欄目x0dx0ax0dx0a( sql server 資料庫復制技術實際上是用insert,update,delete操作在訂閱伺服器上重做發布伺服器上的事務操作x0dx0ax0dx0a看文檔資料需要把發布資料庫設成完全恢復模式,事務才不會丟失x0dx0ax0dx0a但我自己在測試中發現發布資料庫是簡單恢復模式下,每10秒生成一些大事務,10分鍾後再收縮資料庫日誌,x0dx0a這期間發布和訂閱伺服器上的作業都暫停,暫停恢復後並沒有丟失任何事務更改 )x0dx0ax0dx0a發布表可以做數據篩選,例如只選擇表裡面的部分列:x0dx0ax0dx0a例如只選擇表裡某些符合條件的記錄, 我們可以手工編寫篩選的sql語句:x0dx0ax0dx0a發布表的訂閱選項,並可以建立強制訂閱:x0dx0ax0dx0a成功建立了發布以後,發布伺服器上新增加了一個作業: [ 失效訂閱清除 ]x0dx0ax0dx0a分發伺服器上新增加了兩個作業:x0dx0a[ jin001-dack-dack-5 ] 類型[ repl快照 ]x0dx0a[ jin001-dack-3 ] 類型[ repl日誌讀取器 ]x0dx0ax0dx0a上面藍色字的名稱會根據發布伺服器名,發布名及第幾次發布而使用不同的編號x0dx0ax0dx0arepl快照作業是sql server復制的前提條件,它會先把發布的表結構,數據,索引,約束等生成到發布伺服器的os目錄下文件x0dx0a(當有訂閱的時候才會生成, 當訂閱請求初始化或者按照某個時間表調度生成)x0dx0ax0dx0arepl日誌讀取器在事務復制的時候是一直處於運行狀態。(在合並復制的時候可以根據調度的時間表來運行)x0dx0ax0dx0a建立一個資料庫復制訂閱的過程:x0dx0ax0dx0a[復制] -> [訂閱] -> 右鍵選擇 -> [新建請求訂閱]x0dx0ax0dx0a-> [下一步] -> [查找發布] -> [查看已注冊伺服器所做的發布]x0dx0ax0dx0a-> [下一步] -> [選擇發布] -> [選中已經建立發布伺服器上的資料庫發布名]x0dx0ax0dx0a-> [下一步] -> [指定同步代理程序登錄] -> [當代理程序連接到代理伺服器時:使用sql server身份驗證]x0dx0a(輸入發布伺服器上distributor_admin用戶名和密碼)x0dx0ax0dx0a-> [下一步] -> [選擇目的資料庫] -> [選擇在其中創建訂閱的資料庫名]/[也可以新建一個庫名]x0dx0ax0dx0a-> [下一步] -> [允許匿名訂閱] -> [是,生成匿名訂閱]x0dx0ax0dx0a-> [下一步] -> [初始化訂閱] -> [是,初始化架構和數據]x0dx0ax0dx0a-> [下一步] -> [快照傳送] -> [使用該發布的默認快照文件夾中的快照文件]x0dx0a(訂閱伺服器要能訪問發布伺服器的repldata文件夾,如果有問題,可以手工設置網路共享及共享許可權)x0dx0ax0dx0a-> [下一步] -> [快照傳送] -> [使用該發布的默認快照文件夾中的快照文件]x0dx0ax0dx0a-> [下一步] -> [設置分發代理程序調度] -> [使用下列調度] -> [更改] -> [例如每五分鍾調度一次]x0dx0ax0dx0a-> [下一步] -> [啟動要求的服務] -> [該訂閱要求在發布伺服器上運行sqlserveragent服務]x0dx0ax0dx0a-> [下一步] -> [完成] -> [確定]x0dx0ax0dx0a成功建立了訂閱後,訂閱伺服器上新增加了一個類別是[repl-分發]作業(合並復制的時候類別是[repl-合並])x0dx0ax0dx0a它會按照我們給的時間調度表運行資料庫同步復制的作業。x0dx0ax0dx0a3、sql server復制配置好後, 可能出現異常情況的實驗日誌:x0dx0ax0dx0a1.發布伺服器斷網,sql server服務關閉,重啟動,關機的時候,對已經設置好的復制沒有多大影響x0dx0ax0dx0a中斷期間,分發和訂閱都接收到沒有復制的事務信息x0dx0ax0dx0a2.分發伺服器斷網,sql server服務關閉,重啟動,關機的時候,對已經設置好的復制有一些影響x0dx0ax0dx0a中斷期間,發布伺服器的事務排隊堆積起來x0dx0a(如果設置了較長時間才刪除過期訂閱的選項, 繁忙發布資料庫的事務日誌可能會較快速膨脹),x0dx0ax0dx0a訂閱伺服器會因為訪問不到發布伺服器,反復重試x0dx0a我們可以設置重試次數和重試的時間間隔(最大的重試次數是9999, 如果每分鍾重試一次,可以支持約6.9天不出錯)x0dx0ax0dx0a分發伺服器sql server服務啟動,網路接通以後,發布伺服器上的堆積作業將按時間順序作用到訂閱機器上:x0dx0ax0dx0a會需要一個比較長的時間(實際上是生成所有事務的insert,update,delete語句,在訂閱伺服器上去執行)x0dx0a我們在普通的pc機上實驗的58個事務100228個命令執行花了7分28秒.x0dx0ax0dx0a3.訂閱伺服器斷網,sql server服務關閉,重啟動,關機的時候,對已經設置好的復制影響比較大,可能需要重新初試化x0dx0ax0dx0a我們實驗環境(訂閱伺服器)從18:46分意外停機以, 第二天8:40分重啟動後, 已經設好的復制在8:40分以後又開始正常運行了, 發布伺服器上的堆積作業將按時間順序作用到訂閱機器上, 但復制管理器里出現快照的錯誤提示, 快照可能需要重新初試化,復制可能需要重新啟動.(我們實驗環境的機器並沒有進行快照初試化,復制仍然是成功運行的)x0dx0ax0dx0a4、刪除已經建好的發布和定閱可以直接用delete刪除按鈕x0dx0ax0dx0a我們最好總是按先刪定閱,再刪發布,最後禁用發布的順序來操作。x0dx0ax0dx0a如果要徹底刪去sql server上面的復制設置, 可以這樣操作:x0dx0ax0dx0a[復制] -> 右鍵選擇 [禁用發布] -> [歡迎使用禁用發布和分發向導]x0dx0ax0dx0a-> [下一步] -> [禁用發布] -> [要在"@servername