亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: sqlcmd 實用工具 [打印本頁]

作者: liyihongcug    時間: 2011-04-25 19:55
標題: sqlcmd 實用工具
使用 sqlcmd 實用工具,可以在命令提示符處、SQLCMD 模式下的查詢編輯器、Windows 腳本文件或 SQL Server 代理作業(yè)的操作系統(tǒng) (Cmd.exe) 作業(yè)步驟中,輸入 Transact-SQL 語句、系統(tǒng)過程和腳本文件。 此實用工具使用 OLE DB 執(zhí)行 Transact-SQL 批處理。

sqlcmd
[{ { -U login_id [ -P password ] } | –E trusted connection }]
[ -z new password ] [ -Z new password and exit]
[ -S server_name [ \ instance_name ] ] [ -H wksta_name ] [ -d db_name ]
[ -l login time_out ] [ -A dedicated admin connection ]
[ -i input_file ] [ -o output_file ]
[ -f < codepage > | i: < codepage > [ < , o: < codepage > ] ]
[ -u unicode output ] [ -r [ 0 | 1 ] msgs to stderr ]
[ -R use client regional settings ]
[ -q "cmdline query" ] [ -Q "cmdline query" and exit ]
[ -e echo input ] [ -t query time_out ]
[ -I enable Quoted Identifiers ]
[ -v var = "value"...] [ -x disable variable substitution ]
[ -h headers ][ -s col_separator ] [ -w column_width ]
[ -W remove trailing spaces ]
[ -k [ 1 | 2 ] remove[replace] control characters ]
[ -y display_width ] [-Y display_width ]
[ -b on error batch abort ] [ -V severitylevel ] [ -m error_level ]
[ -a packet_size ][ -c cmd_end ]
[ -L [ c ] list servers[clean output] ]
[ -p [ 1 ] print statistics[colon format] ]
[ -X [ 1 ] ] disable commands, startup script, enviroment variables [and exit]
[ -? show syntax summary ]

