2012年7月19日 星期四

用DBCA建database後

DBCA重建資料庫後, 一切都後順利, 但是重新開機後, 同事反應, 出現
ORA-12505, TNS: listener does no currently know of SID given in connect descriptor
ORA-12514: TNS: 監聽器目前不知道連線描述區中要求的服務
Why ? 已經有下dbstart了, lsnrctl 也有 start了, 為何還會出現錯誤.
解決方法如下:
每次Oracle開機,
$> sqlplus / as sysdba
SQL> startup;
即可, 但是每次都要下, 很麻煩; 另一個方法, 修改 oratab

vi /etc/oratab

orcl:/oracle/u01/app/oracle/product/10.2.0/db_1:N
改為
orcl:/oracle/u01/app/oracle/product/10.2.0/db_1:Y

下次dbstart 就會自動啟動了.

2012年7月12日 星期四

TS-209掛了,重新安裝IPKG


我的TS-209 竟然掛了, 找了新的硬碟重新安裝, 步驟如下:
使用 QFinder 進行系統安裝, 這段很簡單就不多說了(請上官網找到最新的img檔)

OS裝完後, 再來就是ipkg了, 主要參考自網頁官網論壇

作了一個big-disk的目錄(請先檢查你的目錄是 HDA_DATA or MD0_DATA,自己替換)
mkdir -p /share/HDA_DATA/big-disk/opt
mkdir /share/HDA_DATA/big-disk/ipkglib
cd /; ln -sf /share/HDA_DATA/big-disk/ipkglib /usr/lib/ipkg
rm -rf /opt
cd /; ln -sf /share/HDA_DATA/big-disk/opt /opt

cd /share/HDA_DATA/big-disk

取得ipk
wget http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/unstable/ipkg-opt_0.99.163-10_arm.ipk

tar -xOvzf ipkg-opt_*_arm.ipk ./data.tar.gz | tar -C / -xzvf -

vi /opt/etc/ipkg.conf

加入這行
src mssii http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/stable

進行ipkg更新
/opt/bin/ipkg update
應該會看到 Successfully terminated.
就是安裝成功了.

測試ipkg 安裝軟體, 安裝mc(一個好用的文字界面檔案總管, 另人懷念的DOS時代)
步驟如下:
cd /share/HDA_DATA/big-disk
/opt/bin/ipkg update
/opt/bin/ipkg install slang
/opt/bin/ipkg install mc --tmp-dir=/share/HDA_DATA/

/opt/bin/mc


每次開機重新ln
mount /dev/mtdblock5 -t ext2 /tmp/config
cd /tmp/config
vi autorun.sh
加入
rm -rf /opt
ln -sf /share/HDA_DATA/big-disk/opt /opt
結束
chmod 755 autorun.sh
cd /
umount /dev/mtdblock5

重開機(#reboot)

我還加了PATH路徑
方便呼叫ipkg
mkdir /mnt/config
mount -t ext2 /dev/mtdblock5 /mnt/config
cd /mnt/config
vi autorun.sh
在尾端加入
echo "export PATH=/opt/bin:$PATH" >> /etc/profile

cd /
umount /mnt/config

如果移除ipkg
rm -rf /usr/lib/ipkg
rm -rf /share/HDA_DATA/big-disk
rm -rf /opt

另外, 使用ipkg安裝SVN
請確定 /opt ln 到 /share/HDA_DATA/big-disk/opt
指令: ln -sf /share/HDA_DATA/big-disk/opt /opt

ipkg install svn

安裝完成後, 要讓SVN開機自動執行
mount /dev/mtdblock5 -t ext2 /tmp/config
cd /tmp/config
echo "/opt/bin/svnserve -d --listen-port=3690" >> autorun.sh
cd /
umount /dev/mtdblock5
最後的結果, 擷圖請參考

noyta: http://www.kenming.idv.tw/a_u_qnap_ts_209_pro_ac_em_subversion_ser
網頁上的指令有錯誤(少了一個'-'), 請照上面指令執行即可.



Oracle 的character set

請一位到職不到一年的同事安裝 OracleDB, 我後悔了, 半年後還在收拾....
因為字元集的錯誤, 匯入了原本 dmp 檔, 不僅匯入過程錯誤, 也造成了 database 內出現了亂碼的 table , 連要刪除tablespace 都刪不掉(constraint索引, 限制條件的相依 ), 更不用說刪除table...最後忍痛把整個database刪除, 重新用DBCA建database, 過程的記錄如下, 如果有相同需求的人, 歡迎一起討論.

查看目前的字集設定
方法1)
SQL>SELECT parameter, value FROM v$nls_parameters WHERE parameter LIKE '%CHARACTERSET';


方法2)
SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET' ;


