2017年12月5日 星期二

☆SQLServer/Issue/SQL 將數據類型 varchar 轉換為 numeric 時出錯

[SQL Server][Issue][SQL] 


[案例說明][Explain]

SQL Server Version -> 2012

透過cast或convert將nvarchar或varchar轉換為數字型態時,因資料內容問題發生的錯誤:
訊息:將數據類型 nvarchar 轉換為 numeric 時出錯

Solution1
 使用ISNUMBERIC功能過濾錯誤的資料內容(官方說明)

EXAMPLE

select * from testtab
where ISNUMERIC(欄位) = 0




Solution2

若使用ISNUMERIC後仍然出現錯誤,可能是因為資料中有科學符號造成
先轉成float格式之後再轉numeric即可



select cast(  cast(欄位 as float) as numeric(10,6)  )  from testtab;

2017年12月4日 星期一

☆Windows/Batch/Command Windows批次上傳FTP指令

[Windows][Batch][Command] 


[需求說明][Request]

Windows Server Version -> 2012

Windows Server需要定期的將備份資料,上傳至異地端的FTP Server。
要實現這個功能,一般我們會用Windows排程器+Batch Command(批次檔案)來處理,Windows排程器也是就Windows作業系統內建的排程軟體,一般從系統管理中可以找到(每個版本可能有點不同);Windows Batch則是早期從DOS時代就開始有的東西,如果比較資深的相信會很有感觸...這東西已經有點年代了(小弟我也有點年紀了XD),延申到Windows Server 2012之後的Power Shell是不一樣的東西,Power Shell是這幾年新的技術…有機會再來研究研究。

下面有兩個範例提供參考,一個是用純Windows指令上傳,另一個則是借用WinSCP上傳至FTP。

[實例][Example]
功能:自動上傳檔案至FTP,並刪除過期舊檔。
Test.bat 內容如下:

set PathDest=E:\backup
set FileCount=0

For /f "tokens=1-4 delims=/ " %%a in ('date /t') do (set dt=%%a%%b%%c)

For /f "tokens=1-4 delims=:." %%a in ('echo %time%') do (set tm=%%a%%b)

For /f "tokens=1-4 delims=/ " %%a in ('date /t') do (set dt2=%%a/%%b/%%c)

For /f "tokens=1-4 delims=:." %%a in ('echo %time%') do (set tm2=%%a:%%b)

FOR /f "tokens=1 " %%i IN ('hostname') DO (SET HOST=%%i)

set bkupfilename=Daily_backup_%dt%-%tm%.bak


xcopy  "E:\backup\*"   E:\backup\Daily /D/K/E/Y/C/I/H

del "E:\backup\*" /q

for /R %PathDest% %%A in (*) do set /a FileCount+=1

if %FileCount% GTR 7(^
forfiles /p %PathDest% /s /d -7 /c "cmd /c del /q @path"
)

E:
cd E:\backup\dpump

REM Generate the script. Will overwrite any existing temp.txt
echo open ftpservername> temp.txt
echo user>> temp.txt
echo password>> temp.txt
echo bin>> temp.txt
echo put %bkupfilename%>> temp.txt
echo quit>> temp.txt

REM Launch FTP and pass it the script
ftp -s:temp.txt

REM Clean up.
del temp.txt




[實例][Example]
功能:利用winscp工具軟體上傳檔案至FTP。

test.txt
open ftp://user:password@example.com/
put d:\bak\*.* /
exit

batch command
WinSCP.com /ini=nul /log=ftpupload.log /script=test.txt







2017年11月26日 星期日

☆Linux☆基礎指令--tail / Basic Command

[Linux][CentOS][RHEL][Shell][Script][Command] 


[說明][Explain]
tail : Linux基礎入門指令,檢視文字檔案最後面內容(最後十行)。。

[用法][Usage]
tail [TextFile]

2017年11月22日 星期三

☆Linux☆基礎指令--head / Basic Command

[Linux][CentOS][RHEL][Shell][Script][Command] 


[說明][Explain]
head : Linux基礎入門指令,檢視文字檔案標題內容(前十行)。

[用法][Usage]
head [Text File]

☆Linux☆基礎指令--which / Basic Command

[Linux][CentOS][RHEL][Shell][Script][Command] 


[說明][Explain]
which : Linux基礎入門指令,尋找執行指令的目錄。

[用法][Usage]
which [Program Name]

2017年10月25日 星期三

☆Linux☆基礎指令--chage / Basic Command

[Linux][CentOS][RHEL][Shell][Script][Command] 


[說明][Explain]
chage : 用來管理帳戶登入與密碼管控,如密碼逾期時間以及密碼管控設定。

[用法][Usage]
chage [option]   [UserID]

2017年10月20日 星期五

☆SQLServer/Issue/Replication 更改Server主機名稱的問題/無法連接到伺服器

[SQL Server][Issue][Replication] 


[案例說明][Explain]

SQL Server Version -> 2012

因主機名稱的修改,造成SQL-Server Replication配置時發生錯誤:
訊息:無法連接到伺服器XXXX

Solution1

SELECT @@SERVERNAME ,serverproperty('servername')

出現 舊主機名,新主機名
執行以下動作



sp_DropServer 舊主機名
sp_AddServer 新主機名,Local



Solution2

若出現錯誤
訊息:訊息 15190,層級 16,狀態 1,程序 sp_dropserver

則執行下列動作



exec sp_droplinkedsrvlogin '舊主機名',null
exec sp_dropserver '舊主機名','droplogins'
exec sp_addserver '新主機名' , 'LOCAL' 

若執行動完之後,還是有問題,最後一招就是DB備份後,重新安裝SQL-Server了!!