簡例:
sqlcmd -U sa -P 1234567 -S 192.168.1.1
作者: liyihongcug    時間: 2011-04-25 20:58
-SQL語句參考手冊2010-12-03 22:30一、基礎(chǔ)1、說明:創(chuàng)建數(shù)據(jù)庫CREATE DATABASE database-name 2、說明:刪除數(shù)據(jù)庫drop database dbname3、說明:備份sql server--- 創(chuàng)建 備份數(shù)據(jù)的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'--- 開始 備份BACKUP DATABASE pubs TO testBack 4、說明:創(chuàng)建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)根據(jù)已有的表創(chuàng)建新表: A:create table tab_new like tab_old (使用舊表創(chuàng)建新表)B:create table tab_new as select col1,col2… from tab_old definition only5、說明:刪除新表drop table tabname 6、說明:增加一個列Alter table tabname add column col type注:列增加后將不能刪除。DB2中列加上后數(shù)據(jù)類型也不能改變,唯一能改變的是增加varchar類型的長度。7、說明:添加主鍵: Alter table tabname add primary key(col) 說明:刪除主鍵: Alter table tabname drop primary key(col) 8、說明:創(chuàng)建索引:create [unique] index idxname on tabname(col….) 刪除索引:drop index idxname注:索引是不可更改的,想更改必須刪除重新建。9、說明:創(chuàng)建視圖:create view viewname as select statement 刪除視圖:drop view viewname10、說明:幾個簡單的基本的sql語句選擇:select * from table1 where 范圍插入:insert into table1(field1,field2) values(value1,value2)刪除:delete from table1 where 范圍更新:update table1 set field1=value1 where 范圍查找:select * from table1 where field1 like ’%value1%’ ---like的語法很精妙,查資料!排序:select * from table1 order by field1,field2 [desc]總數(shù):select count as totalcount from table1求和:select sum(field1) as sumvalue from table1平均:select avg(field1) as avgvalue from table1最大:select max(field1) as maxvalue from table1最小:select min(field1) as minvalue from table111、說明:幾個高級查詢運算詞A: UNION 運算符 UNION 運算符通過組合其他兩個結(jié)果表(例如 TABLE1 和 TABLE2)并消去表中任何重復行而派生出一個結(jié)果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。 B: EXCEPT 運算符 EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復行而派生出一個結(jié)果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。 C: INTERSECT 運算符INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復行而派生出一個結(jié)果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。 注:使用運算詞的幾個查詢結(jié)果行必須是一致的。 12、說明:使用外連接 A、left (outer) join: 左外連接(左連接):結(jié)果集幾包括連接表的匹配行,也包括左連接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.cB:right (outer) join: 右外連接(右連接):結(jié)果集既包括連接表的匹配連接行,也包括右連接表的所有行。 C:full/cross (outer) join: 全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。12、分組:Group by:一張表,一旦分組 完成后,查詢后只能得到組相關(guān)的信息。組相關(guān)的信息:(統(tǒng)計信息) count,sum,max,min,avg 分組的標準)   在SQLServer中分組時:不能以text,ntext,image類型的字段作為分組依據(jù)在selecte統(tǒng)計函數(shù)中的字段,不能和普通的字段放在一起;13、對數(shù)據(jù)庫進行操作:分離數(shù)據(jù)庫: sp_detach_db; 附加數(shù)據(jù)庫:sp_attach_db 后接表明,附加需要完整的路徑名14.如何修改數(shù)據(jù)庫的名稱:sp_renamedb 'old_name', 'new_name'
二、提升1、說明:復制表(只復制結(jié)構(gòu),源表名:a 新表名:b) (Access可用)法一:select * into b from a where 1<>1(僅用于SQlServer)法二:select top 0 * into b from a2、說明:拷貝表(拷貝數(shù)據(jù),源表名:a 目標表名:b) (Access可用)insert into b(a, b, c) select d,e,f from b;3、說明:跨數(shù)據(jù)庫之間表的拷貝(具體數(shù)據(jù)使用絕對路徑) (Access可用)insert into b(a, b, c) select d,e,f from b in ‘具體數(shù)據(jù)庫’ where 條件例子:..from b in '"&Server.MapPath("."&"\data.mdb" &"' where..4、說明:子查詢(表名1:a 表名2:b)select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)5、說明:顯示文章、提交人和最后回復時間select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b6、說明:外連接查詢(表名1:a 表名2:b)select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c7、說明:在線視圖查詢(表名1:a )select * from (SELECT a,b,c FROM a) T where t.a > 1;8、說明:between的用法,between限制查詢數(shù)據(jù)范圍時包括了邊界值,not between不包括select * from table1 where time between time1 and time2select a,b,c, from table1 where a not between 數(shù)值1 and 數(shù)值29、說明:in 的使用方法select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)10、說明:兩張關(guān)聯(lián)表,刪除主表中已經(jīng)在副表中沒有的信息 delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )11、說明:四表聯(lián)查問題:select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....12、說明:日程安排提前五分鐘提醒 SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>513、說明:一條sql 語句搞定數(shù)據(jù)庫分頁select top 10 b.* from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主鍵字段 = a.主鍵字段 order by a.排序字段具體實現(xiàn):關(guān)于數(shù)據(jù)庫分頁:   declare @start int,@end int    @sql nvarchar(600)   set @sql=’select top’+str(@end-@start+1)+’+from T where rid not in(select top’+str(@str-1)+’Rid from T where Rid>-1)’   exec sp_executesql @sql
注意:在top后不能直接跟一個變量,所以在實際應(yīng)用中只有這樣的進行特殊的處理。Rid為一個標識列,如果top后還有具體的字段,這樣做是非常有好處的。因為這樣可以避免 top的字段如果是邏輯索引的,查詢的結(jié)果后實際表中的不一致(邏輯索引中的數(shù)據(jù)有可能和數(shù)據(jù)表中的不一致,而查詢時如果處在索引則首先查詢索引)14、說明:前10條記錄select top 10 * form table1 where 范圍15、說明:選擇在每一組b值相同的數(shù)據(jù)中對應(yīng)的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產(chǎn)品分析,按科目成績排名,等等.)select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復行而派生出一個結(jié)果表(select a from tableA ) except (select a from tableB) except (select a from tableC)17、說明:隨機取出10條數(shù)據(jù)select top 10 * from tablename order by newid()18、說明:隨機選擇記錄select newid()19、說明:刪除重復記錄1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)2),select distinct * into temp from tablename   delete from tablename   insert into tablename select * from temp評價: 這種操作牽連大量的數(shù)據(jù)的移動,這種做法不適合大容量但數(shù)據(jù)操作3),例如:在一個外部表中導入數(shù)據(jù),由于某些原因第一次只導入了一部分,但很難判斷具體位置,這樣只有在下一次全部導入,這樣也就產(chǎn)生好多重復的字段,怎樣刪除重復字段alter table tablename--添加一個自增列add column_b int identity(1,1)delete from tablename where column_b not in(select max(column_b) from tablename group by column1,column2,...)alter table tablename drop column column_b20、說明:列出數(shù)據(jù)庫里所有的表名select name from sysobjects where type='U' // U代表用戶21、說明:列出表里的所有的列名select name from syscolumns where id=object_id('TableName')22、說明:列示type、vender、pcs字段,以type字段排列,case可以方便地實現(xiàn)多重選擇,類似select 中的case。select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type顯示結(jié)果:type vender pcs電腦 A 1電腦 A 1光盤 B 2光盤 A 2手機 B 3手機 C 323、說明:初始化表table1TRUNCATE TABLE table124、說明:選擇從10到15的記錄select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc三、技巧1、1=1,1=2的使用,在SQL語句組合時用的較多“where 1=1” 是表示選擇全部 “where 1=2”全部不選,如:if @strWhere !='' beginset @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere endelse beginset @strSQL = 'select count(*) as Total from [' + @tblName + ']' end 我們可以直接寫成錯誤!未找到目錄項。set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere 2、收縮數(shù)據(jù)庫--重建索引DBCC REINDEXDBCC INDEXDEFRAG--收縮數(shù)據(jù)和日志DBCC SHRINKDBDBCC SHRINKFILE3、壓縮數(shù)據(jù)庫dbcc shrinkdatabase(dbname)4、轉(zhuǎn)移數(shù)據(jù)庫給新用戶以已存在用戶權(quán)限exec sp_change_users_login 'update_one','newname','oldname'go5、檢查備份集RESTORE VERIFYONLY from disk='E:\dvbbs.bak'6、修復數(shù)據(jù)庫ALTER DATABASE [dvbbs] SET SINGLE_USERGODBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCKGOALTER DATABASE [dvbbs] SET MULTI_USERGO7、日志清除SET NOCOUNT ONDECLARE @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 / initializeDECLARE @OriginalSize intSELECT @OriginalSize = size FROM sysfilesWHERE name = @LogicalFileNameSELECT 'Original Size of ' + db_name() + ' LOG is ' + CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'FROM sysfilesWHERE name = @LogicalFileNameCREATE 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 expiredAND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) AND (@OriginalSize * 8 /1024) > @NewSize BEGIN -- Outer loop.SELECT @Counter = 0WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))BEGIN -- updateINSERT DummyTrans VALUES ('Fill Log') DELETE DummyTransSELECT @Counter = @Counter + 1ENDEXEC (@TruncLog) ENDSELECT '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 = @LogicalFileNameDROP TABLE DummyTransSET NOCOUNT OFF 8、說明:更改某個表exec sp_changeobjectowner 'tablename','dbo'9、存儲更改全部表CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch@OldOwner as NVARCHAR(12,@NewOwner as NVARCHAR(12ASDECLARE @Name as NVARCHAR(12DECLARE @Owner as NVARCHAR(12DECLARE @OwnerName as NVARCHAR(12DECLARE curObject CURSOR FOR select 'Name' = name,   'Owner' = user_name(uid)from sysobjectswhere user_name(uid)=@OldOwnerorder by nameOPEN curObjectFETCH NEXT FROM curObject INTO @Name, @OwnerWHILE(@@FETCH_STATUS=0)BEGIN   if @Owner=@OldOwner begin   set @OwnerName = @OldOwner + '.' + rtrim(@Name)   exec sp_changeobjectowner @OwnerName, @NewOwnerend-- select @name,@NewOwner,@OldOwnerFETCH NEXT FROM curObject INTO @Name, @OwnerENDclose curObjectdeallocate curObjectGO
10、SQL SERVER中直接循環(huán)寫入數(shù)據(jù)declare @i intset @i=1while @i<30begin   insert into test (userid) values(@i)   set @i=@i+1end案例:有如下表,要求就裱中所有沒有及格的成績,在每次增長0.1的基礎(chǔ)上,使他們剛好及格:Name scoreZhangshan80Lishi 59Wangwu 50Songquan69while((select min(score) from tb_table)<60)beginupdate tb_table set score =score*1.01 where score<60if (select min(score) from tb_table)>60   breakelse   continueend
數(shù)據(jù)開發(fā)-經(jīng)典
1.按姓氏筆畫排序:Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //從少到多2.數(shù)據(jù)庫加密:select encrypt('原始密碼')select pwdencrypt('原始密碼')select pwdcompare('原始密碼','加密后密碼') = 1--相同;否則不相同 encrypt('原始密碼')select pwdencrypt('原始密碼')select pwdcompare('原始密碼','加密后密碼') = 1--相同;否則不相同3.取回表中字段:declare @list varchar(1000),@sql nvarchar(1000) select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'set @sql='select '+right(@list,len(@list)-1)+' from 表A' exec (@sql)4.查看硬盤分區(qū):EXEC master..xp_fixeddrives5.比較A,B表是否相等:if (select checksum_agg(binary_checksum(*)) from A)   =   (select checksum_agg(binary_checksum(*)) from B)print '相等'elseprint '不相等'6.殺掉所有的事件探察器進程ECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROM master.dbo.sysprocessesWHERE program_name IN('SQL profiler',N'SQL 事件探查器')EXEC sp_msforeach_worker '?'7.記錄搜索:開頭到N條記錄Select Top N * From 表-------------------------------N到M條記錄(要有主索引ID)Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc----------------------------------N到結(jié)尾記錄Select Top N * From 表 Order by ID Desc案例例如1:一張表有一萬多條記錄,表的第一個字段 RecID 是自增長字段, 寫一個SQL語句, 找出表的第31到第40個記錄。select top 10 recid from A where recid not in(select top 30 recid from A)分析:如果這樣寫會產(chǎn)生某些問題,如果recid在表中存在邏輯索引。select top 10 recid from A where……是從索引中查找,而后面的select top 30 recid from A則在數(shù)據(jù)表中查找,這樣由于索引中的順序有可能和數(shù)據(jù)表中的不一致,這樣就導致查詢到的不是本來的欲得到的數(shù)據(jù)。解決方案1,用order by select top 30 recid from A order by ricid 如果該字段不是自增長,就會出現(xiàn)問題2,在那個子查詢中也加條件:select top 30 recid from A where recid>-1例2:查詢表中的最后以條記錄,并不知道這個表共有多少數(shù)據(jù),以及表結(jié)構(gòu)。set @s = 'select top 1 * from T where pid not in (select top ' + str(@count-1) + ' pid from T)'print @s exec sp_executesql @s9:獲取當前數(shù)據(jù)庫中的所有用戶表select Name from sysobjects where xtype='u' and status>=010:獲取某一個表的所有字段select name from syscolumns where id=object_id('表名')select name from syscolumns where id in (select id from sysobjects where type = 'u' and name = '表名')兩種方式的效果相同11:查看與某一個表相關(guān)的視圖、存儲過程、函數(shù)select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'12:查看當前數(shù)據(jù)庫中所有存儲過程select name as 存儲過程名稱 from sysobjects where xtype='P'13:查詢用戶創(chuàng)建的所有數(shù)據(jù)庫select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')或者select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x0114:查詢某一個表的字段和數(shù)據(jù)類型select column_name,data_type from information_schema.columnswhere table_name = '表名' 15:不同服務(wù)器數(shù)據(jù)庫之間的數(shù)據(jù)操作--創(chuàng)建鏈接服務(wù)器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '遠程服務(wù)器名或ip地址 ' exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用戶名 ', '密碼 ' --查詢示例 select * from ITSV.數(shù)據(jù)庫名.dbo.表名 --導入示例 select * into 表 from ITSV.數(shù)據(jù)庫名.dbo.表名 --以后不再使用時刪除鏈接服務(wù)器 exec sp_dropserver 'ITSV ', 'droplogins '
--連接遠程/局域網(wǎng)數(shù)據(jù)(openrowset/openquery/opendatasource) --1、openrowset --查詢示例 select * from openrowset( 'SQLOLEDB ', 'sql服務(wù)器名 '; '用戶名 '; '密碼 ',數(shù)據(jù)庫名.dbo.表名) --生成本地表 select * into 表 from openrowset( 'SQLOLEDB ', 'sql服務(wù)器名 '; '用戶名 '; '密碼 ',數(shù)據(jù)庫名.dbo.表名)
作者: liyihongcug    時間: 2011-05-04 13:35
請按步驟進行,未進行前面的步驟時,請不要做后面的步驟,以免損壞你的數(shù)據(jù)庫.

  一般不建議做第4,6兩步,第4步不安全,有可能損壞數(shù)據(jù)庫或丟失數(shù)據(jù)。第6步如果日志達到上限,則以后的數(shù)據(jù)庫處理會失敗,在清理日志后才能恢復。

  1.清空日志
