1. 程式人生 > >Sqlserver命令SQLCMD備份恢復資料庫

Sqlserver命令SQLCMD備份恢復資料庫

1,備份,建立指令碼bak.bat,內容
sqlcmd -i "f:\dbbak\bak.sql"

指令碼呼叫恢復的語句文字
:connect .
backup database db1 to disk = 'f:\dbbak\db1.bak' with init
go

說明:init代表覆蓋之前的檔案,如果noinit代表append to the most recent backup
2,還原,建立還原指令碼restore.bat,內容
sqlcmd -i "f:\dbbak\restore.sql"
pause

如果還原到指定庫,追加 -d dbname即可

如果還原後亂碼,可以指定-f 指定字符集,比如-f 65001 使用utf-8字符集

還原sql為
:connect .
USE master
GO
ALTER DATABASE [db1] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

--檢視是否還有使用者連線
--SELECT * FROM sys.[sysprocesses] WHERE DB_NAME([dbid])='db1'
--GO
ALTER DATABASE [db1] SET MULTI_USER
GO
RESTORE DATABASE [db1] FROM  DISK = N'f:\dbbak\db1.bak' WITH  FILE = 1,  NOUNLOAD,  REPLACE,  STATS = 10
go

3,批量生成備份庫sql
SELECT
'backup database '+ name+' to disk = ''f:\dbbak\'+name+'.bak'' with init'
FROM Master..SysDatabases
where dbid>=7; -- 注意條件

4,其他

C:\Users\Administrator>sqlcmd -?
Microsoft (R) SQL Server 命令列工具
版本 11.0.2100.60 NT x64
版權所有 (c) 2012 Microsoft。保留所有權利。

用法: Sqlcmd            [-U 登入 ID]          [-P 密碼]
  [-S 伺服器]            [-H 主機名]          [-E 可信連線]
  [-N 加密連線][-C 信任伺服器證書]
  [-d 使用資料庫名稱] [-l 登入超時值]     [-t 查詢超時值]
  [-h 標題]           [-s 列分隔符]      [-w 螢幕寬度]
  [-a 資料包大小]        [-e 回顯輸入]        [-I 允許帶引號的識別符號]
  [-c 命令結束]            [-L[c] 列出伺服器[清除輸出]]
  [-q "命令列查詢"]   [-Q "命令列查詢" 並退出]
  [-m 錯誤級別]        [-V 嚴重級別]     [-W 刪除尾隨空格]
  [-u unicode 輸出]    [-r[0|1] 傳送到 stderr 的訊息]
  [-i 輸入檔案]         [-o 輸出檔案]        [-z 新密碼]
  [-f <內碼表> | i:<內碼表>[,o:<內碼表>]] [-Z 新建密碼並退出]
  [-k[1|2] 刪除[替換]控制字元]
  [-y 可變長度型別顯示寬度]
  [-Y 固定長度型別顯示寬度]
  [-p[1] 列印統計資訊[冒號格式]]
  [-R 使用客戶端區域設定]
  [-K 應用程式意向]
  [-M 多子網故障轉移]
  [-b 出錯時中止批處理]
  [-v 變數 = "值"...]  [-A 專用管理連線]
  [-X[1] 禁用命令、啟動指令碼、環境變數[並退出]]
  [-x 禁用變數替換]
  [-? 顯示語法摘要]

登入執行dml語句

C:\Users\Administrator>sqlcmd
1> use t
2> go
已將資料庫上下文更改為 't'。
1> create table t(id int);
2> go
1> insert into t values(1);
2> go

(1 行受影響)
1> select * from t;
2> go
id
-----------
          1

(1 行受影響)
如果是遠端需要指定使用者名稱,密碼地址埠,-U sa  -P  123456 -S 192.168.1.100,1433