日韩无码av永久免费网_国产丶欧美丶日本不卡视频_国产精品亚洲A∨天堂不_日本黄色片在线观看_欧美专区在线播放_精品无人乱码高清_青青青视频免费一区二区_午夜亚洲精品成人_國產最新自拍視頻_怡红院最新网址

 
  佳盟首頁 透視佳盟 新聞動態(tài) 移動商務 公司產(chǎn)品 典型用戶 解決方案 佳盟服務 渠道聯(lián)盟 關(guān)聯(lián)企業(yè)
12551星期四
帳 號:
密 碼:
 
  當前位置:首頁 >佳盟服務
   佳盟服務
  SQL備份和Server 觸發(fā)器

  為什么我不能把我的SQL Server數(shù)據(jù)庫備份/存儲到網(wǎng)絡上?

  答:原因是MSSQLSERVER服務與NT credentials是分開運行的。不管你以什么身份登陸,SQL都可以工作。因此你的登陸帳號與任何映射驅(qū)動器是無關(guān)的。是SQL Server在做備份而不是你。同樣,通過SQL      Executive/SQL Agent做備份就是把TSQL傳送到SQL Server去運行,所以這仍然是MSSQLSERVER在做備份/存儲。
因此備份GUI不顯示你的影射驅(qū)動器也不允許輸入UNC路徑。你必須使用原始TSQL命令來做備份。
MSSQLSERVER使用的默認NT credentials設置是本地系統(tǒng)帳號。你可以在控制面板/服務的高亮度的MSSQLSERVER上選擇開始來檢查MSSQLSERVER運行在什么USERID下。
   本地系統(tǒng)帳號不能共享網(wǎng)絡存取,因為它不是經(jīng)過認證的網(wǎng)絡帳號。
   所以,如果你想把數(shù)據(jù)庫備份到一個可共享的網(wǎng)絡上,有兩種選擇:
   1 改變運行MSSQLSERVER服務的帳號為具有相關(guān)網(wǎng)絡權(quán)限的用戶帳號。
   2 修改目的服務器的     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\NullSessionShares注冊值并添加你想導出到的共享文件名稱-這個共享不能認證誰來訪問。在改變生效之前目的服務器上的服務器服務必須重新啟動。注意這次操作因為共享而失去了安全性,所以你要小心什么是可以共享的。 不管你使用哪種方法,都必須使用UNC名來標識文件而不是一個驅(qū)動器字母。
例如(6.5)把數(shù)據(jù)庫PUBS導出到DISK='\\server01\share\backupdir\backup.dmp'
(7.0)把數(shù)據(jù)庫PUBS備份到DISK='\\server01\share\backupdir\backup.dmp'

  把拷貝過的SQL Server 7數(shù)據(jù)庫恢復的正確方法.

  在SQL Server 7中由于MS重新設計了數(shù)據(jù)庫文件的存儲方式,取消了新建設備再建數(shù)據(jù)庫這一繁瑣的過程。新的存儲格式,一個數(shù)據(jù)庫包括兩個文件,mdf數(shù)據(jù)庫文件和ldf日志文件。所以我們在重裝機器備份時可以把你要備份的數(shù)據(jù)庫的這兩個文件拷貝出來,重新安裝之后再恢復。
   在SQL Server中提供了這種恢復方式的存儲過程。
   1.sp_attach_db [@dbname =] 'dbname',[@filename1 =] 'filename_n'
給系統(tǒng)添加一個數(shù)據(jù)庫,在dbname指定數(shù)據(jù)庫名稱,filename_n指定數(shù)據(jù)庫的文件和日志文件。比如我有一個voogiya的庫,停止SQL Server服務備份voogiya_data.mdf,voogiya_log.ldf,啟動SQL server,刪除掉這個庫,然后再把這兩上文件拷到sql server DATA目錄中,在Query Analyzer中執(zhí)行如下語句:
EXEC sp_attach_db @dbname = N'voogiya',
@filename1 = N'd:\mssql7\data\voogiya_data.mdf',
@filename2 = N'd:\mssql7\data\voogiya_log.ldf'
就會把這個庫加入到SQL Server Group中.
2.sp_attach_single_file_db [@dbname =] 'dbname',
[@physname =] 'physical_name'
這個命令和上面的功能一樣,在physical_name中只要寫上據(jù)庫的物理文件名就可以了,日志文件SQL server會重新建立。這個存儲過程的運行要先執(zhí)行下面的存儲過程:
sp_detach_db @dbname = 'dbname'
同樣以上面的為例:
EXEC sp_detach_db @dbname = 'voogiya'
EXEC sp_attach_single_file_db @dbname = 'voogiya',
@physname = 'd:\mssql7\data\voogiya_data.mdf'

  要注意執(zhí)行以上存儲過程的用戶要在sysadmin中.

  以上方法在windows Nt 4.0,service pack5,sql server 7.0上運行通過。


   Server 觸發(fā)器在U8 實施中的應用

  大家想像一下這樣的需求,客戶是一個經(jīng)銷各種藥品的集團企業(yè),總公司下設十幾個分子公司,各分子公司獨立核算盈虧(意味著要建十幾套賬),各分子公司與總公司同城,利用內(nèi)部光纖相連,在總公司服務器上統(tǒng)一建賬,要求:
   1)、各分子公司與總公司基礎檔案(如供應商、客戶、存貨分類、存貨)保持實時一致(即在任何時候都要是一致的)。
   2)、總公司向各分子公司調(diào)撥藥品,這類業(yè)務在該公司非常頻繁,因此客戶希望在總公司賬套填制一張調(diào)撥單后,能夠在對應的分子公司賬套中自動生成一張調(diào)撥單。這樣可以減輕他們很大的工作量。