DUMP  TRANSACTION  庫名  WITH NO_LOG

  2.截斷事務(wù)日志
  BACKUP LOG 數(shù)據(jù)庫名 WITH NO_LOG

  3.收縮數(shù)據(jù)庫文件(如果不壓縮,數(shù)據(jù)庫的文件不會減小

  企業(yè)管理器--右鍵你要壓縮的數(shù)據(jù)庫--所有任務(wù)--收縮數(shù)據(jù)庫--收縮文件

  ·選擇日志文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數(shù),直接輸入這個數(shù),確定就可以了

  ·選擇數(shù)據(jù)文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數(shù),直接輸入這個數(shù),確定就可以了,也可以用SQL語句來完成

  ·收縮數(shù)據(jù)庫
  DBCC SHRINKDATABASE(客戶資料)

  ·收縮指定數(shù)據(jù)文件,1是文件號,可以通過這個語句查詢到:
select * from sysfiles
DBCC SHRINKFILE(1)
4.為了最大化的縮小日志文件(如果是sql 7.0,這步只能在查詢分析器中進行)

  ·分離數(shù)據(jù)庫:

  企業(yè)管理器--服務(wù)器--數(shù)據(jù)庫--右鍵--分離數(shù)據(jù)庫

  ·在我的電腦中刪除LOG文件

  ·附加數(shù)據(jù)庫:

  企業(yè)管理器--服務(wù)器--數(shù)據(jù)庫--右鍵--附加數(shù)據(jù)庫

  此法將生成新的LOG,大小只有500多K

  或用代碼:

  下面的示例分離 pubs,然后將 pubs 中的一個文件附加到當前服務(wù)器。

·分離
  EXEC sp_detach_db @dbname = 'pubs'

  ·刪除日志文件

  ·再附加
EXEC sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:\Program Files\Microsoft
SQL Server\MSSQL\Data\pubs.mdf'

  5.為了以后能自動收縮,做如下設(shè)置

  企業(yè)管理器--服務(wù)器--右鍵數(shù)據(jù)庫--屬性--選項--選擇"自動收縮"

  SQL語句設(shè)置方式:
EXEC sp_dboption '數(shù)據(jù)庫名',
'autoshrink', 'TRUE'

  6.如果想以后不讓它日志增長得太大

  企業(yè)管理器--服務(wù)器--右鍵數(shù)據(jù)庫--屬性--事務(wù)日志

  將文件增長限制為xM(x是你允許的最大數(shù)據(jù)文件大小)

  SQL語句的設(shè)置方式:
alter database 數(shù)據(jù)庫名 modify file(name=邏輯文件名,maxsize=20)


個人的驗證:

--收縮數(shù)據(jù)庫日志,在這之前需要有完整的數(shù)據(jù)庫備份

BACKUP LOG chinatown2 With no_log


DBCC SHRINKFILE (chinatown_log, 20480)

上面這兩步可以
作者: liyihongcug    時間: 2011-05-04 13:39
在學習查詢調(diào)優(yōu)知識時,有必要對數(shù)據(jù)頁和不同類型的索引頁加以理解.這有助于對基本概念的更好理解以及日后更好地性能調(diào)優(yōu).這里采用"一步一步"的教程與初學者分享我的知識.

建議SQL Server DBA花一些時間學習不同類型頁的結(jié)構(gòu),這有助于DBA在運行DBCC CHECKDB而得到的警告信息可以更好的做出判斷或提供更好的調(diào)優(yōu)方案等等。

在寫本文時,不可避免地要參考一些未歸檔的命令,強烈建議初學者在本地或開發(fā)環(huán)境進行腳本的測試。對于不熟悉SQL Server 2005/2008系統(tǒng)視圖中的系統(tǒng)表的初學者,可以參考“Mapping SQL Server 2000 System Tables to SQL Server 2005 System Views”。掌握這些系統(tǒng)視圖使你的日常工作變得容易。

本篇內(nèi)容適用于了解SQL Server存儲內(nèi)幕的初學者,長話短說,下面我們進入示例。

首先我們需要創(chuàng)建一個數(shù)據(jù)庫,這里取名為LearningInternals,腳本如下:

CREATEDATABASELearningInternals
GO
USELearningInternalsGO

知識點:數(shù)據(jù)文件和日志文件

一個數(shù)據(jù)庫有3種文件類型:

1. 主數(shù)據(jù)文件(擴展名為.MDF)-每個數(shù)據(jù)庫有一個主數(shù)據(jù)文件,如果沒有輔助數(shù)據(jù)文件時,所有用戶表均存儲在PRIMARY文件組

2. 輔助數(shù)據(jù)文件(擴展名為.NDF)-每個數(shù)據(jù)庫可以有0個或多個輔助數(shù)據(jù)文件,這有助于提高性能和有效管理表。

3. 事務(wù)日志文件(擴展名為.LDF)-默認數(shù)據(jù)庫有一個日志文件,用于記錄表的記錄修改歷史,有助于數(shù)據(jù)的備份和災難恢復

下面的命令是查詢并列出當前數(shù)據(jù)庫所有的文件組信息(包括主文件、輔助文件信息)

select*fromsys.filegroups
go

以下查詢將列出與其相關(guān)的所有文件的信息:

selectdatabase_id, file_id, type, type_desc, name, physical_name, state_desc,size, is_read_only, backup_lsn, differential_base_guidfromsys.master_fileswhereDB_NAME(database_id) ='LearningInternals'
go

提示:

   建議將數(shù)據(jù)文件和日志文件存儲在不同的驅(qū)動器上,這有助于提高性能,此外不要把TEMPDB數(shù)據(jù)庫與用戶數(shù)據(jù)庫存儲在同一磁盤。



在繼續(xù)學習之前,需要了解一些關(guān)鍵知識點:

頁面(Page)----SQL Server中數(shù)據(jù)存儲的基礎(chǔ)單位,數(shù)據(jù)庫創(chuàng)建后,主文件和輔助文件中的數(shù)據(jù)空間邏輯上被劃分為8K的數(shù)據(jù)頁。頁號引用數(shù)據(jù)文件號,例如:主文件組的第1頁命名為1:0(這里的1表示文件組,0表示頁號)。

盤區(qū)(Extent)----盤區(qū)由8個數(shù)據(jù)頁組成(每頁8K,即64KB),可以存儲1到8個表。

    有2種類型的盤區(qū):

     1)統(tǒng)一盤區(qū)(Uniform),所有8個數(shù)據(jù)頁分配給一個對象,如表或索引;

     2)混合盤區(qū)(Mixed),可以存儲表和索引

當創(chuàng)建表,然后插入一行數(shù)據(jù)時,表就從混合盤區(qū)中獲取一個頁面,隨著表中記錄的增加,表由混合盤區(qū)移入統(tǒng)一盤區(qū),這樣做有助于空間得到有效的管理。

為方便起見,邏輯上我們把頁劃分為如下:

1. 系統(tǒng)頁-存儲引擎用于管理用戶數(shù)據(jù)

2. 數(shù)據(jù)頁或索引頁-用戶創(chuàng)建的表或索引

系統(tǒng)表:


