顯示具有 MSSQL 標籤的文章。 顯示所有文章
顯示具有 MSSQL 標籤的文章。 顯示所有文章

星期四, 7月 03, 2025

MSSQL Server EXPRESS如何排程自動備份資料庫

第一步、建立一個db_backup.sql純文字檔

內容:

  1. DBName改為要備份的資料庫名稱。
  2. 執行此SQL Script會在D:\db_backup\資料夾,產生DBName-YYYYMMDD.BAK的MSSQL資料庫備份檔(YYYYMMDD是執行備份當時的年月日)。
  3. 如果備份路徑加備份檔名超過50個字元,請適當修改DECLARE @BackFilename as char(50)的變數長度值。

星期一, 4月 01, 2013

指令匯入 MSSQL script 檔


使用 Microsoft SQL Server Management Studio 載入執行大檔案的 MSSQL script 時,會出現以下錯誤:



可以改在命令提示字元執行以下的語法:

sqlcmd -S PcName\SQLEXPRESS -U sa -P password -d DataBaseName -i C:\Script.sql -o C:\log.txt

-S: 此處為在 SSMS 裡寫在「伺服器名稱」的值
-U: 此處為在 SSMS 裡寫在「登入」的值
-P: 此處為在 SSMS 裡寫在「密碼」的值
-i: 匯入的腳本檔,也就是剛才使用資料庫發行精靈 (SqlPubWiz.exe) 產生出來的檔案
-o: 匯出的檔案,內容大致是平常在 SSMS 裡執行 SQL 語法時會出現在「訊息」窗格裡的內容(我是覺得這批匯入所產生的 log,和我在 SSMS 執行時看到的訊息量不太一樣)

星期二, 9月 25, 2012

MSSQL 2008 如何清空交易記錄檔(*_Log.LDF)

在 MSSQL 2000 可以下 T-SQL 指令

backup log database_name with TRUNCATE_ONLY

dbcc shrinkdatabase (database_name, TRUNCATEONLY)

“database_name”是資料庫檔案的實際名稱。

來清空交易記錄檔(*_Log.LDF)。

但在 MSSQL 2005 以後,此 T-SQL 指令就不能使用了,必須改用其他方法,以下是方法之一。
(提醒您執行處理之前,務必先備份原來的資料庫。)

一、將資料庫切換至【簡單】復原模式。
use master
go
ALTER DATABASE 【database_name】 SET RECOVERY SIMPLE WITH NO_WAIT


二、查詢資料庫交易記錄檔的邏輯名稱(如果已經知道【database_log_name】的名稱可以省略 select 那一行指令 )。
use 【database_name】
go
select name from sys.database_files where type_desc = 'log'

三、將交易記錄檔還原成 1MB。
DBCC SHRINKFILE(【database_log_name】, 1)

四、將資料庫切換回【完正】復原模式。
use master
go
ALTER DATABASE 【database_name】SET RECOVERY FULL WITH NO_WAIT

最後再次提醒您,在執行任何處理之前,請務必先備份原來的資料庫。

星期一, 4月 16, 2012

MSSQL SQL-Injection 時的資料復原

單一Table單一欄位的復原法:

UPDATE tableName SET columnName = REPLACE ( convert(varchar(8000), columnName ) , '要被取代的字串', '取代的字串' ) WHERE columnName LIKE '%要被取代的字串%' ;


改寫為 Stored Procedure (只使用單引號):
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE procedureName
AS
BEGIN
DECLARE cursor_T CURSOR FOR
(SELECT obj.name AS tableName,
clum.name AS colName
FROM dbo.sysobjects AS obj INNER JOIN
dbo.syscolumns AS clum ON obj.id = clum.id INNER JOIN
dbo.systypes AS sType ON clum.xusertype = sType.xusertype
WHERE (obj.xtype = 'U') AND (clum.xusertype IN (35, 99, 167, 231))
)
DECLARE @tableName nvarchar(255),
@col nvarchar(255)
OPEN cursor_T
FETCH NEXT FROM cursor_T INTO @tableName,@col
WHILE (@@FETCH_STATUS = 0)
BEGIN EXEC('UPDATE ' + @tableName +
' SET ' + @col + ' = REPLACE( convert(varchar(8000),' + @col + ') , ''要被取代的字串'', ''取代的字串'' )
WHERE ' + @col + ' LIKE ''%要被取代的字串%''')
FETCH NEXT FROM cursor_T INTO @tableName,@col
END
CLOSE cursor_T
DEALLOCATE cursor_T
END


Stored Procedure 執行指令:

exec procedureName




星期五, 4月 11, 2008

如何清空MSSQL的交易記錄檔(*_Log.LDF)

在SQL Query Analyzer裡,執行以下二個指令:

backup log database_name with TRUNCATE_ONLY

dbcc shrinkdatabase (database_name, TRUNCATEONLY)

“database_name”是資料庫檔案的實際名稱。

星期四, 4月 10, 2008

將 *.MDF Restore 回 SQL 的指令

在SQL Query Analyzer裡,執行以下指令:

EXEC sp_attach_db @dbname = N'database_name', @filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL\Data\database_name_data.mdf', @filename2 = N'C:\Program Files\Microsoft SQL Server\MSSQL\Data\database_name_log.ldf'

“database_name”是資料庫檔案的實際名稱,@filename1 和 @filename2 請依照 MDF 檔案的實際路徑。

星期三, 3月 19, 2008

指令方式重新啟動MSSQL Server

關閉MSSQL Server服務
net stop mssqlserver

啟動MSSQL Server服務
net start mssqlserver