在MS SQL Server中實現MySQL limit的做法

在MS SQL Server中,雖然有top的用法,但要做到像MySQL那樣,有 limit 1, 100 這種做法,下列是一種方式:

SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY id) as row FROM myTable) a WHERE row > 5 and row <= 10

上列用法,只有在SQL Server 2005以後的版本才能使用。
參考文獻:http://bioankeyang.blogspot.tw/2013/03/ms-sql-servermysql-limit.html

發表於 MSSQL, PHP | 發表迴響

Postfix 常用指令

Postfix常用的指令:

# 列出目前在 Mail Queue 中的信件
mailq

# 刪除所有在 Queue 中的郵件
postsuper -d ALL

# 刪除所有正在 deferred 佇列中的郵件 ( 刪除曾經發送失敗的信 )
postsuper -d ALL deferred

# 刪除所有正在 deferred 佇列中的郵件 ( 可看出哪些信被刪除了 )
find /var/spool/postfix/deferred -type f -exec rm -vf \{\} \;

# 刪掉「三天以前」無法發出的郵件
find /var/spool/postfix/deferred -type f -mtime +3 -exec rm -f \{\} \;

# 列出目前所有無法發出的郵件
find /var/spool/postfix/deferred -type f -exec ls -l –time-style=+%Y-%m-%d_%H:%M:%S {} \;

# 刪除超過 5 天的 "defer" 佇列中的退信紀錄
find /var/spool/postfix/defer -type f -mtime +5 -exec rm -f \{\} \;

預設所有跟 Postfix 相關的郵件都會放在 /var/spool/postfix/ 目錄下,想瞭解 Postfix 是如何管理 Mail Queue 的可以參考 qmgr – Postfix queue manager 的手冊。

以下是每個目錄摘要的說明其用途:

MAIL QUEUES

  • incoming
    從網路寄信進來本機的信。
    或從本地寄送到本地的信。
  • active
    正在準備發送的郵件。
  • defered
    無法傳送的信。會持續重試。
  • corrupt
    無法讀取或毀損的信。
  • hold
    被暫停發送的信。需要手動開啟才會發出。

DELIVERY STATUS REPORTS

  • bounce
    每一位收件者的寄送狀態資訊,說明為什麼被「退信」。
    由 bounce(8) 程式控管
  • defer
    每一位收件者的寄送狀態資訊,說明為什麼被「延遲寄信」。
    由 defer(8) 程式控管
  • trace
    每一位收件者的寄送狀態資訊,說明被 Postfix 用 "sendmail -v" 或 "sendmail -bv" 指令執行過的狀態。
    由 trace(8) 程式控管
發表於 未分類 | 發表迴響

CentOS 6.2 網卡安裝"Error, some other host already uses address"解決辦法

vi /etc/sysconfig/network-scripts/ifup-eth

註解掉下面的内容,然后再執行ifup eth0

  1. if ! /sbin/arping -q -c 2 -w 3 -D -I ${REALDEVICE} ${IPADDR} ; then
  2. echo {1}quot;Error, some other host already uses address ${IPADDR}."
  3. exit 1
  4. fi

改為

  1. #if ! /sbin/arping -q -c 2 -w 3 -D -I ${REALDEVICE} ${IPADDR} ; then
  2. #   echo {1}quot;Error, some other host already uses address ${IPADDR}."
  3. #   exit 1
  4. #fi

 

發表於 Linux | 發表迴響

Linux 常用指令

系統類
指令 說明 範例
setup 系統設定工具
chkconfig 管理系統服務預設開機啟動與否 chkconfig –list | more
top 動態觀察程序的變化 top -d 1
ps 系統的行程表
pstree 列出目前系統上面所有的程序樹的相關性 pstree -Aup
cat /etc/services
service –status-all
網路類
指令 說明 範例
ifconfig 看 IP 和網路介面卡
ifupifdown 啟動 / 關閉網路介面卡 ifup eth0
ping 尋遠端主機
netstat 網路狀態 netstat -tunlpa
route 本機路由表 route -n
traceroute 查連接到某部主機時,每個節點的連線速度
wget 取得網頁 / 檔案 (下載)
發表於 Linux | 發表迴響

iptables

vi /etc/sysconfig/iptables

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter

:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT

-A INPUT -i eth0 -p tcp –dport 20:21 -j ACCEPT #vsftpd
-A INPUT -i eth0 -p tcp –dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp –dport 25 -j ACCEPT #postfix
-A INPUT -i eth0 -p tcp –dport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp –dport 110 -j ACCEPT #postfix
-A INPUT -i eth0 -p tcp –dport 143 -j ACCEPT #postfix
-A INPUT -i eth0 -p tcp –dport 65400:65410 -j ACCEPT #vsftpd