一般來說,因為用友U8(包括8X系列和零戶統(tǒng)管)目前尚沒有類似功能,如果要實現(xiàn)這些需求,只有通過二次開發(fā),具體方法各位見仁見智。在這里我想談一下我的解決思路,由于自認為有一定代表性,所以不敢藏拙,貼出來搏各位大蝦一笑。
   我們知道,用友U8系列管理軟件由于選用了SQL Server (7.0或2000版本)作為后臺處理數(shù)據(jù)庫,使軟件功能有了很大的提升,但同時因為SQL Server 數(shù)據(jù)庫本身的復雜性,也給U8的實施帶來了一定的困難。但是,我們?nèi)绻軌蚴炀殤肧QL Server 本身的許多特性的話,則會有一些意想不到的收獲,甚至大大擴展U8的功能。
針對以上客戶需求,我利用SQL Server中的觸發(fā)器,針對第一個需求,解決方法如下:
如客戶總公司賬套號為001,分子公司賬套號為002和003(由于十幾套賬和兩套賬的道理是一致的,這里只選擇兩套賬),客戶檔案同步更新的SQL語句如下:
if exists(select name from sysobjects where type =‘tr‘ and name=‘customer_delete‘) --客戶表刪除
drop trigger customer_delete
go
create trigger customer_delete on customer for delete
as
delete from ufdata_002_2001..customer where ccuscode in (select ccuscode from deleted)
delete from ufdata_003_2001..customer where ccuscode in (select ccuscode from deleted)
go
if exists(select name from sysobjects where type =‘tr‘ and name=‘customer_insert‘) --客戶表插入
drop trigger customer_insert
go
create trigger customer_insert on customer for insert
as
insert ufdata_002_2001..customer select * from inserted
insert ufdata_003_2001..customer select * from inserted
go

  以上語句在SQL Query Analyzer 中的Ufdata_001_2001數(shù)據(jù)庫中執(zhí)行之后,在001賬套中任意增加或刪除一個客戶檔案之后,002和003賬套中的對應客戶檔案也被同步增加或刪除,即基本達到了客戶的要求。
其它基礎檔案的同步與以上類似:
   1、 客戶分類,只需將以SQL語句中的所有Customer替換為customerclass,ccuscode替換為ccccode即可。
   2、 供應商分類,將customer替換為vendorclass,ccuscode替換為cvccode即可。
   3、 供應商檔案,將customer替換為vendor,ccuscode替換為cvencode即可。

  可能有些對SQL不太熟悉的朋友對以上語句的機理不太了解,下面我就不嫌啰嗦,再解說一下:
先說一下觸發(fā)器,觸發(fā)器是一種實施復雜的完整性約束的特殊存儲過程,當對它所保護的數(shù)據(jù)進行修改時自動激活,防止對數(shù)據(jù)進行不正確、未授權(quán)或不一致的修改。觸發(fā)器又不像一般的存儲過程,不能像一般存儲過程一樣通過存儲過程的名字來調(diào)用或執(zhí)行。而是當用戶對指定的表進行修改(包括插入、刪除或更新)時,SQL Server將自動執(zhí)行在相應觸發(fā)器中的SQL語句。
   講解觸發(fā)器,必須先講一下觸發(fā)器的兩個專用表:inserted表和deleted表。這是兩個邏輯表,由系統(tǒng)來維護,不允許用戶直接對這兩個表進行修改。它們存放于內(nèi)存中,不存放在數(shù)據(jù)庫中。這兩個表的結(jié)構(gòu)總是與被該觸發(fā)器作用的表的結(jié)構(gòu)相同。觸發(fā)器工作完成后,與觸發(fā)器相關(guān)的這兩個表也會被刪除。
   1、 inserted表:存放由于insert或update語句的執(zhí)行而導致要加到該觸發(fā)器作用的表中去的所有新行。即用于插入或更新的新行值,在插入或更新表的同時,也將其副本存入inserted表中。因此,在inserted表中的行總是與作用表中的新行相同。
   2、 deleted表:存放由于delete或update語句的執(zhí)行而導致要加到該觸發(fā)器作用的表中刪除的所有行。也就是說,把被作用表中要刪除或要更新的舊行移到deleted表中。因此,deleted表和被作用表不會有相同的行。
對INSERT操作,只在inserted表中保存所插入的新行,而deleted表中無數(shù)據(jù)。對于DELETE操作,只在deleted保存被刪除的舊行,而inserted表中無數(shù)據(jù)。對于UPDATE操作,可以將它理解為DELETE操作和INSERT操作的結(jié)果,所以在inserted表中存放著更新后的新行值,deleted表中存放著更新前的舊行值。
明白了這些道理之后,我上面的代碼想必也就不難理解了。

上海佳盟計算機系統(tǒng)有限公司 | ShangHai Best-Union Computer System CO,.LTD.
上海市浦東新區(qū)浦東大道1525號中國石化大廈西樓22層 郵編:200135
總機:400-060-1683 傳真:021-68532023 滬ICP備17049617號-1