當(dāng)前位置:首頁>>開發(fā)編程>>數(shù)據(jù)庫>>新聞內(nèi)容
SQL SERVER實用經(jīng)驗技巧集
作者:longrujun 發(fā)布時間:2004-9-10 16:29:38 文章來源:CSDN
  此文是Sql Server實用操作小技巧集合,包括安裝時提示有掛起的操作、收縮數(shù)據(jù)庫、壓縮數(shù)據(jù)庫、轉(zhuǎn)移數(shù)據(jù)庫給新用戶以已存在用戶權(quán)限、檢查備份集、修復(fù)數(shù)據(jù)庫等。

  (一)掛起操作

  在安裝Sql或sp補丁的時候系統(tǒng)提示之前有掛起的安裝操作,要求重啟,這里往往重啟無用,解決辦法:

  到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
  刪除PendingFileRenameOperations

 。ǘ┦湛s數(shù)據(jù)庫


  --重建索引
  DBCC REINDEX
  DBCC INDEXDEFRAG
  --收縮數(shù)據(jù)和日志
  DBCC SHRINKDB
  DBCC SHRINKFILE

  (三)壓縮數(shù)據(jù)庫


  dbcc shrinkdatabase(dbname)

 。ㄋ模┺D(zhuǎn)移數(shù)據(jù)庫給新用戶以已存在用戶權(quán)限


  exec sp_change_users_login 'update_one','newname','oldname'
  go

 。ㄎ澹z查備份集


  RESTORE VERIFYONLY from disk='E:\dvbbs.bak'

 。┬迯(fù)數(shù)據(jù)庫


  ALTER DATABASE [dvbbs] SET SINGLE_USER
  GO
  DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
  GO
  ALTER DATABASE [dvbbs] SET MULTI_USER
  GO

  --CHECKDB 有3個參數(shù):

  --REPAIR_ALLOW_DATA_LOSS

  --  執(zhí)行由 REPAIR_REBUILD 完成的所有修復(fù),包括對行和頁進行分配和取消分配以改正分配錯誤、結(jié)構(gòu)行或頁的錯誤,以及刪除已損壞的文本對象。這些修復(fù)可能會導(dǎo)致一些數(shù)據(jù)丟失。修復(fù)操作可以在用戶事務(wù)下完成以允許用戶回滾所做的更改。如果回滾修復(fù),則數(shù)據(jù)庫仍會含有錯誤,應(yīng)該從備份進行恢復(fù)。如果由于所提供修復(fù)等級的緣故遺漏某個錯誤的修復(fù),則將遺漏任何取決于該修復(fù)的修復(fù)。修復(fù)完成后,備份數(shù)據(jù)庫。

  --REPAIR_FAST 進行小的、不耗時的修復(fù)操作,如修復(fù)非聚集索引中的附加鍵。這些修復(fù)可以很快完成,并且不會有丟失數(shù)據(jù)的危險。

  --REPAIR_REBUILD 執(zhí)行由 REPAIR_FAST 完成的所有修復(fù),包括需要較長時間的修復(fù)(如重建索引)。執(zhí)行這些修復(fù)時不會有丟失數(shù)據(jù)的危險。


  --DBCC CHECKDB('dvbbs') with NO_INFOMSGS,PHYSICAL_ONLY

  SQL SERVER日志清除的兩種方法
  在使用過程中大家經(jīng)常碰到數(shù)據(jù)庫日志非常大的情況,在這里介紹了兩種處理方法……

  方法一

  一般情況下,SQL數(shù)據(jù)庫的收縮并不能很大程度上減小數(shù)據(jù)庫大小,其主要作用是收縮日志大小,應(yīng)當(dāng)定期進行此操作以免數(shù)據(jù)庫日志過大

  1、設(shè)置數(shù)據(jù)庫模式為簡單模式:打開SQL企業(yè)管理器,在控制臺根目錄中依次點開Microsoft SQL Server-->SQL Server組-->雙擊打開你的服務(wù)器-->雙擊打開數(shù)據(jù)庫目錄-->選擇你的數(shù)據(jù)庫名稱(如論壇數(shù)據(jù)庫Forum)-->然后點擊右鍵選擇屬性-->選擇選項-->在故障還原的模式中選擇“簡單”,然后按確定保存。

  2、在當(dāng)前數(shù)據(jù)庫上點右鍵,看所有任務(wù)中的收縮數(shù)據(jù)庫,一般里面的默認設(shè)置不用調(diào)整,直接點確定。

  3、收縮數(shù)據(jù)庫完成后,建議將您的數(shù)據(jù)庫屬性重新設(shè)置為標(biāo)準(zhǔn)模式,操作方法同第一點,因為日志在一些異常情況下往往是恢復(fù)數(shù)據(jù)庫的重要依據(jù)

  方法二


  SET NOCOUNT ON
  DECLARE @LogicalFileName sysname,
  @MaxMinutes INT,
  @NewSize INT

  USE     tablename             -- 要操作的數(shù)據(jù)庫名
  SELECT  @LogicalFileName = 'tablename_log',  -- 日志文件名
  @MaxMinutes = 10,               -- Limit on time allowed to wrap log.
  @NewSize = 1                  -- 你想設(shè)定的日志文件的大小(M)


  -- Setup / initialize
  DECLARE @OriginalSize int
  SELECT @OriginalSize = size
  FROM sysfiles
  WHERE name = @LogicalFileName
  SELECT 'Original Size of ' + db_name() + ' LOG is ' +
  CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
  CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
  FROM sysfiles
  WHERE name = @LogicalFileName
  CREATE TABLE DummyTrans
  (DummyColumn char (8000) not null)


  DECLARE @Counter   INT,
  @StartTime DATETIME,
  @TruncLog  VARCHAR(255)
  SELECT  @StartTime = GETDATE(),
  @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

  DBCC SHRINKFILE (@LogicalFileName, @NewSize)
  EXEC (@TruncLog)
  -- Wrap the log if necessary.
  WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
  AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) 
  AND (@OriginalSize * 8 /1024) > @NewSize 
  BEGIN -- Outer loop.
  SELECT @Counter = 0
  WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
  BEGIN -- update
  INSERT DummyTrans VALUES ('Fill Log') 
  DELETE DummyTrans
  SELECT @Counter = @Counter + 1
  END  
  EXEC (@TruncLog) 
  END  
  SELECT 'Final Size of ' + db_name() + ' LOG is ' +
  CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
  CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
  FROM sysfiles
  WHERE name = @LogicalFileName
  DROP TABLE DummyTrans
  SET NOCOUNT OFF


  刪除數(shù)據(jù)庫中重復(fù)數(shù)據(jù)的幾個方法
  數(shù)據(jù)庫的使用過程中由于程序方面的問題有時候會碰到重復(fù)數(shù)據(jù),重復(fù)數(shù)據(jù)導(dǎo)致了數(shù)據(jù)庫部分設(shè)置不能正確設(shè)置……

  方法一


  declare @max integer,@id integer
  declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
  open cur_rows
  fetch cur_rows into @id,@max
  while @@fetch_status=0
  begin
  select @max = @max -1
  set rowcount @max
  delete from 表名 where 主字段 = @id
  fetch cur_rows into @id,@max
  end
  close cur_rows
  set rowcount 0

 

  方法二

  有兩個意義上的重復(fù)記錄,一是完全重復(fù)的記錄,也即所有字段均重復(fù)的記錄,二是部分關(guān)鍵字段重復(fù)的記錄,比如Name字段重復(fù),而其他字段不一定重復(fù)或都重復(fù)可以忽略。

  1、對于第一種重復(fù),比較容易解決,使用


  select distinct * from tableName

  就可以得到無重復(fù)記錄的結(jié)果集。

  如果該表需要刪除重復(fù)的記錄(重復(fù)記錄保留1條),可以按以下方法刪除


  select distinct * into #Tmp from tableName
  drop table tableName
  select * into tableName from #Tmp
  drop table #Tmp


  發(fā)生這種重復(fù)的原因是表設(shè)計不周產(chǎn)生的,增加唯一索引列即可解決。

  2、這類重復(fù)問題通常要求保留重復(fù)記錄中的第一條記錄,操作方法如下
  假設(shè)有重復(fù)的字段為Name,Address,要求得到這兩個字段唯一的結(jié)果集


  select identity(int,1,1) as autoID, * into #Tmp from tableName
  select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
  select * from #Tmp where autoID in(select autoID from #tmp2)


  最后一個select即得到了Name,Address不重復(fù)的結(jié)果集(但多了一個autoID字段,實際寫時可以寫在select子句中省去此列)

  更改數(shù)據(jù)庫中表的所屬用戶的兩個方法
  大家可能會經(jīng)常碰到一個數(shù)據(jù)庫備份還原到另外一臺機器結(jié)果導(dǎo)致所有的表都不能打開了,原因是建表的時候采用了當(dāng)時的數(shù)據(jù)庫用戶……

  --更改某個表


  exec sp_changeobjectowner 'tablename','dbo'


  --存儲更改全部表


  CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
  @OldOwner as NVARCHAR(128),
  @NewOwner as NVARCHAR(128)
  AS

  DECLARE @Name   as NVARCHAR(128)
  DECLARE @Owner  as NVARCHAR(128)
  DECLARE @OwnerName  as NVARCHAR(128)

  DECLARE curObject CURSOR FOR
  select 'Name'   = name,
  'Owner'   = user_name(uid)
  from sysobjects
  where user_name(uid)=@OldOwner
  order by name

  OPEN  curObject
  FETCH NEXT FROM curObject INTO @Name, @Owner
  WHILE(@@FETCH_STATUS=0)
  BEGIN    
  if @Owner=@OldOwner
  begin
  set @OwnerName = @OldOwner + '.' + rtrim(@Name)
  exec sp_changeobjectowner @OwnerName, @NewOwner
  end
  -- select @name,@NewOwner,@OldOwner

  FETCH NEXT FROM curObject INTO @Name, @Owner
  END

  close curObject
  deallocate curObject

  GO


  SQL SERVER中直接循環(huán)寫入數(shù)據(jù)
  沒什么好說的了,大家自己看,有時候有點用處


  declare @i int
  set @i=1
  while @i<30
  begin
  insert into test (userid) values(@i)
  set @i=@i+1
  end

  無數(shù)據(jù)庫日志文件恢復(fù)數(shù)據(jù)庫方法兩則
  數(shù)據(jù)庫日志文件的誤刪或別的原因引起數(shù)據(jù)庫日志的損壞


  方法一

  1.新建一個同名的數(shù)據(jù)庫

  2.再停掉sql server(注意不要分離數(shù)據(jù)庫)

  3.用原數(shù)據(jù)庫的數(shù)據(jù)文件覆蓋掉這個新建的數(shù)據(jù)庫

  4.再重啟sql server

  5.此時打開企業(yè)管理器時會出現(xiàn)置疑,先不管,執(zhí)行下面的語句(注意修改其中的數(shù)據(jù)庫名)

  6.完成后一般就可以訪問數(shù)據(jù)庫中的數(shù)據(jù)了,這時,數(shù)據(jù)庫本身一般還要問題,解決辦法是,利用
  數(shù)據(jù)庫的腳本創(chuàng)建一個新的數(shù)據(jù)庫,并將數(shù)據(jù)導(dǎo)進去就行了.


  USE MASTER
  GO

  SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
  GO

  UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的數(shù)據(jù)庫名'
  Go

  sp_dboption '置疑的數(shù)據(jù)庫名', 'single user', 'true'
  Go

  DBCC CHECKDB('置疑的數(shù)據(jù)庫名')
  Go

  update sysdatabases set status =28 where name='置疑的數(shù)據(jù)庫名'
  Go

  sp_configure 'allow updates', 0 reconfigure with override
  Go

  sp_dboption '置疑的數(shù)據(jù)庫名', 'single user', 'false'
  Go

  方法二

  事情的起因

  昨天,系統(tǒng)管理員告訴我,我們一個內(nèi)部應(yīng)用數(shù)據(jù)庫所在的磁盤空間不足了。我注意到數(shù)據(jù)庫事件日志文件XXX_Data.ldf文件已經(jīng)增長到了3GB,于是我決意縮小這個日志文件。經(jīng)過收縮數(shù)據(jù)庫等操作未果后,我犯了一個自進入行業(yè)以來的最大最愚蠢的錯誤:竟然誤刪除了這個日志文件!后來我看到所有論及數(shù)據(jù)庫恢復(fù)的文章上都說道:“無論如何都要保證數(shù)據(jù)庫日志文件存在,它至關(guān)重要”,甚至微軟甚至有一篇KB文章講如何只靠日志文件恢復(fù)數(shù)據(jù)庫的。我真是不知道我那時候是怎么想的?!

  這下子壞了!這個數(shù)據(jù)庫連不上了,企業(yè)管理器在它的旁邊寫著“(置疑)”。而且最要命的,這個數(shù)據(jù)庫從來沒有備份了。我唯一找得到的是遷移半年前的另外一個數(shù)據(jù)庫服務(wù)器,應(yīng)用倒是能用了,但是少了許多記錄、表和存儲過程。真希望這只是一場噩夢!

  沒有效果的恢復(fù)步驟
  附加數(shù)據(jù)庫
  _Rambo講過被刪除日志文件中不存在活動日志時,可以這么做來恢復(fù):

  1,分離被置疑的數(shù)據(jù)庫,可以使用sp_detach_db
  2,附加數(shù)據(jù)庫,可以使用sp_attach_single_file_db

  但是,很遺憾,執(zhí)行之后,SQL Server質(zhì)疑數(shù)據(jù)文件和日志文件不符,所以無法附加數(shù)據(jù)庫數(shù)據(jù)文件。

  DTS數(shù)據(jù)導(dǎo)出
  不行,無法讀取XXX數(shù)據(jù)庫,DTS Wizard報告說“初始化上下文發(fā)生錯誤”。

  緊急模式
  怡紅公子講過沒有日志用于恢復(fù)時,可以這么做:

  1,把數(shù)據(jù)庫設(shè)置為emergency mode

  2,重新建立一個log文件

  3,把SQL Server 重新啟動一下

  4,把應(yīng)用數(shù)據(jù)庫設(shè)置成單用戶模式

  5,做DBCC CHECKDB

  6,如果沒有什么大問題就可以把數(shù)據(jù)庫狀態(tài)改回去了,記得別忘了把系統(tǒng)表的修改選項關(guān)掉

  我實踐了一下,把應(yīng)用數(shù)據(jù)庫的數(shù)據(jù)文件移走,重新建立一個同名的數(shù)據(jù)庫XXX,然后停掉SQL服務(wù),把原來的數(shù)據(jù)文件再覆蓋回來。之后,按照怡紅公子的步驟走。

  但是,也很遺憾,除了第2步之外,其他步驟執(zhí)行非常成功?上В貑QL Server之后,這個應(yīng)用數(shù)據(jù)庫仍然是置疑!

  不過,讓我欣慰的是,這么做之后,倒是能夠Select數(shù)據(jù)了,讓我大出一口氣。只不過,組件使用數(shù)據(jù)庫時,報告說:“發(fā)生錯誤:-2147467259,未能在數(shù)據(jù)庫 'XXX' 中運行 BEGIN TRANSACTION,因為該數(shù)據(jù)庫處于回避恢復(fù)模式。”

  最終成功恢復(fù)的全部步驟
  設(shè)置數(shù)據(jù)庫為緊急模式
  停掉SQL Server服務(wù);

  把應(yīng)用數(shù)據(jù)庫的數(shù)據(jù)文件XXX_Data.mdf移走;

  重新建立一個同名的數(shù)據(jù)庫XXX;

  停掉SQL服務(wù);

  把原來的數(shù)據(jù)文件再覆蓋回來;

  運行以下語句,把該數(shù)據(jù)庫設(shè)置為緊急模式;


  運行“Use Master

  Go

  sp_configure 'allow updates', 1

  reconfigure with override

  Go”

  執(zhí)行結(jié)果:

  DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。

  已將配置選項 'allow updates' 從 0 改為 1。請運行 RECONFIGURE 語句以安裝。

  接著運行“update sysdatabases set status = 32768 where name = 'XXX'”

  執(zhí)行結(jié)果:

  (所影響的行數(shù)為 1 行)

  重啟SQL Server服務(wù);

  運行以下語句,把應(yīng)用數(shù)據(jù)庫設(shè)置為Single User模式;

  運行“sp_dboption 'XXX', 'single user', 'true'”

  執(zhí)行結(jié)果:

  命令已成功完成。

  ü         做DBCC CHECKDB;

  運行“DBCC CHECKDB('XXX')”

  執(zhí)行結(jié)果:

  'XXX' 的 DBCC 結(jié)果。

  'sysobjects' 的 DBCC 結(jié)果。

  對象 'sysobjects' 有 273 行,這些行位于 5 頁中。

  'sysindexes' 的 DBCC 結(jié)果。

  對象 'sysindexes' 有 202 行,這些行位于 7 頁中。

  'syscolumns' 的 DBCC 結(jié)果。

  ………

  ü         運行以下語句把系統(tǒng)表的修改選項關(guān)掉;


  運行“sp_resetstatus "XXX"

  go

  sp_configure 'allow updates', 0

  reconfigure with override

  Go”

  執(zhí)行結(jié)果:

  在 sysdatabases 中更新數(shù)據(jù)庫 'XXX' 的條目之前,模式 = 0,狀態(tài) = 28(狀態(tài) suspect_bit = 0),

  沒有更新 sysdatabases 中的任何行,因為已正確地重置了模式和狀態(tài)。沒有錯誤,未進行任何更改。

  DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。

  已將配置選項 'allow updates' 從 1 改為 0。請運行 RECONFIGURE 語句以安裝。

  重新建立另外一個數(shù)據(jù)庫XXX.Lost;

  DTS導(dǎo)出向?qū)?BR>  運行DTS導(dǎo)出向?qū)В?/P>

  復(fù)制源選擇EmergencyMode的數(shù)據(jù)庫XXX,導(dǎo)入到XXX.Lost;

  選擇“在SQL Server數(shù)據(jù)庫之間復(fù)制對象和數(shù)據(jù)”,試了多次,好像不行,只是復(fù)制過來了所有表結(jié)構(gòu),但是沒有數(shù)據(jù),也沒有視圖和存儲過程,而且DTS向?qū)ё詈髨蟾鎻?fù)制失;

  所以最后選擇“從源數(shù)據(jù)庫復(fù)制表和視圖”,但是后來發(fā)現(xiàn),這樣總是只能復(fù)制一部分表記錄;

  于是選擇“用一條查詢指定要傳輸?shù)臄?shù)據(jù)”,缺哪個表記錄,就導(dǎo)哪個;

  視圖和存儲過程是執(zhí)行SQL語句添加的。

  維護Sql Server中表的索引

  在使用和創(chuàng)建數(shù)據(jù)庫索引中經(jīng)常會碰到一些問題,在這里可以采用一些另類的方法解決…

  --第一步:查看是否需要維護,查看掃描密度/Scan Density是否為100%

  declare @table_id int
  set @table_id=object_id('表名')
  dbcc showcontig(@table_id)

  --第二步:重構(gòu)表索引
  dbcc dbreindex('表名',pk_索引名,100)

  --重做第一步,如發(fā)現(xiàn)掃描密度/Scan Density還是小于100%則重構(gòu)表的所有索引
  --楊錚:并不一定能達100%。
  dbcc dbreindex('表名','',100)

  SQL Server補丁安裝常見問題
  誰碰到問題就看看咯:)

  一、補丁安裝過程中常見問題

  如果在安裝補丁的時候遇到如下類似錯誤:

  1、安裝過程中出現(xiàn)“以前進行的程序創(chuàng)建了掛起的文件操作,運行安裝程序前,必須重新啟動”,請按照下面步驟解決:

  a、重啟機器,再進行安裝,如果發(fā)現(xiàn)還有該錯誤,請按下面步驟
  b、在開始->運行中輸入regedit
  c、到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 位置
  d、選擇文件->倒出,保存
  e、在右邊窗口右擊PendingFileRenameOperations,選擇刪除,然后確認
  f、重啟安裝,問題解決

  如果還有同樣問題,請檢查其它注冊表中是否有該值存在,如有請刪掉。

  2、在安裝SQL Server SP3,有時候會出現(xiàn):無論用windows認證還是混和認證,都出現(xiàn)密碼錯誤的情況,這時查看臨時目錄下的sqlsp.out,會發(fā)現(xiàn)以下描述:
  [TCP/IP Sockets]Specified SQL server not found.
  [TCP/IP Sockets]ConnectionOpen (Connect()).
  其實這是SQL Server SP3的一個小bug,在安裝sp3的時候,沒有監(jiān)聽tcp/ip端口,可以按照以下步驟進行:

  1、打開SQL server客戶器網(wǎng)絡(luò)實用工具和服務(wù)器網(wǎng)絡(luò)工具,確保啟用的協(xié)議中包含name pipe,并且位置在第一位.

  2、確保[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo]
  "DSQUERY"="DBNETLIB".
  如果沒有,請自己建立
  3、停止mssql.
  4、進行安裝.

  這樣就可以進行正確安裝了。

  二、SQL Server補丁版本的檢查

  SQL Server的補丁版本檢查不如Windows 補丁版本檢查直接,一個系統(tǒng)管理員,如果不了解SQL Server版本對應(yīng)的補丁號,可能也會遇到一點麻煩,因此在這說明一下,通過這樣的辦法判別機器是安全的辦法,不會對系統(tǒng)產(chǎn)生任何影響。

  1、用Isql或者SQL查詢分析器登錄到SQL Server,如果是用Isql,請在cmd窗口輸入isql -U sa,然后輸入密碼,進入;如果是用SQL查詢分析器,請從程序中啟動,輸入sa和密碼(也可以用windows驗證)。

  2、在ISQL中輸入:
  Select @@Version;
  go

  或者SQL查詢分析器中輸入(其實如果不想輸入,只要打開幫助的關(guān)于就可以了:))
  Select @@Version;
  然后按執(zhí)行;
  這時會返回SQL的版本信息,如下:
  Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 3)

  其中的8.00.760就是SQL Server的版本和補丁號。對應(yīng)關(guān)系如下:

  8.00.194 -——————SQL Server 2000 RTM
  8.00.384 -——————(SP1)
  8.00.534 -——————(SP2)
  8.00.760 -——————(SP3)

  這樣我們就能看到SQL Server的正確版本和補丁號了。

  我們也可以用xp_msver看到更詳細的信息

  Sql Server數(shù)據(jù)庫的備份和恢復(fù)措施
  最常用的操作,新手們看看……

  一、備份數(shù)據(jù)庫

  1、打開SQL企業(yè)管理器,在控制臺根目錄中依次點開Microsoft SQL Server
  2、SQL Server組-->雙擊打開你的服務(wù)器-->雙擊打開數(shù)據(jù)庫目錄
  3、選擇你的數(shù)據(jù)庫名稱(如論壇數(shù)據(jù)庫Forum)-->然后點上面菜單中的工具-->選擇備份數(shù)據(jù)庫
  4、備份選項選擇完全備份,目的中的備份到如果原來有路徑和名稱則選中名稱點刪除,然后點添加,如果原來沒有路徑和名稱則直接選擇添加,接著指定路徑和文件名,指定后點確定返回備份窗口,接著點確定進行備份

  二、還原數(shù)據(jù)庫

  1、打開SQL企業(yè)管理器,在控制臺根目錄中依次點開Microsoft SQL Server

  2、SQL Server組-->雙擊打開你的服務(wù)器-->點圖標(biāo)欄的新建數(shù)據(jù)庫圖標(biāo),新建數(shù)據(jù)庫的名字自行取

  3、點擊新建好的數(shù)據(jù)庫名稱(如論壇數(shù)據(jù)庫Forum)-->然后點上面菜單中的工具-->選擇恢復(fù)數(shù)據(jù)庫

  4、在彈出來的窗口中的還原選項中選擇從設(shè)備-->點選擇設(shè)備-->點添加-->然后選擇你的備份文件名-->添加后點確定返回,這時候設(shè)備欄應(yīng)該出現(xiàn)您剛才選擇的數(shù)據(jù)庫備份文件名,備份號默認為1(如果您對同一個文件做過多次備份,可以點擊備份號旁邊的查看內(nèi)容,在復(fù)選框中選擇最新的一次備份后點確定)-->然后點擊上方常規(guī)旁邊的選項按鈕

  5、在出現(xiàn)的窗口中選擇在現(xiàn)有數(shù)據(jù)庫上強制還原,約霸諢指賜瓿勺刺醒≡袷故菘飪梢約絳誦械薹ɑ乖淥攣袢罩鏡難∠。栽煱吭戶[屑洳課壞慕菘馕募乖飫鏌湊漳鉙QL的安裝進行設(shè)置(也可以指定自己的目錄),邏輯文件名不需要改動,移至物理文件名要根據(jù)你所恢復(fù)的機器情況做改動,如您的SQL數(shù)據(jù)庫裝在D:\Program Files\Microsoft SQL Server\MSSQL\Data,那么就按照您恢復(fù)機器的目錄進行相關(guān)改動改動,并且最后的文件名最好改成您當(dāng)前的數(shù)據(jù)庫名(如原來是bbs_data.mdf,現(xiàn)在的數(shù)據(jù)庫是forum,就改成forum_data.mdf),日志和數(shù)據(jù)文件都要按照這樣的方式做相關(guān)的改動(日志的文件名是*_log.ldf結(jié)尾的),這里的恢復(fù)目錄您可以自由設(shè)置,前提是該目錄必須存在(如您可以指定d:\sqldata\bbs_data.mdf或者d:\sqldata\bbs_log.ldf),否則恢復(fù)將報錯

  6、修改完成后,點擊下面的確定進行恢復(fù),這時會出現(xiàn)一個進度條,提示恢復(fù)的進度,恢復(fù)完成后系統(tǒng)會自動提示成功,如中間提示報錯,請記錄下相關(guān)的錯誤內(nèi)容并詢問對SQL操作比較熟悉的人員,一般的錯誤無非是目錄錯誤或者文件名重復(fù)或者文件名錯誤或者空間不夠或者數(shù)據(jù)庫正在使用中的錯誤,數(shù)據(jù)庫正在使用的錯誤您可以嘗試關(guān)閉所有關(guān)于SQL窗口然后重新打開進行恢復(fù)操作,如果還提示正在使用的錯誤可以將SQL服務(wù)停止然后重起看看,至于上述其它的錯誤一般都能按照錯誤內(nèi)容做相應(yīng)改動后即可恢復(fù)

  三、收縮數(shù)據(jù)庫

  一般情況下,SQL數(shù)據(jù)庫的收縮并不能很大程度上減小數(shù)據(jù)庫大小,其主要作用是收縮日志大小,應(yīng)當(dāng)定期進行此操作以免數(shù)據(jù)庫日志過大。

  1、設(shè)置數(shù)據(jù)庫模式為簡單模式:打開SQL企業(yè)管理器,在控制臺根目錄中依次點開Microsoft SQL Server-->SQL Server組-->雙擊打開你的服務(wù)器-->雙擊打開數(shù)據(jù)庫目錄-->選擇你的數(shù)據(jù)庫名稱(如論壇數(shù)據(jù)庫Forum)-->然后點擊右鍵選擇屬性-->選擇選項-->在故障還原的模式中選擇“簡單”,然后按確定保存
  2、在當(dāng)前數(shù)據(jù)庫上點右鍵,看所有任務(wù)中的收縮數(shù)據(jù)庫,一般里面的默認設(shè)置不用調(diào)整,直接點確定
  3、收縮數(shù)據(jù)庫完成后,建議將您的數(shù)據(jù)庫屬性重新設(shè)置為標(biāo)準(zhǔn)模式,操作方法同第一點,因為日志在一些異常情況下往往是恢復(fù)數(shù)據(jù)庫的重要依據(jù)。

  四、設(shè)定每日自動備份數(shù)據(jù)庫

  強烈建議有條件的用戶進行此操作!

  1、打開企業(yè)管理器,在控制臺根目錄中依次點開Microsoft SQL Server-->SQL Server組-->雙擊打開你的服務(wù)器

  2、然后點上面菜單中的工具-->選擇數(shù)據(jù)庫維護計劃器

  3、下一步選擇要進行自動備份的數(shù)據(jù)-->下一步更新數(shù)據(jù)優(yōu)化信息,這里一般不用做選擇-->下一步檢查數(shù)據(jù)完整性,也一般不選擇

  4、下一步指定數(shù)據(jù)庫維護計劃,默認的是1周備份一次,點擊更改選擇每天備份后點確定

  5、下一步指定備份的磁盤目錄,選擇指定目錄,如您可以在D盤新建一個目錄如:d:\databak,然后在這里選擇使用此目錄,如果您的數(shù)據(jù)庫比較多最好選擇為每個數(shù)據(jù)庫建立子目錄,然后選擇刪除早于多少天前的備份,一般設(shè)定4-7天,這看您的具體備份要求,備份文件擴展名一般都是bak就用默認的
  6、下一步指定事務(wù)日志備份計劃,看您的需要做選擇-->下一步要生成的報表,一般不做選擇-->下一步維護計劃歷史記錄,最好用默認的選項-->下一步完成

  7、完成后系統(tǒng)很可能會提示Sql Server Agent服務(wù)未啟動,先點確定完成計劃設(shè)定,然后找到桌面最右邊狀態(tài)欄中的SQL綠色圖標(biāo),雙擊點開,在服務(wù)中選擇Sql Server Agent,然后點擊運行箭頭,選上下方的當(dāng)啟動OS時自動啟動服務(wù)

  8、這個時候數(shù)據(jù)庫計劃已經(jīng)成功的運行了,他將按照您上面的設(shè)置進行自動備份

  修改計劃:

  1、打開企業(yè)管理器,在控制臺根目錄中依次點開Microsoft SQL Server-->SQL Server組-->雙擊打開你的服務(wù)器-->管理-->數(shù)據(jù)庫維護計劃-->打開后可看到你設(shè)定的計劃,可以進行修改或者刪除操作

  五、數(shù)據(jù)的轉(zhuǎn)移(新建數(shù)據(jù)庫或轉(zhuǎn)移服務(wù)器)

  一般情況下,最好使用備份和還原操作來進行轉(zhuǎn)移數(shù)據(jù),在特殊情況下,可以用導(dǎo)入導(dǎo)出的方式進行轉(zhuǎn)移,這里介紹的就是導(dǎo)入導(dǎo)出方式,導(dǎo)入導(dǎo)出方式轉(zhuǎn)移數(shù)據(jù)一個作用就是可以在收縮數(shù)據(jù)庫無效的情況下用來減。ㄊ湛s)數(shù)據(jù)庫的大小,本操作默認為您對SQL的操作有一定的了解,如果對其中的部分操作不理解,可以咨詢動網(wǎng)相關(guān)人員或者查詢網(wǎng)上資料

  1、將原數(shù)據(jù)庫的所有表、存儲過程導(dǎo)出成一個SQL文件,導(dǎo)出的時候注意在選項中選擇編寫索引腳本和編寫主鍵、外鍵、默認值和檢查約束腳本選項

  2、新建數(shù)據(jù)庫,對新建數(shù)據(jù)庫執(zhí)行第一步中所建立的SQL文件

  3、用SQL的導(dǎo)入導(dǎo)出方式,對新數(shù)據(jù)庫導(dǎo)入原數(shù)據(jù)庫中的所有表內(nèi)容


