none
exec xp_cmdshell問題請教 RRS feed

  • 問題

  • 您好:我參考以下 SQL T-SQL 要來測試卸離作業,但是 滋酷 資料庫 有卸離,卻沒有做到 COPY .. 到baclup的動作?
    --利用sp_detach_db卸離資料庫後
    
    USE master
    
    EXEC master.dbo.sp_detach_db 
    
    @dbname = N'CC', 
    
    @keepfulltextindexfile=N'true'
    
    --利用陳述式搭配動態SQL執行xp_cmdshell
    
    declare @dt varchar(30)    --記錄執行日期
    
    declare @cmdD varchar(255) --記錄資料檔案路徑
    
    declare @cmdL varchar(255) --記錄交易記錄路徑
    
    SET @dt=CONVERT(char(8),GETDATE(),112) --取出現在日期 YYYYMMDD
    
    SET @cmdD='copy C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\CC.mdf C:\backup\CC'+@dt+'.mdf' --複製資料到C:\BACKUP
    
    SET @cmdL='copy C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\CC_log.ldf  C:\backup\CC_log'+@dt+'.ldf'  --複製交易記錄
    
    exec xp_cmdshell @cmdD --用xp_cmdshell執行動態指令進行複製資料檔
    
    exec xp_cmdshell @cmdL --用xp_cmdshell執行動態指令進行複製交易記錄檔
    
    --完成後再附加資料庫
    
    USE master
    
    CREATE DATABASE [CC] ON 
    
    ( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\CC.mdf' ),
    
    ( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\CC_log.ldf' )
    
     FOR ATTACH
    
    GO
    
    
    請問問題在哪邊呢?
    謝謝!


    • 已移動 Alex ChuoModerator 2010年1月24日 上午 04:44 (從:資料庫與程式開發(SQL Server Development))
    • 已編輯 Alex ChuoModerator 2010年1月24日 上午 06:14 修改錯誤
    2010年1月23日 上午 09:15

解答

  • 請用雙引號包住完整檔案路徑

    SET @cmdD='copy "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\CC.mdf" "C:\backup\CC'+@dt+'.mdf"' --複製資料到C:\BACKUP

    SET @cmdL='copy "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\CC_log.ldf"  "C:\backup\CC_log'+@dt+'.ldf"'  --複製交易記錄
     ------------------------------------------------------------------------------------------------------------
    若不用雙引號會變成
    copy C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\CC.mdf C:\backup\CCyyyymmdd.mdf
    會被解釋成
    將C:\Program 拷貝成 Files\Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\CC.mdf  及C:\backup\CCyyyymmdd.mdf 這兩個
    2010年1月25日 上午 02:12

所有回覆

  • Got any error? Did you set cmdshell proxy?
    2010年1月23日 下午 09:12
  • 請用雙引號包住完整檔案路徑

    SET @cmdD='copy "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\CC.mdf" "C:\backup\CC'+@dt+'.mdf"' --複製資料到C:\BACKUP

    SET @cmdL='copy "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\CC_log.ldf"  "C:\backup\CC_log'+@dt+'.ldf"'  --複製交易記錄
     ------------------------------------------------------------------------------------------------------------
    若不用雙引號會變成
    copy C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\CC.mdf C:\backup\CCyyyymmdd.mdf
    會被解釋成
    將C:\Program 拷貝成 Files\Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\CC.mdf  及C:\backup\CCyyyymmdd.mdf 這兩個
    2010年1月25日 上午 02:12