有很多方法可以看編碼, google 一下就有了, 就不多說了.




我的想法是先把編碼改好, 再匯入dmp檔, 看有沒有得救.


所以主要是NLS_CHARACTERSET的值, 我要改成ZHT16MSWIN950, 語法如下:


#sqlplus / as sysdba
進入splplus 後

shutdown immediate;
startup mount;


alter database open;
alter database character set internal_use ZHT16MSWIN950;


shutdown immediate;
startup;

done;完成了.
再用上面的語法檢查一次.

PS: 其實在client有一個方法, 可以不用動到Server端, 但是你必須要每個client都是設定環境變數, 不是很理想.

但是如上面提到, 我的OracleDB還是一樣, 無法刪除亂碼的table, 所以後來還是整個database刪除, 再重建, OracleDB重建資料庫很麻煩, 我最後還是用UI界面處理, 下一篇再Post上來了.

在Client端改變連接OracleDB的編碼設定

如果Client端的編碼不正確, 取到 OracleDB的資料會有亂碼, 最快的方法是設定client的環境變數.
NLS_LANG
ex:
我的設定是 AMERICAN_AMERICA.ZHT16MSWIN950
>set NLS_LANG=AMERICAN_AMERICA.ZHT16MSWIN950
檢查一下, 
Window > echo %NLS_LANG%
Linux > echo $NLS_LANG
再連線就會用新的編碼了.

QNAP TS-209 的設定值在哪?


TS-209 的設定檔 可由 /sbin/getcfg 取得
ex:
getcfg FTP Enable
True
-----
回 傳  True, 意思是FTP是Enable的
設定檔在哪呢? 經過一翻尋找 , /etc/config/uLinux.conf 內
/etc/defautlt_config/uLinux.conf 是出廠預設值

過了幾個小時...終於找到了proftpd.conf
/mnt/HDA_ROOT/.config/proftpd.conf

C#好用的JSON轉換

試過了很多JSON轉換的組件, 目前為止這個最好用-Jayrock

給出一個sample, 請參考:


using Jayrock.Json;
using Jayrock.Json.Conversion;

// 準備回應的Hashtable
        Hashtable response = new Hashtable();
// ex:
response.Add("deleteSuccess", deleteSuccess);
response.Add("deleteFeedback", deleteFeedback);
// ex:
response.Add("results", items2);
        response.Add("total", items2.Count);
        response.Add("write_permission", linkId.Equals(this.userName));
//如果要回傳Json, 直接以 JsonConver.ExportToString 即可輸出
return JsonConvert.ExportToString(response);

2012年7月11日 星期三

SVN的備份及還原

  話說TS-209掛了後, 把硬碟資料複製出來( 用 linunx reader), 然後在這一篇文章中重新安裝SVN後, 直接把目錄再cp 回去, 似乎可以用, win7 下用 Tortoise SVN也可以正常.
  但CCJ說用Dump的方法較保險, 於是用了下列的方法:

Dump
svnadmin dump --help 
備份語法:
svnadmin dump /share/svn/xxx > /share/Public/yyy.dump
xxx表示你的 repository 的路徑 , yyy 是dump出來的檔案, 我是用 yyy.dump

再建一個repository .
svnadmin create ~/nyrepo

倒回去
svnadmin load /share/svn/nyrepo < yyy.dump


再用TortoiseSVN測試OK.

CCJ說他都是用Http協定... 可是以我目前對HTTP的了解,  HTTP協定肯定是不會比SVN協定快的.

先這樣了.


TS-209安裝SVN

 因為 TS-209掛了, 重新安裝 SVN , 怕忘記, 記下來.
在TS-209上安裝SVN步驟如下:
1.確定TS-209有裝 ipkg( ipkg 是一種輕量 (lightweight)級的套件管理系統),
    ipkg 的安裝方法請參考官網論壇, 或是我自己的安裝過程
2.用ipkg安裝svn
    ipkg install svn

安裝完成後, 應該如圖所示


啟動)
/opt/bin/svnserve -d –listen-port=3690

停止SVN)
   ps auxww | fgrep svnserve 

Then the number in the second column is the process id, then I can do:
   kill <process id> (without the <> brackets)

and in the worst case (e.g. svnserve won't stop after many minutes):
   kill -9 <process id>


Create Repository)
$ svnadmin create ~/my-repository

我用的指令
svnadmin create /share/svn/repos1

存取權限)

[/share/svnsource:/]
@developers = rw


[general]
password-db = /share/svnsource/conf/passwd
#每一個 repository 的 realm 均指定為一個共同的字串名稱,即代表共用同一個 namespace。
realm = global_repository
# Specific access rules for specific locations
authz-db = /share/svnsource/conf/authz

OK了