最新更新
·SQL Server 2005刪除用戶失敗
·SQL Server中刪除重復(fù)數(shù)據(jù)的
·經(jīng)典SQL語句大全
·SQL Server 2005與ASP.NET/A
·三種查看MySQL數(shù)據(jù)庫版本的方
·SQL Server 2005 Express 遠
·啟用SQL Server 2005 Expres
·Windows下如何安裝或卸載MyS
·解決MySQL5數(shù)據(jù)庫連接超時問
·清除SQL Server日志的兩種方
相關(guān)信息
·SQL Server 2005刪除用戶失敗解決方法(15138錯誤)
·SQL Server中刪除重復(fù)數(shù)據(jù)的幾個方法
·SQL Server 2005與ASP.NET/ASP連接設(shè)置
·SQL Server 2005 Express 遠程訪問設(shè)置方法
·啟用SQL Server 2005 Express的sa用戶名
·清除SQL Server日志的兩種方法
·2008主流數(shù)據(jù)庫產(chǎn)品回顧與展望
·怎樣在SQL Server中去除表中不可見字符
·SQL Server 2005整合SP3補丁的方法
·SQL Server中各種語句的完整語法
畫心
愚愛
偏愛
火苗
白狐
畫沙
犯錯
歌曲
傳奇
稻香
小酒窩
獅子座
小情歌
全是愛
棉花糖
海豚音
我相信
甩蔥歌
這叫愛
shero
走天涯
琉璃月
Nobody
我愛他
套馬桿
愛是你我
最后一次
少女時代
灰色頭像
斷橋殘雪
美了美了
狼的誘惑
我很快樂
星月神話
心痛2009
愛丫愛丫
半城煙沙
旗開得勝
郎的誘惑
愛情買賣
2010等你來
我叫小沈陽
i miss you
姑娘我愛你
我們都一樣
其實很寂寞
我愛雨夜花
變心的玫瑰
犀利哥之歌
你是我的眼
你是我的OK繃
貝多芬的悲傷
哥只是個傳說
丟了幸福的豬
找個人來愛我
要嫁就嫁灰太狼
如果這就是愛情
我們沒有在一起
寂寞在唱什么歌
斯琴高麗的傷心
別在我離開之前離開
不是因為寂寞才想你
愛上你等于愛上了錯
在心里從此永遠有個你
一個人的寂寞兩個人的錯