-A INPUT -i eth0 -m state –state RELATED,RELATED -j ACCEPT
-A INPUT -i eth0 -m state –state NEW,INVALID -j DROP

#-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
#-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
#-A INPUT -m state –state NEW -m tcp -p tcp –dport 25 -j ACCEPT
#-A INPUT -m state –state NEW -m tcp -p tcp –dport 110 -j ACCEPT
#-A INPUT -m state –state NEW -m tcp -p tcp –dport 143 -j ACCEPT
#-A INPUT -j REJECT –reject-with icmp-host-prohibited
#-A FORWARD -j REJECT –reject-with icmp-host-prohibited

COMMIT

chkconfig –list |grep iptables

iptables        0:關閉  1:關閉  2:開啟  3:開啟  4:開啟  5:開啟 6:關閉

/etc/rc.d/init.d/iptables start           //啟動 iptables 服務
/etc/rc.d/init.d/iptables stop            //停止 iptables 服務
/etc/rc.d/init.d/iptables restart         //重新啟動 iptables 服務
/etc/rc.d/init.d/iptables status          //查看目前 iptables 規則
/etc/rc.d/init.d/iptables save            //將目前規則存入 iptables 設定檔

 

發表於 Linux | 發表迴響

CentOS 6.2 Mail建置流程 Postfix+dovecot

關閉SELinux
vi /etc/sysconfig/selinux

SELINUX=enforcing
改成
SELINUX=disabled

設定yum
vi /etc/yum.repos.d/CentOS-Base.repo

利用vi搜尋/取代功能
:%s/mirror.centos.org\/centos/ftp.isu.edu.tw\/pub\/Linux\/CentOS/g
:%s/mirrorlist/#mirrorlist/g
:%s/#baseurl/baseurl/g

設定完後,執行:
yum –y update

立即更新系統套件
完成後請重新開機
shutdown –r now

網路校時
yum -y install ntp 安裝NTP
/usr/sbin/ntpdate tock.stdtime.gov.tw 執行網路校時
/usr/sbin/hwclock -w 將時間寫入BIOS

vi /etc/crontab
01 5 * * * root /usr/sbin/ntpdate tock.stdtime.gov.tw && /sbin/hwclock –w  排程自動校時每天5:01校時

安裝Postfix

  1. 移除 sendmail 安裝 postfix
    /etc/init.d/sendmail stop 停用sendmail
    rpm -e sendmail 移除sendmail
    yum install postfix 安裝postfix
    service postfix start 啟動postfix服務
  2. postfix 設定
    設定 postfix 可接收外部連線
    vi /etc/postfix/main.cf
    inet_interfaces = all 這一行拿掉#號註解
    inet_interfaces = localhost 這一行加上#號註解
    mydomain = mydomain.com
    myhostname = mail.mydomain.com
    service postfix restart 重新啟動postfix服務
  3. 測試連線
    [root@localhost ~]#  telnet 192.168.1.1 25
    Trying 192.168.1.1…
    Connected to 192.168.1.1.
    Escape character is ‘^]’.
    220 pororo.no-ip.org ESMTP Postfix
    quit
  4. 設定 postfix SMTP 驗證
    安裝 cyrus-sasl-md5  cyrus-sasl-plain  cyrus-sasl 套件
    yum install cyrus-sasl-md5 cyrus-sasl-plain cyrus-sasl
    vi /etc/postfix/main.cf 加入下面設定
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
    broken_sasl_auth_clients = yes
    smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination 

    chkconfig saslauthd on 設定開機啟動
    service saslauthd restart 啟動saslauthd服務

    利用 telnet 測式 smtp 認證功能是否生效(要有出現LOGIN PLAIN才算成功)
    [root@localhost ~]# telnet 192.168.1.1 25
    Trying 192.168.1.1…
    Connected to 192.168.1.1.
    Escape character is ‘^]’.
    220 mail.mydomain.com ESMTP Postfix
    ehlo localhost
    250-mail.mydomain.com
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-AUTH PLAIN LOGIN
    250-AUTH=PLAIN LOGIN
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250 DSN
    quit

安裝 dovecot pop3 服務
yum install dovecot #安裝dovecot
vi /etc/dovecot/dovecot.conf
protocols = imap imaps pop3 pop3s 將#號註解拿掉
disable_plaintext_auth = no 確認是否有
mail_location = mbox:~/mail:INBOX=/var/mail/%u 確認是否有
設定啟動 dovecot 服務,並設定開機自動啟動
chkconfig dovecot on
service dovecot start