序號        頁面        描述
1        Header頁        存儲數(shù)據(jù)文件的詳細信息,如大小、類型等等
2        GAM        Global Allocation Map,GAM是數(shù)據(jù)文件的第3頁(即1:2),一個GAM可以容納4GB的數(shù)據(jù)空間,超過4GB,則會產(chǎn)生另一個GAM
3        SGAM        Shared Global Allocation Map.SGAM是數(shù)據(jù)文件的第4頁(即1:3),一個SGAM可以容納4GB的數(shù)據(jù)空間,超過4GB,則會產(chǎn)生另一個SGAM。
4        IAM        Index Allocation Map,IAM頁可以找出與某表關(guān)聯(lián)的頁面(對某表來說,如果是分區(qū)表或表中存儲了overflow頁(LOB數(shù)據(jù)等)則可能有多個IAM
5        PFS        Page Free Space.PFS表示每個頁面上可用的空間,每頁面代表一個字節(jié),對于8000個頁面,僅只有一個PFS。
6        DCM        Differential Change Map.
7        BCM        Bulk change Map.

數(shù)據(jù)頁和索引頁
序號        頁面        描述
1        數(shù)據(jù)頁        容納記錄行,當執(zhí)行INSERT語句時,PFS找出保存該記錄的正確頁
2        行溢出頁        自SQL2005以來,可以使用4個長度為5000的varchar字段,也就是說不受每行最大8000個字節(jié)的限制,允許行溢出頁,該頁僅用于記錄大小超過8000字節(jié)
3        大對象LOB        LOB數(shù)據(jù),如text,varchar(max)頁面,這些頁面則會與數(shù)據(jù)頁或索引頁分開存儲



數(shù)據(jù)庫創(chuàng)建時,數(shù)據(jù)文件大致包含如下的頁面結(jié)構(gòu):
Page        Header        PFS        GAM        SGAM        Unused        Unused        DCM        BCM        …        Data        Data        Data        Data        Data        Data        Data
Page
No.       

1:0
        1:1        1:2        1:3        1:4        1:5        1:6        1:7        …        1:15001        1:15002        1:15003        1:15004        1:15005        1:15006        1:15007



下面的查詢列出所有表與其表對應(yīng)的頁面信息:

selectso.name, so.object_id, sp.index_id, sp.partition_id, sp.hobt_id, sa.container_id, internals.total_pages, internals.used_pages, internals.data_pages, first_page, root_page, first_iam_pagefromsys.objects soinnerjoinonso.object_id = sp.object_idinnerjoinsys.allocation_units saonsa.container_id = sp.hobt_idinnerjoinsys.system_internals_allocation_units internalsoninternals.container_id = sa.container_idwhereso.namenotlike'sys%'

小結(jié):

   當數(shù)據(jù)庫創(chuàng)建時,默認會有一個主數(shù)據(jù)文件和一個日志文件。數(shù)據(jù)文件邏輯上分成數(shù)百個8K的頁面,一些與系統(tǒng)相關(guān)的頁面,如GAM,SGAM,IAM和PFS用于管理數(shù)據(jù)頁。

PS:以上源自http://www.sqlservercentral.com/ ... -part-1-basics.aspx,如有翻譯不當,請指正!
作者: liyihongcug    時間: 2011-05-04 13:47
如何修改sql server 2005數(shù)據(jù)庫系統(tǒng)日志保存路徑

把sql server 2005裝在了C盤,怎么把數(shù)據(jù)庫的系統(tǒng)日志文件保存到其他盤。
問題補充  2009-09-25 15:25

是“數(shù)據(jù)庫系統(tǒng)日志”,也就是事務(wù)日志。
問題補充  2009-09-27 09:27

step 1: 日志模式設(shè)為簡單,并將自動輸增長改為每次增長 200M左右。

step 2:重啟sql 服務(wù)可以恢復tempdb原始大小

step 3:移動tempdb到d:\

use tempdb;
go
alter database tempdb
modify file (name = tempdev,filename='E:\sqldata\tempdbmodified.mdf');
go
alter database tempdb
modify file (name = templog,filename='E:\sqldata\templogmodified.ldf');
go

step 4:別外看來你的系統(tǒng)臨時數(shù)據(jù)生成的比較大,可以增加多個數(shù)據(jù)文件,可以放在不同的Raid盤上,并且的一定將空間預先手動擴到需要的大小。

step 5:數(shù)據(jù)庫安裝很忌諱將系統(tǒng)數(shù)據(jù)庫安裝在跟操作系統(tǒng)一個物理盤下,看來你的master等數(shù)據(jù)庫也在C盤下。
我原來的sqlserver2000的日志文件(transaction logs)路徑設(shè)成了和data files同樣的盤符中,我現(xiàn)在想修改到其他盤符去,請問如何修改?
我原來的sqlserver2000的日志文件(transaction logs)路徑設(shè)成了和data files同樣的盤符中,我現(xiàn)在想修改到其他盤符去,請問如何修改?
=========================================================


1、所有用戶退出系統(tǒng),關(guān)閉數(shù)據(jù)庫,重新啟動數(shù)據(jù)庫
2、detattc h 數(shù)據(jù)庫
3、attach 數(shù)據(jù)庫,但不包括日志
4、在新目錄下建立數(shù)據(jù)庫日志
alter database的filename只能修改tempdb數(shù)據(jù)庫文件的物理路徑,而且還要重起后才能生效~
用樓上的方法,妙!~

    最初由 ub40 發(fā)布
    [B]我原來的sqlserver2000的日志文件(transaction logs)路徑設(shè)成了和data files同樣的盤符中,我現(xiàn)在想修改到其他盤符去,請問如何修改? [/B]

問一句,好像采用sp_attach_single_file_db的話,前提是只有一個數(shù)據(jù)庫文件,沒有而且同樣目錄下,要先把日志文件刪除。
但是attach以后,系統(tǒng)會自動創(chuàng)建一個日志文件?
這樣,至少會有一個日志文件和數(shù)據(jù)文件在同一個目錄。
sp_attach_single_file_db 不是只對一個數(shù)據(jù)文件的數(shù)據(jù)庫,這個命令相對的是.mdf的數(shù)據(jù)文件,由主數(shù)據(jù)文件來識別其他的數(shù)據(jù)文件,對于只有一個日志文件的數(shù)據(jù)庫,如果在detach的過程中日志丟失,用 sp_attach_single_file_db系統(tǒng)會自動給s數(shù)據(jù)庫增加一個日志文件,如果數(shù)據(jù)本身是多個日志文件,則方法不同
因此,我認為,考慮為了提供系統(tǒng)性能。將日志文件移動到一個新的硬盤上,最簡單的方法應(yīng)該是:采用備份和恢復。
1 全備份數(shù)據(jù)庫
2 恢復,在選項里面可以修改日志文件的路徑,而且,你可以修改數(shù)據(jù)文件的路徑,無論你有多少個文件。
2樓的方法不行呀,我用的attachDB語句:
exec sp_attach_single_file_db @dbname = 'Siemens',
   @physname = 'e:\sqlserver\MSSQL\Data\Siemens.MDF'

但出現(xiàn)如下錯誤:
Server: Msg 1813, Level 16, State 2, Line 1
Could not open new database 'Siemens'. CREATE DATABASE is aborted.
Device activation error. The physical file name 'e:\sqlserver\MSSQL\data\Siemens_Log.LDF' may be incorrect.
attach_db需要日志文件的。沒有日志文件是不行的。
而且,即使使用sp_attach_single_file_db,也還會在相同的目錄下,自動創(chuàng)建一個日志文件。

[B]移動日志文件的最好方法是備份和恢復。attach不是用來解決這類問題的。[/B]
不好意思,方法有一些問題,

先讓所有用戶退出,分離數(shù)據(jù)庫
1、exec sp_detach_db @dbname = 'database1'

然后,在操作系統(tǒng)級別將log 拷貝到新目錄下。再執(zhí)行
2、EXEC sp_attach_db @dbname = 'database1',
        @filename1 = 'd:\data1_Data.mdf',
        @filename2 = 'd:\log\data1_log.ldf'
其中 @filename2就是你拷貝的日志文件

已經(jīng)經(jīng)過測試 ,沒有問題

整個操作不到3分鐘,應(yīng)該是最快的把
1.。樱裕希小。樱眩獭。樱牛遥郑牛摇。樱牛遥郑桑茫
2.。停希郑拧。疲桑蹋牛
3.。遥牛粒裕裕粒茫取。裕龋牛
那移動mdf ndf也用同樣步驟么?
自己建立一個小庫試驗一下把
可以通過該系統(tǒng)表,然后net  stop  mssqlserver ;move物理文件實現(xiàn);最后net start mssqlserver
BACKUP DATABASE dbname TO disk = 'd:\dbname.bak'

RESTORE DATABASE dbname FROM disk = 'd:\dbname.bak'
        with move 'dbname_DAT' to 'e:\??????????.mdf',
                move 'dbname_LOG' to 'f:\????????.ldf'
作者: liyihongcug    時間: 2011-08-24 21:38
EXECUTE master..xp_cmdshell 'copy d:\備份\progbak.bat'
http://hi.baidu.com/ligq/blog/item/931a31fac083078f9e514615.html
  很多情況下,需要給客戶更新數(shù)據(jù)庫,不值得跑一趟,客戶自己也不懂得如何操作,遠程操作網(wǎng)速還跟不上...這時可以把要更新的sql語句保存成文件,寫一個批處理在命令行狀態(tài)下調(diào)用查詢分析器來執(zhí)行這個sql文件里的語句。

  下面就是sqlserver幫助里對于查詢分析器(isqlw)命令行參數(shù)的解釋:

isqlw 實用工具(SQL 查詢分析器)使您得以輸入 Transact-SQL 語句、系統(tǒng)存儲過程和腳本文件。通過設(shè)置快捷方式或創(chuàng)建批處理文件,可以啟動預配置的 SQL 查詢分析器。
語法

isqlw
    [-?] |
     [
         [-S server_name[\instance_name]]
         [-d database]
         [-E] [-U user] [-P password]
         [{-i input_file} {-o output_file} [-F {U|A|O}]]
         [-f file_list]
         [-C configuration_file]
         [-D scripts_directory]
         [-T template_directory]
     ]
參數(shù)

-?

顯示用法信息。

-S server_name[\instance_name]:

指定要連接到的 Microsoft® SQL Server™ 2000 實例。指定用于連接到該服務(wù)器上的 SQL Server 2000 默認實例的 server_name。指定用于連接到該服務(wù)器上的 SQL Server 2000 命名實例的 server_name\instance_name。如果未指定服務(wù)器,isqlw 將連接到本地計算機上的 SQL Server 默認實例。從網(wǎng)絡(luò)上的遠程計算機執(zhí)行 isqlw 時,此選項是必需的。

-d database

當啟動 isqlw 時,發(fā)出一個 USE database 語句。默認值為用戶的默認數(shù)據(jù)庫。

-E

使用信任連接而不請求密碼。

-U user

用戶登錄 ID。登錄 ID 區(qū)分大小寫。

-P password

是登錄密碼。默認設(shè)置為 NULL。

-i input_file

標識包含一批 SQL 語句或存儲過程的文件。必須同時指定 -i 和 -o 選項。如果指定 -i 和 -o 選項,將執(zhí)行輸入文件中的查詢,并將結(jié)果保存到輸出文件中。在查詢執(zhí)行過程中不顯示用戶接口。當執(zhí)行完成后,進程退出。

-o output_file

標識接收來自 isqlw 的輸出的文件。必須同時指定 –i 和 –o 選項。如果指定 -i 和 -o 選項,將執(zhí)行輸入文件中的查詢,并將結(jié)果保存到輸出文件中。在查詢執(zhí)行過程中不顯示用戶接口。當執(zhí)行完成后,進程退出。如果未使用 -F 指定文件格式,則輸出文件使用與輸入文件相同的類型。

-F {U|A|O}

是輸入文件和輸出文件的格式。值包括 Unicode、ANSI 和 OEM。如果未指定 -F,則使用自動模式(如果文件標為 Unicode 格式,則以 Unicode 格式打開;否則,以 ANSI 格式打開文件)。

-f file_list

將列出的文件裝載到 SQL 查詢分析器中。使用 -f 選項,可以裝載一個或多個文件(文件名以單個空格分開)。如果指定了多個文件,則以相同的連接上下文將這些文件打開。文件名可以包含該文件所駐留的目錄路徑。可以使用通配符,如 C:\Test\*.sql 中的星號 (*)。

-C configuration_file

使用配置文件中指定的設(shè)置。其它在命令提示下顯式指定的參數(shù)將重寫相應(yīng)配置文件中的設(shè)置。

-D scripts_directory

重寫在注冊表中或在用 –C 指定的配置文件中指定的默認存儲腳本目錄。該值不保留在注冊表或配置文件中。若要在 SQL 查詢分析器中查看該選項的當前值,請單擊"工具"菜單,然后單擊"選項"命令。

-T template_directory

重寫在注冊表中或在用 –C 指定的配置文件中指定的默認模板目錄。該值不保留在注冊表或配置文件中。若要在 SQL 查詢分析器中查看該選項的當前值,請單擊"工具"菜單,然后單擊"選項"命令。

注釋

有用戶界面或沒有用戶界面時都可使用 isqlw 實用工具。若要在沒有用戶界面的情況下運行 isqlw,請指定有效登錄信息(具有信任連接或有效登錄 ID 及密碼的 SQL Server 2000 實例)和輸入及輸出文件。isqlw 將執(zhí)行輸入文件的內(nèi)容,并將結(jié)果保存到輸出文件中。

如果沒有指定輸入和輸出文件,isqlw 將交互運行并啟動 SQL 查詢分析器。如果指定了有效登錄信息,isqlw 將直接連接 SQL Server 2000 實例。如果指定的連接信息不充足,將出現(xiàn)"連接到 SQL Server"對話框。

isqlw 和 SQL 查詢分析器使用 ODBC API。該實用工具使用 SQL-92 的 Microsoft® SQL Server ODBC 驅(qū)動程序默認設(shè)置。
示例
A. 執(zhí)行 SQL 語句

本例使用 Windows 身份驗證連接到 MyServer 上的 pubs 數(shù)據(jù)庫,并執(zhí)行 Input.sql 文件。結(jié)果保存在 Output.txt 文件中。這些文件以 Unicode 文件方式打開。

isqlw -S MyServer -d pubs -E -i input.sql -o output.txt -FU



B. 使用通配符

本例將兩個文件裝載到 SQL 查詢分析器中。將使用 Windows 身份驗證連接到本地服務(wù)器。

isqlw -d pubs -E -f "c:\Program Files\Microsoft SQL Server\MSSQL\Install\instpubs.sql" "c:\Program Files\Microsoft SQL Server\MSSQL\Install\instcat.sql"



C. 裝載多個文件

本例將所有 .sql 文件裝載到 SQL 查詢分析器中。所有連接均使用 Windows 身份驗證并指向本地服務(wù)器上的 pubs 數(shù)據(jù)庫。

isqlw -d pubs -E -f "c:\Program Files\Microsoft SQL Server\MSSQL\Install\*.sql"


D. 使用 Unicode 文件

本例連接到 MyServer(pubs 數(shù)據(jù)庫),并執(zhí)行 input_file 中的 SQL 語句,執(zhí)行結(jié)果存儲在 output_file 中。

isqlw -S MyServer -d pubs -U sa -P -i input_file -o output_file

制表符 CHAR(9)
換行符 CHAR(10)
回車 CHAR(13)

http://topic.csdn.net/t/20040107/23/2644011.html
osql   實用工具
osql   實用工具使您得以輸入   Transact-SQL   語句、系統(tǒng)過程和腳本文件。該實用工具通過   ODBC   與服務(wù)器通訊。

語法
osql
        [-?]   |
        [-L]   |
        [
                {
                        {-U   login_id   [-P   password]}
                        |   -E
                }
                [-S   server_name[\instance_name]]   [-H   wksta_name]   [-d   db_name]
                [-l   time_out]   [-t   time_out]   [-h   headers]
                [-s   col_separator]   [-w   column_width]   [-a   packet_size]
                [-e]   [-I]   [-D   data_source_name]
                [-c   cmd_end]   [-q   "query "]   [-Q   "query "]
                [-n]   [-m   error_level]   [-r   {0   |   1}]
                [-i   input_file]   [-o   output_file]   [-p]
                [-b]   [-u]   [-R]   [-O]
        ]

參數(shù)-?

顯示   osql   開關(guān)的語法摘要。

-L

列出在本地配置的服務(wù)器和在網(wǎng)絡(luò)上廣播的服務(wù)器的名稱。

-U   login_id

用戶登錄   ID。登錄   ID   區(qū)分大小寫。

-P   password

是用戶指定的密碼。如果未使用   -P   選項,osql   將提示輸入密碼。如果在命令提示符的末尾使用   -P   選項而不帶密碼,osql   使用默認密碼   (NULL)。密碼區(qū)分大小寫。

OSQLPASSWORD   環(huán)境變量使您得以為當前會話設(shè)置默認密碼。因此,不需要通過硬編碼來在批處理文件中設(shè)置密碼。

如果沒有為   -P   選項指定密碼,osql   首先檢查   OSQLPASSWORD   變量。如果未設(shè)置值,osql   使用默認密碼   (NULL)。以下示例在命令提示符處設(shè)置   OSQLPASSWORD   變量,然后訪問   osql   實用工具:

C:\> SET   OSQLPASSWORD=abracadabra
C:\> osql  

-E

使用信任連接而不請求密碼。

-S   server_name[\instance_name]

指定要連接的   Microsoft&reg;   SQL   Server™   2000   實例。在該服務(wù)器上指定   server_name   以連接到   SQL   Server   的默認實例。在該服務(wù)器上指定   server_name\instance_name   以連接到一個已命名的   SQL   Server   2000   的實例。如果未指定服務(wù)器,osql   將連接到本地計算機上的   SQL   Server   默認實例。從網(wǎng)絡(luò)上的遠程計算機執(zhí)行   osql   時,此選項是必需的。

-H   wksta_name

是工作站名稱。工作站名稱存儲在   sysprocesses.hostname   中并由   sp_who   顯示。如果未指定此選項,則采用當前計算機名稱。

-d   db_name

啟動   osql   時發(fā)出一個   USE   db_name   語句。

-l   time_out

指定   osql   登錄超時之前的秒數(shù)。登錄到   osql   的默認超時為   8   秒。

-t   time_out

指定命令超時之前的秒數(shù)。如果未指定   time_out   值,則命令不會超時。

-h   headers

指定要在列標題之間打印的行數(shù)。默認為每一查詢結(jié)果集打印一次標題。用   –1   指定不打印標題。如果使用   -1,則在參數(shù)和設(shè)置之間一定不能有空格(可以是   -h-1,不能是   -h   –1)。

-s   col_separator

指定列分隔符字符,其默認為空格。若要使用對操作系統(tǒng)有特殊含義的字符(例如   |   ;   &   <   > ),請將該字符用雙引號   ( ")   引起來。

-w   column_width

允許用戶設(shè)置屏幕輸出的寬度。默認為   80   個字符。當輸出行達到其最大屏幕寬度時,會拆分為多個行。

-a   packet_size

使您得以請求不同大小的數(shù)據(jù)包。packet_size   的有效值在   512   到   65535   之間。osql   的默認值為服務(wù)器的默認值。數(shù)據(jù)包大小的增加可以提高較大腳本執(zhí)行的性能,在這種執(zhí)行中   GO   命令之間   SQL   語句的數(shù)量很重要。Microsoft   的測試表明   8192   是大容量復制操作典型的最快設(shè)置。可以請求更大的數(shù)據(jù)包大小,但如果請求不能得到批準,則   osql   默認為服務(wù)器的默認值。

-e

回顯輸入。

-I

設(shè)置   QUOTED_IDENTIFIER   連接選項為開啟。

-D   data_source_name

連接到用   Microsoft   SQL   Server   的   ODBC   驅(qū)動程序定義的   ODBC   數(shù)據(jù)源。osql   連接使用該數(shù)據(jù)源中指定的選項。


說明     該選項不適用于其它驅(qū)動程序定義的數(shù)據(jù)源。


-c   cmd_end

指定命令終止符。默認情況下,通過單獨在一行中輸入   GO   來終止命令并將其發(fā)送到   SQL   Server   2000。在重置命令終止符時,不要使用對操作系統(tǒng)有特殊含義的   Transact-SQL   保留字或字符,無論其前面是否有反斜杠。

-q   "query "

啟動   osql   時執(zhí)行查詢,但是在查詢完成時不退出   osql。(注意查詢語句不應(yīng)包含   GO)。如果從批處理文件中發(fā)出查詢,請使用   %variables   或環(huán)境   %variables%。例如:

SET   table   =   sysobjects
osql   /q   "Select   *   from   %table% "

將查詢用雙引號引起來,將查詢中嵌入的任何內(nèi)容用單引號引起來。

-Q   "query "

執(zhí)行查詢并立即退出   osql。將查詢用雙引號引起來,將查詢中嵌入的任何內(nèi)容用單引號引起來。

-n

從輸入行中刪除編號和提示符號   (> )。

-m   error_level

自定義錯誤信息的顯示。顯示指定的或更高嚴重級別錯誤的消息數(shù)、狀態(tài)和錯誤級別。不顯示嚴重級別低于指定級別的錯誤的任何信息。用   -1   指定與消息一起返回所有標題,即使是信息類的消息。如果用   –1,則在參數(shù)和設(shè)置之間不能有空格(可以是   -m-1,不能是   -m   -1)。

-r   {0   |   1}

將消息輸出重定向到屏幕   (stderr)。如果未指定參數(shù),或指定參數(shù)為   0,則僅重定向嚴重級別為   17   或更高的錯誤信息。如果指定參數(shù)為   1,則將重定向所有消息輸出(包括   "print ")。

-i   input_file

標識包含一批   SQL   語句或存儲過程的文件。小于   ( <)   比較運算符可以用來代替   –i。

-o   output_file

標識從   osql   接收輸出的文件。大于   (> )   比較運算符可以用來代替   –o。

如果   input_file   不是   Unicode   并且沒有指定   -u,則   output_file   將存儲為   OEM   格式。如果   input_file   是   Unicode   或者指定了   -u,則   output_file   將存儲為   Unicode   格式。

-p

打印性能統(tǒng)計。

-b

指定發(fā)生錯誤時   osql   退出并返回一個   DOS   ERRORLEVEL   值。當   SQL   Server   錯誤信息的嚴重級別為   10   或更高時,返回給   DOS   ERRORLEVEL   變量的值為   1;否則返回   0。Microsoft   MS-DOS&reg;   批處理文件可以測試   DOS   ERRORLEVEL   的值并適當處理錯誤。

-u

指定   output_file   存儲為   Unicode   格式,而不管   input_file   為何種格式。

-R

指定在將貨幣、日期和時間數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)時   SQL   Server   ODBC   驅(qū)動程序使用客戶端設(shè)置。

-O

為與   isql   的早期版本行為匹配,指定停用某些   osql   功能。下列功能停用:  

EOF   批處理


控制臺寬度自動調(diào)整


寬信息  
同時還將   DOS   ERRORLEVEL   的默認值設(shè)置為   –1。

注釋
osql   實用工具從操作系統(tǒng)直接啟動,并且使用本文中列出的區(qū)分大小寫的選項。啟動后,osql   接受   SQL   語句并將它們交互地發(fā)送到   SQL   Server。結(jié)果被格式化并顯示在屏幕上   (stdout)。可使用   QUIT   或   EXIT   退出   osql。

如果啟動   osql   時未指定用戶名,SQL   Server   2000   將檢查環(huán)境變量并使用它們,例如   osqluser=(user)   或   osqlserver=(server)。如果未設(shè)置環(huán)境變量,則使用工作站用戶名。如果未指定服務(wù)器,則使用工作站名稱。

如果   -U   或   -P   選項都沒有使用,則   SQL   Server   2000   將嘗試使用   Windows   身份驗證模式進行連接。身份驗證基于運行   osql   的   Microsoft   Windows   NT&reg;   用戶帳戶。交互性使用   osql
若要交互性使用   osql,請在命令提示符處鍵入   osql   命令(以及任何選項)。

可以通過鍵入類似下行的命令,在包含由   osql   執(zhí)行的查詢的文件(例如   Stores.qry)中進行讀取:

osql   /U   alma   /P   /i   stores.qry

該文件必須包含命令終止符。  

可以通過鍵入類似下行的命令,在包含查詢的文件(例如   Titles.qry)中進行讀取并將結(jié)果導向另一文件:

osql   /U   alma   /P   /i   titles.qry   /o   titles.res

交互性使用   osql   時,為把操作系統(tǒng)文件讀入到命令緩沖區(qū),可使用:r   file_name。不要在文件中包含命令終止符;在完成編輯后交互輸入終止符。
作者: liyihongcug    時間: 2011-08-25 08:48
本帖最后由 liyihongcug 于 2011-08-25 10:35 編輯

http://msdn.microsoft.com/en-us/library/ms188929.aspx
http://www.programbbs.com/doc/1216.htm

http://zh-cn.w3support.net/index.php?db=so&id=919971

sqlserver沒有mysql的枚舉類型 用函數(shù)來實現(xiàn)

create function enumDBName
(@dbName int)
returns varchar(20)
as
begin
if @dbName is null
return null
declare @temp as varchar(20)
set @temp=case @dbName
when 0 then 'cm1'
when 1 then 'cm2'
when 3 then 'cm3'
end
return @temp
end

使用select id, dbo.enumDBName(IsCurrent) from dbo.table

SET XACT_ABORT { ON | OFF }

備注
當 SET XACT_ABORT 為 ON 時,如果執(zhí)行 Transact-SQL 語句產(chǎn)生運行時錯誤,則整個事務(wù)將終止并回滾。

當 SET XACT_ABORT 為 OFF 時,有時只回滾產(chǎn)生錯誤的 Transact-SQL 語句,而事務(wù)將繼續(xù)進行處理。如果錯誤很嚴重,那么即使 SET XACT_ABORT 為 OFF,也可能回滾整個事務(wù)。

編譯錯誤(如語法錯誤)不受 SET XACT_ABORT 的影響。

對于大多數(shù) OLE DB 提供程序(包括 SQL Server),必須將隱式或顯示事務(wù)中的數(shù)據(jù)修改語句中的 XACT_ABORT 設(shè)置為 ON。唯一不需要該選項的情況是在提供程序支持嵌套事務(wù)時。有關(guān)詳細信息,請參閱分布式查詢和分布式事務(wù)。

SET XACT_ABORT 的設(shè)置是在執(zhí)行或運行時設(shè)置,而不是在分析時設(shè)置。

示例
下列代碼示例導致在含有其他 Transact-SQL 語句的事務(wù)中發(fā)生外鍵沖突錯誤。在第一個語句集中產(chǎn)生錯誤,但其他語句均成功執(zhí)行且事務(wù)成功提交。在第二個語句集中,將 SET XACT_ABORT 設(shè)置為 ON。這導致語句錯誤使批處理終止,并使事務(wù)回滾。

  復制代碼
USE AdventureWorks;
GO
IF OBJECT_ID(N't2', N'U') IS NOT NULL
    DROP TABLE t2;
GO
IF OBJECT_ID(N't1', N'U') IS NOT NULL
    DROP TABLE t1;
GO
CREATE TABLE t1
    (a INT NOT NULL PRIMARY KEY);
CREATE TABLE t2
    (a INT NOT NULL REFERENCES t1(a));
GO
INSERT INTO t1 VALUES (1);
INSERT INTO t1 VALUES (3);
INSERT INTO t1 VALUES (4);
INSERT INTO t1 VALUES (6);
GO
SET XACT_ABORT OFF;
GO
BEGIN TRANSACTION;
INSERT INTO t2 VALUES (1);
INSERT INTO t2 VALUES (2); -- Foreign key error.
INSERT INTO t2 VALUES (3);
COMMIT TRANSACTION;
GO
SET XACT_ABORT ON;
GO
BEGIN TRANSACTION;
INSERT INTO t2 VALUES (4);
INSERT INTO t2 VALUES (5); -- Foreign key error.
INSERT INTO t2 VALUES (6);
COMMIT TRANSACTION;
GO
-- SELECT shows only keys 1 and 3 added.
-- Key 2 insert failed and was rolled back, but
-- XACT_ABORT was OFF and rest of transaction
-- succeeded.
-- Key 5 insert error with XACT_ABORT ON caused
-- all of the second transaction to roll back.
SELECT *
    FROM t2;
GO
SET XACT_ABORT { ON | OFF }

備注
當 SET XACT_ABORT 為 ON 時,如果執(zhí)行 Transact-SQL 語句產(chǎn)生運行時錯誤,則整個事務(wù)將終止并回滾。

當 SET XACT_ABORT 為 OFF 時,有時只回滾產(chǎn)生錯誤的 Transact-SQL 語句,而事務(wù)將繼續(xù)進行處理。如果錯誤很嚴重,那么即使 SET XACT_ABORT 為 OFF,也可能回滾整個事務(wù)。

編譯錯誤(如語法錯誤)不受 SET XACT_ABORT 的影響。

對于大多數(shù) OLE DB 提供程序(包括 SQL Server),必須將隱式或顯示事務(wù)中的數(shù)據(jù)修改語句中的 XACT_ABORT 設(shè)置為 ON。唯一不需要該選項的情況是在提供程序支持嵌套事務(wù)時。有關(guān)詳細信息,請參閱分布式查詢和分布式事務(wù)。

SET XACT_ABORT 的設(shè)置是在執(zhí)行或運行時設(shè)置,而不是在分析時設(shè)置。

示例
下列代碼示例導致在含有其他 Transact-SQL 語句的事務(wù)中發(fā)生外鍵沖突錯誤。在第一個語句集中產(chǎn)生錯誤,但其他語句均成功執(zhí)行且事務(wù)成功提交。在第二個語句集中,將 SET XACT_ABORT 設(shè)置為 ON。這導致語句錯誤使批處理終止,并使事務(wù)回滾。

  復制代碼
USE AdventureWorks;
GO
IF OBJECT_ID(N't2', N'U') IS NOT NULL
    DROP TABLE t2;
GO
IF OBJECT_ID(N't1', N'U') IS NOT NULL
    DROP TABLE t1;
GO
CREATE TABLE t1
    (a INT NOT NULL PRIMARY KEY);
CREATE TABLE t2
    (a INT NOT NULL REFERENCES t1(a));
GO
INSERT INTO t1 VALUES (1);
INSERT INTO t1 VALUES (3);
INSERT INTO t1 VALUES (4);
INSERT INTO t1 VALUES (6);
GO
SET XACT_ABORT OFF;
GO
BEGIN TRANSACTION;
INSERT INTO t2 VALUES (1);
INSERT INTO t2 VALUES (2); -- Foreign key error.
INSERT INTO t2 VALUES (3);
COMMIT TRANSACTION;
GO
SET XACT_ABORT ON;
GO
BEGIN TRANSACTION;
INSERT INTO t2 VALUES (4);
INSERT INTO t2 VALUES (5); -- Foreign key error.
INSERT INTO t2 VALUES (6);
COMMIT TRANSACTION;
GO
-- SELECT shows only keys 1 and 3 added.
-- Key 2 insert failed and was rolled back, but
-- XACT_ABORT was OFF and rest of transaction
-- succeeded.
-- Key 5 insert error with XACT_ABORT ON caused
-- all of the second transaction to roll back.
SELECT *
    FROM t2;
GO


本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/cxzhq2002/archive/2009/07/31/4396558.aspx

SET   XACT_ABORT   on
SET   ANSI_NULLS   ON
SET   ANSI_WARNINGS   ON
第一個,如果事務(wù)中發(fā)生錯誤,on   則會終止整個事務(wù)的執(zhí)行,如果OFF,繼續(xù)錯誤的下面一句
第二個用于和NULL的比較,如:null=null在off時會返回   true,在on   時為false ET   NOCOUNT
使返回的結(jié)果中不包含有關(guān)受   Transact-SQL   語句影響的行數(shù)的信息。

語法
SET   NOCOUNT   {   ON   |   OFF   }

注釋
當   SET   NOCOUNT   為   ON   時,不返回計數(shù)(表示受   Transact-SQL   語句影響的行數(shù))。當   SET   NOCOUNT   為   OFF   時,返回計數(shù)。

即使當   SET   NOCOUNT   為   ON   時,也更新   @@ROWCOUNT   函數(shù)。

當   SET   NOCOUNT   為   ON   時,將不給客戶端發(fā)送存儲過程中的每個語句的   DONE_IN_PROC   信息。當使用   Microsoft&reg;   SQL   Server™   提供的實用工具執(zhí)行查詢時,在   Transact-SQL   語句(如   SELECT、INSERT、UPDATE   和   DELETE)結(jié)束時將不會在查詢結(jié)果中顯示 "nn   rows   affected "。

如果存儲過程中包含的一些語句并不返回許多實際的數(shù)據(jù),則該設(shè)置由于大量減少了網(wǎng)絡(luò)流量,因此可顯著提高性能。

SET   NOCOUNT   設(shè)置是在執(zhí)行或運行時設(shè)置,而不是在分析時設(shè)置。
作者: liyihongcug    時間: 2011-08-25 10:36
本帖最后由 liyihongcug 于 2011-08-26 13:52 編輯

http://1000copy.iteye.com/blog/690906
Exec dbo.sp_send_dbmail @profile_name='Alerts via Betbrain mail server', @recipients='lh@hhh.com',    @subject='test',    @body='100.0.4.18test'

字符串換為datetime(使用datetime 千萬不要哦用datestamptime
否則反復出現(xiàn) Msg 273, Level 16, State 1, Line 1 不能將顯式值插入時間戳列。
)  datetime--》string(用convert)
insert into dbo.a(id,mydate,mytime,myall)
SELECT TOP 10 a.[instance_id]
,cast(a.[run_date] as CHAR() as a1
,LEFT(a.[run_time],2)+':'+SUBSTRING(cast(a.[run_time] as char(),2,2)+':'+RIGHT(a.[run_time],2) as a2
    ,cast(a.[run_date] as CHAR()+' '+ LEFT(a.[run_time],2)+':'+SUBSTRING(cast(a.[run_time] as char(),2,2)+':'+RIGHT(a.[run_time],2)

  FROM [msdb].[dbo].[sysjobhistory] a,

  [msdb].[dbo].[sysjobs] b  
   where
   a.[job_id] =b.[job_id]
   and b.[name]='LSResjobname'
   and a.[run_status]=0

--創(chuàng)建函數(shù) IF OBJECT_ID('f_formatdate') > 0 DROP FUNCTION f_formatdate GO CREATE FUNCTION f_formatdate( @value VARCHAR(20), @type SMALLINT )RETURNS DATETIME AS BEGIN DECLARE @r DATETIME IF @type=1 BEGIN SET @value=REPLACE(REPLACE(@value,'-','.'),'月','') SET @r=PARSENAME(@value,1)+'-'+PARSENAME(@value,2)+'-'+PARSENAME(@value,3) END ELSE SET @r=STUFF(@value,3,0,':') RETURN @r END GO --測試效果 declare @a nvarchar(20),@b nvarchar(20) select @a=N'31-5月-11' ,@b='0830' DECLARE @t TABLE(d DATETIME) INSERT @t SELECT dbo.f_formatdate(@a,1)+dbo.f_formatdate(@b,2) SELECT * FROM @t /* d ----------------------- 2011-05-31 08:30:00.000 (1 行受影響) */

MySql與SqlServer的一些常用用法的差別

由于工作的原因:上家公司的數(shù)據(jù)庫全采用MySql,所以不得不用它。因此也學到了MySql的一些知識,但考慮到今后可能沒機會使用了,所以想趁現(xiàn)在離職在家休息,打算把這些東西整理一下,也為了萬一今后能用上,留個參考的資源?紤]到一直在使用SqlServer,所以就打算直接與 SqlServer對比來寫。

本文將主要列出MySql與SqlServer不同的地方,且以常用的存儲過程的相關(guān)內(nèi)容為主。

1. 標識符限定符
SqlServer        []
MySql        ``

2. 字符串相加
SqlServer        直接用 +
MySql        concat()

3. isnull()
SqlServer        isnull()
MySql        ifnull()
注意:MySql也有isnull()函數(shù),但意義不一樣

4. getdate()
SqlServer        getdate()
MySql        now()

5. newid()
SqlServer        newid()
MySql        uuid()

6. @@ROWCOUNT
SqlServer        @@ROWCOUNT
MySql        row_count()
注意:MySql的這個函數(shù)僅對于update, insert, delete有效

7. SCOPE_IDENTITY()
SqlServer        SCOPE_IDENTITY()
MySql        last_insert_id()

8. if ... else ...
SqlServer       

IF Boolean_expression
     { sql_statement | statement_block }
[ ELSE
     { sql_statement | statement_block } ]

-- 若要定義語句塊,請使用控制流關(guān)鍵字 BEGIN 和 END。

MySql       

IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
END IF

注意:對于MySql來說,then, end if是必須的。類似的還有其它的流程控制語句,這里就不一一列出。

9. declare

其實,SqlServer和MySql都有這個語句,用于定義變量,但差別在于:在MySql中,DECLARE僅被用在BEGIN ... END復合語句里,并且必須在復合語句的開頭,在任何其它語句之前。這個要求在寫游標時,會感覺很BT.

10. 游標的寫法
SqlServer       

declare @tempShoppingCart table (ProductId int, Quantity int)
insert into @tempShoppingCart (ProductId, Quantity)
        select ProductId, Quantity from ShoppingCart where UserGuid = @UserGuid


declare @productId int
declare @quantity int
declare tempCartCursor cursor for
                select ProductId, Quantity from @tempShoppingCart

open tempCartCursor
fetch next from tempCartCursor into @productId, @quantity
while  @@FETCH_STATUS = 0
begin
        update Product set SellCount = SellCount + @quantity        where productId = @productId

        fetch next from tempCartCursor into @productId, @quantity
end

close tempCartCursor
deallocate tempCartCursor

MySql       

declare m_done int default 0;
declare m_sectionId int;
declare m_newsId int;

declare _cursor_SN cursor for select sectionid, newsid from _temp_SN;
declare continue handler for not found set m_done = 1;

create temporary table _temp_SN
        select sectionid, newsid from SectionNews  group by sectionid, newsid having count(*) > 1;

open _cursor_SN;
while( m_done = 0 ) do
        fetch _cursor_SN into m_sectionId, m_newsId;
       
        if( m_done = 0 ) then
                -- 具體的處理邏輯
        end if;
end while;
close _cursor_SN;
drop table _temp_SN;

注意:為了提高性能,通常在表變量上打開游標,不要直接在數(shù)據(jù)表上打開游標。

11. 分頁的處理
SqlServer       

create procedure GetProductByCategoryId(
    @CategoryID int,
    @PageIndex int = 0,
    @PageSize int = 20,
    @TotalRecords int output
)
as
begin
     
declare @ResultTable table
(
    RowIndex int,
    ProductID int,
    ProductName nvarchar(50),
    CategoryID int,
    Unit nvarchar(10),
    UnitPrice money,
    Quantity int
);
     
insert into @ResultTable
select row_number() over (order by ProductID asc) as RowIndex,
       p.ProductID, p.ProductName, p.CategoryID, p.Unit, p.UnitPrice, p.Quantity
from   Products as p
where CategoryID = @CategoryID;
      
select  @TotalRecords = count(*) from  @ResultTable;
     
select *
from   @ResultTable
where  RowIndex > (@PageSize * @PageIndex) and RowIndex <= (@PageSize * (@PageIndex+1));
     
end;

當然,SqlServer中并不只有這一種寫法,只是這種寫法是比較常見而已。
MySql       

create procedure GetProductsByCategoryId(
   in _categoryId int,
   in _pageIndex int,
   in _pageSize int,
   out _totalRecCount int
)
begin

   set @categoryId = _categoryId;
   set @startRow = _pageIndex * _pageSize;
   set @pageSize = _pageSize;

   prepare PageSql from
        'select sql_calc_found_rows * from product  where categoryId = ? order by ProductId desc limit ?, ?';
   execute PageSql using @categoryId, @startRow, @pageSize;
   deallocate prepare PageSql;
   set _totalRecCount = found_rows();

end

MySql與SqlServer的差別實在太多,以上只是列出了本人認為經(jīng)常在寫存儲過程中會遇到的一些具體的差別之處。

去年本人將一些MySql的常用函數(shù)作了一番整理

http://www.cnblogs.com/fish-li/archive/2011/04/05/2006107.html
作者: sychangchun    時間: 2012-01-28 15:36
謝謝分享。
作者: jmyychen    時間: 2012-05-03 14:54
如何修改sql server 2005數(shù)據(jù)庫系統(tǒng)日志保存路徑

把sql server 2005裝在了C盤,怎么把數(shù)據(jù)庫的系統(tǒng)日志文件保存到其他盤。
問題補充  2009-09-25 15:25

是“數(shù)據(jù)庫系統(tǒng)日志”,也就是事務(wù)日志。
問題補充  2009-09-27 09:27

step 1: 日志模式設(shè)為簡單,并將自動輸增長改為每次增長 200M左右。

step 2:重啟sql 服務(wù)可以恢復tempdb原始大小

step 3:移動tempdb到d:\

use tempdb;
go
alter database tempdb
modify file (name = tempdev,filename='E:\sqldata\tempdbmodified.mdf');
go
alter database tempdb
modify file (name = templog,filename='E:\sqldata\templogmodified.ldf');
go

step 4:別外看來你的系統(tǒng)臨時數(shù)據(jù)生成的比較大,可以增加多個數(shù)據(jù)文件,可以放在不同的Raid盤上,并且的一定將空間預先手動擴到需要的大小。

step 5:數(shù)據(jù)庫安裝很忌諱將系統(tǒng)數(shù)據(jù)庫安裝在跟操作系統(tǒng)一個物理盤下,看來你的master等數(shù)據(jù)庫也在C盤下。
我原來的sqlserver2000的日志文件(transaction logs)路徑設(shè)成了和data files同樣的盤符中,我現(xiàn)在想修改到其他盤符去,請問如何修改?
我原來的sqlserver2000的日志文件(transaction logs)路徑設(shè)成了和data files同樣的盤符中,我現(xiàn)在想修改到其他盤符去,請問如何修改?
=========================================================


1、所有用戶退出系統(tǒng),關(guān)閉數(shù)據(jù)庫,重新啟動數(shù)據(jù)庫
2、detattc h 數(shù)據(jù)庫
3、attach 數(shù)據(jù)庫,但不包括日志
4、在新目錄下建立數(shù)據(jù)庫日志
alter database的filename只能修改tempdb數(shù)據(jù)庫文件的物理路徑,而且還要重起后才能生效~
用樓上的方法,妙!~

    最初由 ub40 發(fā)布
    [B]我原來的sqlserver2000的日志文件(transaction logs)路徑設(shè)成了和data files同樣的盤符中,我現(xiàn)在想修改到其他盤符去,請問如何修改? [/B]

問一句,好像采用sp_attach_single_file_db的話,前提是只有一個數(shù)據(jù)庫文件,沒有而且同樣目錄下,要先把日志文件刪除。
但是attach以后,系統(tǒng)會自動創(chuàng)建一個日志文件?
這樣,至少會有一個日志文件和數(shù)據(jù)文件在同一個目錄。
sp_attach_single_file_db 不是只對一個數(shù)據(jù)文件的數(shù)據(jù)庫,這個命令相對的是.mdf的數(shù)據(jù)文件,由主數(shù)據(jù)文件來識別其他的數(shù)據(jù)文件,對于只有一個日志文件的數(shù)據(jù)庫,如果在detach的過程中日志丟失,用 sp_attach_single_file_db系統(tǒng)會自動給s數(shù)據(jù)庫增加一個日志文件,如果數(shù)據(jù)本身是多個日志文件,則方法不同
因此,我認為,考慮為了提供系統(tǒng)性能。將日志文件移動到一個新的硬盤上,最簡單的方法應(yīng)該是:采用備份和恢復。
1 全備份數(shù)據(jù)庫
2 恢復,在選項里面可以修改日志文件的路徑,而且,你可以修改數(shù)據(jù)文件的路徑,無論你有多少個文件。
2樓的方法不行呀,我用的attachDB語句:
exec sp_attach_single_file_db @dbname = 'Siemens',
   @physname = 'e:\sqlserver\MSSQL\Data\Siemens.MDF'

但出現(xiàn)如下錯誤:
Server: Msg 1813, Level 16, State 2, Line 1
Could not open new database 'Siemens'. CREATE DATABASE is aborted.
Device activation error. The physical file name 'e:\sqlserver\MSSQL\data\Siemens_Log.LDF' may be incorrect.
attach_db需要日志文件的。沒有日志文件是不行的。
而且,即使使用sp_attach_single_file_db,也還會在相同的目錄下,自動創(chuàng)建一個日志文件。

[B]移動日志文件的最好方法是備份和恢復。attach不是用來解決這類問題的。[/B]
不好意思,方法有一些問題,

先讓所有用戶退出,分離數(shù)據(jù)庫
1、exec sp_detach_db @dbname = 'database1'

然后,在操作系統(tǒng)級別將log 拷貝到新目錄下。再執(zhí)行
2、EXEC sp_attach_db @dbname = 'database1',
        @filename1 = 'd:\data1_Data.mdf',
        @filename2 = 'd:\log\data1_log.ldf'
其中 @filename2就是你拷貝的日志文件

已經(jīng)經(jīng)過測試 ,沒有問題

整個操作不到3分鐘,應(yīng)該是最快的把
1.。樱裕希小。樱眩獭。樱牛遥郑牛摇。樱牛遥郑桑茫
2.。停希郑拧。疲桑蹋牛
3.。遥牛粒裕裕粒茫取。裕龋牛
那移動mdf ndf也用同樣步驟么?
自己建立一個小庫試驗一下把
可以通過該系統(tǒng)表,然后net  stop  mssqlserver ;move物理文件實現(xiàn);最后net start mssqlserver
BACKUP DATABASE dbname TO disk = 'd:\dbname.bak'

RESTORE DATABASE dbname FROM disk = 'd:\dbname.bak'
        with move 'dbname_DAT' to 'e:\??????????.mdf',
                move 'dbname_LOG' to 'f:\????????.ldf'
作者: zhlin0054    時間: 2012-08-10 19:16
感謝各位的分享




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2