星期四, 5月 16, 2013

Linux 個人轉信設定問題記錄

在 Linux 使用者家目錄下的【.forward】這個檔案,可以設定收到信件之後要自動轉寄的郵址.

例如,【user1】這個帳號所接收到的信件除了自己要保留一份之外,還要傳給本機上的【user2】以及【outside@test.com.tw】時,那你可以這樣做設定(一行為一個轉寄帳號):

user2
outside@test.com.tw
\user1

其中自己保留備份者前面要記得加上【\】符號,避免在某些系統上造成 loop 問題.

雖然轉寄本機帳號(包含保留帳號)可以省略【@本機網域名稱】,但如本機帳號名稱含有特殊符號者(如【.】),某些系統會判定為非合法帳號,這時請加上【@本機網域名稱】,就可以解決這個問題.

星期一, 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 執行時看到的訊息量不太一樣)

星期五, 12月 21, 2012

CentOS 6.x 移除預設安裝的圖形界面

1. 修改 /etc/inittab 的 id:5:initdefault: 改成 id:3:initdefault: (開機用文字模式啟動),並 REM x:5:respawn:/etc/X11/prefdm -nodaemon。

2. 執行 yum groupremove "GNOME Desktop Environment"、yum groupremove "X Window System" 將圖形視窗界面程式移除。

星期四, 12月 20, 2012

CentOS Linux Software RAID 救援

1.用 CentOS 光碟用 linux recure 模式開機

2. 執行 fdisk -l 查詢磁碟分割區是否有正常掛載。

3. 執行 mdadm --examine --scan >> /etc/mdadm.conf 由原 RAID 分割區產生 RAID 定義檔。

4. 執行 cat /etc/mdadm.conf 查出原先有哪些 RAID 分割區。

5. 依照第 3 步驟查詢結果,執行 mdadm --assemble --scan /dev/md0。

6. 將 RAID 分割區全部載入後,請先執行 cat /proc/mdstat 查看是否有 RAID 卷冊在進行工作。

7. 在 /mnt 執行 mkdir 建立各 RAID 卷冊要掛載的資料夾。

8. 執行 mount /dev/md0 /mnt/md0 將 RAID 卷冊掛載到資料夾。

9. 此時就可以抓取到 RAID 卷冊裡的資料。

* 如果掛載 RAID 卷冊出現有【... invalid argument】的錯誤訊息,請執行 fsck /dev/md0 對 RAID 卷冊做檔案系統檢查。


星期二, 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

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

用 yum 將 CentOS 5.x 的 php 5.1.x 升級到 5.3.x - Part II

發現一種官方提供的 yum 安裝方法。

做更新動作之前還是提醒請先備份(網管千古名言:【沒事多備份,多備份沒事。】)。

一、先停止 apache 服務。
#service httpd stop

二、查詢已經有安裝了哪些 php 相關的程式記錄下來(後面安裝 php 5.3 模組時會用到)。
#rpm -qa | grep php

三、移除原先安裝的 php(包含 php 模組)。
#yum remove php php-*
(如果不移除 php-*,會導致後面安裝 php 5.3 的錯誤)

四、安裝 php 5.3。
#yum install php53

五、安裝 php 5.3 模組。
#yum install php53-gd php53-pdo php53-mbstring php53-mysql php53-ldap php53-devel php53-odbc
(上述是我安裝的 php 模組,您可以依照步驟二查詢結果的去安裝)

六、啟動apache 服務。
#service httpd start

七、查詢 php 版本是否正確更新。
#php -v

打完收工。
備註: 似乎從 5.2 開始 php 的 date() 函數會因為預設時區的問題而出現錯誤。
所以網頁 php 要加上一行(date_default_timezone_set("Asia/Taipei");)來解決。

星期一, 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