郵件log查詢
vi /var/log/maillog

輸出郵件log
grep 421 /var/log/maillog > mail_error

發表於 Server | 發表迴響

Test a POP server by using telnet

telnet: > telnet localhost pop3
telnet: Trying 192.168.1.X
telnet: Connected to pop.example.com.
telnet: Escape character is ‘^]’.
server: +OK InterMail POP3 server ready.
client: USER MyUsername
server: +OK please send PASS command
client: PASS MyPassword
server: +OK MyUsername is welcome here
client: LIST
server: +OK 1 messages
server: 1 1801
server: .
client: RETR 1
server: +OK 1801 octets
server: Return-Path: sender@example.com
server: Received: from client.example.com ([192.0.2.1])
server:        by mx1.example.com with ESMTP
server:        id <20040120203404.CCCC18555.mx1.example.com@client.example.com>
server:        for <recipient@example.com>; Tue, 20 Jan 2004 22:34:24 +0200
server: From: sender@example.com
server: Subject: Test message
server: To: recipient@example.com
server: Message-Id: <20040120203404.CCCC18555.mx1.example.com@client.example.com>
server:
server: This is a test message.
server: .
client: DELE 1
server: +OK
client: quit
server: +OK MyUsername InterMail POP3 server signing off.

發表於 Linux | 發表迴響

新增與刪除使用者

useradd USERNAME       增加一名為USERNAME的帳號
userdel USERNAME        刪除USERNAME這個帳號

[root@localhost ~]# useradd power

"useradd" 跟 "userdel" 這兩個指令都只有 root 可以使用

passwd [USERNAME]    更改USERNAME的密碼,若無參數,則改自己的密碼。

[root@localhost ~]# passwd power
Changing password for user power
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully

finger USERNAME[@HOSTNAME]    查詢使用者資料
[root@localhost ~]# finger power  

chfn [USERNAME]        更動使用者USERNAME的資料,若無參數,則改自己的資料。

 

發表於 Linux | 發表迴響

網卡設定

#vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0 //網卡的代號

BOOTPROTO=no //是否使用 dhcp

HWADDR=00:1e:8c:1e:64:4f //網卡卡號(MAC)

IPADDR=192.168.1.70 //IP位址

NETMASK=255.255.255.0 //網路遮罩

ONBOOT=yes //是否預設啟動此介面

GATEWAY=192.168.1.1 //通訊閘

NM_CONTROLLED=yes //額外的網管軟體

DNS1=168.95.1.1

DNS2=8.8.8.8

檢視網卡狀態
#ifconfig

啟動與關閉網卡
#ifup eth0
#ifdown eth0

 

發表於 Linux | 1 則迴響

CentOS安裝php-mssql

安裝 EPEL 後,幾乎所有套件都可以直接從 yum 安裝

Step 1:
# wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

Step 2:
# rpm -ivh epel-release-6-8.noarch.rpm //安裝取得的rpm檔案

Step 3:
# yum update    //更新yum的資源庫

Step 4:
PHP 連 MSSQL要裝三個套件
unixODBC
php-mssql
freetds
執行 yum insatll php-mssql 他會依套件相依性,會自動幫你安裝其他兩個!

# yum install php-mssql //安裝php-mssql

Step 5:
# service httpd restart    //重啟apache伺服器

常見問題:
SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9) 提示伺服器不存在
查看host, port是否有誤?是否是被selinux阻擋?
如果是後面一個原因,暫時的處理辦法就是先關掉,關掉方法如下:
打開 /etc/selinux/config ,將SELINUX設置為disabled,然後重新啟動,再試試看,基本就沒什麼問題了。

vi /etc/selinux/config
SELINUX=disabled

參考文件
http://www.pigo.idv.tw/archives/1336
http://blog.csdn.net/chenjiebin/article/details/7278304

資料庫連線測試:使用 PDO
try {
$hostname = "192.168.1.100″;
$port = "1433″;
$dbname = "PG";
$username = "user";
$pw = "123456″;
$dbh = new PDO ("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
} catch (PDOException $e) {
echo "DB Error:" . $e->getMessage() . "\n";
exit;
}

$stmt = $dbh->prepare("SELECT * FROM users");
$stmt->execute();
while ($row = $stmt->fetch())
{
print_r($row);
}

解決寫入簡體中文出現亂碼:

  1. 把欄位的屬性設定成nvarchar、ntext。
  2. 寫入的內容前加上’N
    例 INSERT INTO MyTable (content) VALUES ( N‘簡體或亂碼的內容’ )
發表於 Linux | 發表迴響