1.檢查pg_xlog/archive_status目錄下的.ready檔案是否有很多個,如果有很多,表示該目錄的寫性能不好。
unit?=個數
#./check_postgres_archive_ready -H 127.0.0.1 -p 5432 -db test -u postgres
2.當table的age到達一定的值後,db需要適時的做vacuum freeze,否則會有資料消失的問題。
unit?=百分比
#./check_postgres_autovac_freeze -H 127.0.0.1 -p 5432 -db test -u postgres --include=test
3.監測最大連線數(整個資料庫instance)。
unit?=個數
#./check_postgres_backends -H 127.0.0.1 -p 5432 -db test -u postgres --output=simple
4.監測Table跟Index的膨脹量(Checks the amount of bloat in tables and indexes.)
db膨脹量與autovacuum_vacuum_scale_factor有關,預設是0.2,所以一般超過20%就要告警,利用vacuum full來回收。
perflimit -> 找前幾名
unit?=容量(bytes, kilobytes, megabytes, gigabytes, terabytes, exabytes, petabytes, and zettabytes.)
#./check_postgres_bloat -H 127.0.0.1 -p 5432 -db test -u postgres --perflimit=5
5.檢查最後一次checkpoint發生到現在經過了多少時間。
unit?=時間,秒
#./check_postgres_checkpoint --datadir=/usr/local/pgsql/data -w 10s
6.監測transaction commit ratio。反過來說就是監測rollback的百分比
unit?=百分比
./check_postgres_commitratio -H 127.0.0.1 -p 5444 -db edb -u enterprisedb --include=edb --output=simple
7.資料庫連線狀態
unit?=1(available) or 0(unavailable)
#./check_postgres_connection -H 127.0.0.1 -p 5432 -db test -u postgres --output=simple
8.自訂SQL監測 (有一定的限制,看場合使用)
最多只能有兩個return值。一個要是result另一個隨便
#./check_postgres_custom_query -H 127.0.0.1 -p 5432 -db test -u postgres --query="select relname AS result, relpages AS pages from pg_class where relpages>10" --valtype=string -w 6
9.資料庫容量監測
unit?=容量(bytes, kilobytes, megabytes, gigabytes, terabytes, exabytes, petabytes, and zettabytes.)
#./check_postgres_database_size -H 127.0.0.1 -p 5432 -db test -u postgres --include=test -w 10M -c 20M --output=simple
10.Buffer命中率 (blks_hit/(blks_hit+blks_read)) 從 pg_stat_database 這個統計view查的到
unit?=百分比
#./check_postgres_hitratio -H 127.0.0.1 -p 5444 -db edb -u enterprisedb --include=edb --output=simple
11.Last vacuum, analyze, autovacuum, autoanalyze到現在的時間間隔
unit?=table=時間,秒
#./check_postgres_last_analyze -H 127.0.0.1 -p 5444 -db edb -u enterprised --output=simple
#./check_postgres_last_autoanalyze -H 127.0.0.1 -p 5444 -db edb -u enterprisedb --output=simple
#./check_postgres_last_vacuum -H 127.0.0.1 -p 5444 -db edb -u enterprisedb --output=simple
#./check_postgres_last_autovacuum -H 127.0.0.1 -p 5444 -db edb -u enterprisedb --output=simple
12.prepared transaction監測(前提是postgresql.conf裡面的max_prepared_transactions有設定)
unit?=個數 ->有多少個還沒完成的tx(未commit的量)
#./check_postgres_prepared_txns -H 127.0.0.1 -p 5432 -db test -u postgres --output=simple
13.是否發生slowquery
unit?=時間,秒
#./check_postgres_query_time -H 127.0.0.1 -p 5432 -db test -u postgres --include=test -w 300s --output=simple
14.監控tx的Idle時間
unit?=時間,秒
#./check_postgres_txn_idle -H 127.0.0.1 -p 5432 -db test -u postgres -w 60s
14.監控tx的最長執行時間 (8.3以後才能使用)
unit?=時間,秒
#./check_postgres_txn_time -H 127.0.0.1 -p 5432 -db test -u postgres -w 60s
[PostgreSQL/PPAS] Ora2Pg - Migrates Oracle Databases to PostgreSQL
1. 下載所需檔案
a.Oracle:下載OCI 的base及sdk(這裡)
b.Perl:下載DBD:Oracle(這裡)
c.Ora2Pg:下載ora2pg source (這裡)
2. 安裝OCI
# rpm -Uvh oracle-instantclient12.1-basic-12.1.0.1.0-1.x86_64.rpm
# rpm -Uvh oracle-instantclient12.1-devel-12.1.0.1.0-1.x86_64.rpm
# vi /etc/ld.so.conf.d/oci.conf
============oci.conf start================
/usr/lib/oracle/12.1/client64/lib
============oci.conf EOF================
# ldconfig -v
3. 安裝Perl DBD:Oracle模組
# tar -zxvf DBD-Oracle-1.68.tar.gz
# cd DBD-Oracle-1.6
# export ORACLE_HOME=/usr/lib/oracle/12.1/client64
# export PATH=$PATH:$ORACLE_HOME/bin
# export LD_LIBRARY_PATH=$ORACLE_HOME/lib
# perl Makefile.PL -V 12.1.0
# make install
4. 安裝Ora2Pg
# tar -jxvf ora2pg-12.0.tar.bz2
# cd ora2pg-12.0
# perl Makefile.PL
# make && make install
5.定義轉換時所需的workspace
./create_workspace.sh
6.組態資料庫連線
$ sudo vim mig_config/ora2pg.conf
# modify the following lines
ORACLE_HOME /home/cenoq/app/cenoq/product/11.2.0/client_1
ORACLE_DSN dbi:Oracle:host=172.16.1.129;sid=db1;port=1521
ORACLE_USER csapi
ORACLE_PWD csapi
ALLOW CS_*
7.進行資料庫轉出
$ ora2pg -t TABLE -o table.sql -b mig_table/ -c mig_config/ora2pg.conf -l exp_table.log
$ ora2pg -t COPY -o data.sql -b mig_data/ -c mig_config/ora2pg.conf -l exp_table.log
$ ora2pg -t SEQUENCE -o sequence.sql -b mig_sequence/ -c mig_config/ora2pg.conf -l exp_table.log
8.檢視轉出結果
$ vim exp_xxx.log
$ vim table.sql
$ vim data.sql
$ vim sequence.sql
9.進行資料庫匯入
$ psql -U csapi -h localhost -p 5555 -d csapi -f table.sql
$ psql -U csapi -h localhost -p 5555 -d csapi -f data.sql
$ psql -U csapi -h localhost -p 5555 -d csapi -f sequence.sql
10.檢視匯入結果
$ psql -U csapi -h localhost -p 5555 -d csapi
csapi# select count(1) from cs_*;
a.Oracle:下載OCI 的base及sdk(這裡)
b.Perl:下載DBD:Oracle(這裡)
c.Ora2Pg:下載ora2pg source (這裡)
2. 安裝OCI
# rpm -Uvh oracle-instantclient12.1-basic-12.1.0.1.0-1.x86_64.rpm
# rpm -Uvh oracle-instantclient12.1-devel-12.1.0.1.0-1.x86_64.rpm
# vi /etc/ld.so.conf.d/oci.conf
============oci.conf start================
/usr/lib/oracle/12.1/client64/lib
============oci.conf EOF================
# ldconfig -v
3. 安裝Perl DBD:Oracle模組
# tar -zxvf DBD-Oracle-1.68.tar.gz
# cd DBD-Oracle-1.6
# export ORACLE_HOME=/usr/lib/oracle/12.1/client64
# export PATH=$PATH:$ORACLE_HOME/bin
# export LD_LIBRARY_PATH=$ORACLE_HOME/lib
# perl Makefile.PL -V 12.1.0
# make install
4. 安裝Ora2Pg
# tar -jxvf ora2pg-12.0.tar.bz2
# cd ora2pg-12.0
# perl Makefile.PL
# make && make install
5.定義轉換時所需的workspace
./create_workspace.sh
6.組態資料庫連線
$ sudo vim mig_config/ora2pg.conf
# modify the following lines
ORACLE_HOME /home/cenoq/app/cenoq/product/11.2.0/client_1
ORACLE_DSN dbi:Oracle:host=172.16.1.129;sid=db1;port=1521
ORACLE_USER csapi
ORACLE_PWD csapi
ALLOW CS_*
7.進行資料庫轉出
$ ora2pg -t TABLE -o table.sql -b mig_table/ -c mig_config/ora2pg.conf -l exp_table.log
$ ora2pg -t COPY -o data.sql -b mig_data/ -c mig_config/ora2pg.conf -l exp_table.log
$ ora2pg -t SEQUENCE -o sequence.sql -b mig_sequence/ -c mig_config/ora2pg.conf -l exp_table.log
8.檢視轉出結果
$ vim exp_xxx.log
$ vim table.sql
$ vim data.sql
$ vim sequence.sql
9.進行資料庫匯入
$ psql -U csapi -h localhost -p 5555 -d csapi -f table.sql
$ psql -U csapi -h localhost -p 5555 -d csapi -f data.sql
$ psql -U csapi -h localhost -p 5555 -d csapi -f sequence.sql
10.檢視匯入結果
$ psql -U csapi -h localhost -p 5555 -d csapi
csapi# select count(1) from cs_*;
[PostgreSQL/PPAS] 利用 pgBadger 來分析 Postgres log file
1.下載pgBadger,並解壓
# tar -zxvf pgbadger-3.6.tar.gz
2.安裝(optional)
# cd pgbadger-3.6
# perl Makefile.PL
# make && make install
3.執行
./pgbadger --prefix 'postgresql.conf裡面log_line_prefix的值 ' /path/to/your/pglog/*.log -o out.html
4.用browser看結果囉!!
# tar -zxvf pgbadger-3.6.tar.gz
2.安裝(optional)
# cd pgbadger-3.6
# perl Makefile.PL
# make && make install
3.執行
./pgbadger --prefix 'postgresql.conf裡面log_line_prefix的值 ' /path/to/your/pglog/*.log -o out.html
4.用browser看結果囉!!
[PostgreSQL/PPAS] Barman - Backup and Recovery Manager
1.Barman:
Braman (Backup & Recovery Manager) - 是PostgreSQL資料庫伺服器非常方便的備份與還原工具,它可以遠端執行備份、集中管理備份及允許由一個備份還原資料庫。
它的原理是利用PostgreSQL的PITR來達到的,對PITR有興趣的"捧油",可以到這裡去看看喔!!
2.環境說明:
172.16.1.89 - PostgreSQL Backup Server
172.16.1.90 - Zabbix Server
172.16.1.91 - PostgreSQL 8.2
172.16.1.92 - PostgreSQL 8.3
172.16.1.93 - PostgreSQL 8.4
172.16.1.94 - PostgreSQL 9.0
172.16.1.95 - PostgreSQL 9.1
172.16.1.96 - EDB PPAS 9.2
3.安裝:
先到Barman的官網 http://www.pgbarman.org 下載安裝包到 PostgreSQL Backup Server。
3.1 解壓縮。
# tar -zxvf barman-1.2.3.tar.gz
3.1 cd到 barman-1.2.3,開始build and install
# cd barman-1.2.3
# ./setup.py build
# ./setup.py install
3.3 由於barman是利用python來實作的,所以它有相依的python lib如下:
a). python-argh b). python-dateutil c). python-psycopg2
安裝步驟如下:
# wget http://mirror-fpt-telecom.fpt.net/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm (optional) 選一個
# yum install epel-release-6-8.noarch.rpm (optional) 選一個
# yum repolist
# yum -y install python-pip
# yum -y install python-argh python-dateutil python-psycopg2
# pip install argcomplete
Braman (Backup & Recovery Manager) - 是PostgreSQL資料庫伺服器非常方便的備份與還原工具,它可以遠端執行備份、集中管理備份及允許由一個備份還原資料庫。
它的原理是利用PostgreSQL的PITR來達到的,對PITR有興趣的"捧油",可以到這裡去看看喔!!
2.環境說明:
172.16.1.89 - PostgreSQL Backup Server
172.16.1.90 - Zabbix Server
172.16.1.91 - PostgreSQL 8.2
172.16.1.92 - PostgreSQL 8.3
172.16.1.93 - PostgreSQL 8.4
172.16.1.94 - PostgreSQL 9.0
172.16.1.95 - PostgreSQL 9.1
172.16.1.96 - EDB PPAS 9.2
3.安裝:
先到Barman的官網 http://www.pgbarman.org 下載安裝包到 PostgreSQL Backup Server。
3.1 解壓縮。
# tar -zxvf barman-1.2.3.tar.gz
3.1 cd到 barman-1.2.3,開始build and install
# cd barman-1.2.3
# ./setup.py build
# ./setup.py install
3.3 由於barman是利用python來實作的,所以它有相依的python lib如下:
a). python-argh b). python-dateutil c). python-psycopg2
安裝步驟如下:
# wget http://mirror-fpt-telecom.fpt.net/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm (optional) 選一個
# yum install epel-release-6-8.noarch.rpm (optional) 選一個
# yum repolist
# yum -y install python-pip
# yum -y install python-argh python-dateutil python-psycopg2
# pip install argcomplete
[JBoss] JBoss7 & JEAP6 如何安裝EDB 的JDBC Driver,並設定DATASOURCE
1. 先下載好JDBC Driver JAR。
EDB-PPAS : edb-jdbc16.jar or edb-jdbc14.jar (看你的JDK ver囉!!)
2. 在JBOSS_HOME/modules/下建立com/edb資料夾
這裡要注意,如果你是JBoss7,就是在JBOSS_HOME/modules下建立
如果是JEAP6就是在JBOSS_HOME/modules/system/layers/base/建立囉
一般來說裡面都有com資料夾了,只需再加上edb folder (如下圖)
EDB-PPAS : edb-jdbc16.jar or edb-jdbc14.jar (看你的JDK ver囉!!)
2. 在JBOSS_HOME/modules/下建立com/edb資料夾
這裡要注意,如果你是JBoss7,就是在JBOSS_HOME/modules下建立
如果是JEAP6就是在JBOSS_HOME/modules/system/layers/base/建立囉
一般來說裡面都有com資料夾了,只需再加上edb folder (如下圖)
3. 複製JDBC Driver並建立Module檔。
先將EDB JDBC Jar COPY進去,接著建立一個module.xml檔,內容如下:
[PostgreSQL][Slony]如何在Slony環境下實現Partitionting
Slony-I的官方文件內有寫到:
5.3 Partitioning Support:
Slony-I does not directly provide support for the PostgreSQL methodology of partitioning via inheritance, but it does not, by the same token, prevent the Gentle User from using that sort of replication scheme, and then replicating the underlying tables.
那如何完成slony的自動化Table Partition就是本文的課題啦~
1. 環境準備
a). 準備兩個Linux VM(這裡用CentOS),ip各為192.168.38.25~26。
b). 先利用這章建立slony的環境,確保slony有正常運作。
c). 安裝PLSH extension (不知怎裝看這邊喔!!)。
2. 步驟
a). Create Database 在slony的兩個節點。
SQL> CREATE DATABASE demo WITH ENCODING='UTF8' OWNER=slony;
b). 建立所需Function
5.3 Partitioning Support:
Slony-I does not directly provide support for the PostgreSQL methodology of partitioning via inheritance, but it does not, by the same token, prevent the Gentle User from using that sort of replication scheme, and then replicating the underlying tables.
那如何完成slony的自動化Table Partition就是本文的課題啦~
1. 環境準備
a). 準備兩個Linux VM(這裡用CentOS),ip各為192.168.38.25~26。
b). 先利用這章建立slony的環境,確保slony有正常運作。
c). 安裝PLSH extension (不知怎裝看這邊喔!!)。
2. 步驟
a). Create Database 在slony的兩個節點。
SQL> CREATE DATABASE demo WITH ENCODING='UTF8' OWNER=slony;
b). 建立所需Function
[PPAS] Migration Studio 8.4 by EnterpriseDB - How to ?
PPAS 9.1以後Migration ToolKIt 就只有command line下的runMTK.sh,沒有像8.4時預設有一個Migration Studio可以使用,其實EnterpriseDB有Open Migration Studio的Source Code在(按我下載)。這裡記錄下如何在CentOS 6.x下讓它動起來。
1. 安裝ANT (預設應該有OpenJDK,沒有請Google囉)
# yum install ant
2. copy相關jdbc jar file到jdk的jre/lib下,需要oracle migrate到EDB PPAS就需要oracle jdbc jar file,其它的database請自行複製相關JDBC DRIVER。
# cp ojdbc14.jar /usr/lib/jvm/jre/lib/ext
3. Download Source Code:
到這個網址http://www.enterprisedb.com/downloads/component-source-code 下載Migration Studio 8.4 by EnterpriseDB,你會得到一個MigrationStudio-84410.tar.bz2壓縮檔。
4. 解壓該壓縮檔:
# tar -jxvf MigrationStudio-84410.tar.bz2
5. 修改build.xml中的 edb-debugger相關
# cd MigrationStudio-84410
# vi build.xml ,刪除以下幾行(如不知該如何修改,請點我)
1. 安裝ANT (預設應該有OpenJDK,沒有請Google囉)
# yum install ant
2. copy相關jdbc jar file到jdk的jre/lib下,需要oracle migrate到EDB PPAS就需要oracle jdbc jar file,其它的database請自行複製相關JDBC DRIVER。
# cp ojdbc14.jar /usr/lib/jvm/jre/lib/ext
3. Download Source Code:
到這個網址http://www.enterprisedb.com/downloads/component-source-code 下載Migration Studio 8.4 by EnterpriseDB,你會得到一個MigrationStudio-84410.tar.bz2壓縮檔。
4. 解壓該壓縮檔:
# tar -jxvf MigrationStudio-84410.tar.bz2
5. 修改build.xml中的 edb-debugger相關
# cd MigrationStudio-84410
# vi build.xml ,刪除以下幾行(如不知該如何修改,請點我)
[RHCS] 以CentOS 6 實作 HA
1.安裝環境:
這篇文章主要介紹EnterpriseDB的cluster架構,整個RHCS由三台Server組成,分別有兩台EDB資料庫及一台iSCSI Server,在這個架構下任一台EDB資料庫crash都會由另一台接手,以確保資料庫可以不間斷的運行。
*iSCSI在前一篇文有介紹過了,這裡列出指令,但不多加贅述。
*EDB的安裝與設定也請自行處理,這裡主要針對RHCS。
這篇文章主要介紹EnterpriseDB的cluster架構,整個RHCS由三台Server組成,分別有兩台EDB資料庫及一台iSCSI Server,在這個架構下任一台EDB資料庫crash都會由另一台接手,以確保資料庫可以不間斷的運行。
2. Install Preparation
三台CentOS 6.3的VM(一台當iSCSI主機,另兩台為Cluster的DB),各組態如下所示。*iSCSI在前一篇文有介紹過了,這裡列出指令,但不多加贅述。
*EDB的安裝與設定也請自行處理,這裡主要針對RHCS。
[iSCSI] 建立iSCSI target / initiator on CentOS 6.x
1. 先準備兩台CentOS 6.x,vm配置如下:
- iSCSIServer (192.168.38.10) - CentOS 6.4
- HA1 (192.168.38.11) - CentOS 6.4
- yum install scsi-target-utils -y
- 安裝後可參考下列的組態跟可執行程式
/usr/sbin/tgt-admin:線上查詢、刪除 target 等功能的設定工具;
/usr/sbin/tgt-setup-lun:建立 target 以及設定分享的磁碟與可使用的用戶端等工具軟體。
/usr/sbin/tgtadm:手動直接管理的管理員工具 (可使用設定檔取代);
/usr/sbin/tgtd:主要提供 iSCSI target 服務的主程式;
/usr/sbin/tgtimg:建置預計分享的映像檔裝置的工具 (以映像檔模擬磁碟);
(參考鳥哥的Linux 私房菜)
[PPAS] 清除xDB所有設定
EnterpriseDB - xDB架構上是有一台Publication Server及一台Subscription Server組成,其背後有一台Database在維護這些資料,常有時會有設定錯後,導致再也無法加DB or Publication / Subscription,然後出現
Publication control schema does not exist on target database
這時我們就得清除所有的xDB metadata才能再讓xDB重振雄風 (誤...
以下記錄清除的步驟:
1.Stop Publication / Subscription Server
-#/etc/init.d/edb-xdbpubserver stop
-#/etc/init.d/edb-xdbsubserver stop
2.確認publication 的 metadata database objects
-for Oracle
SQL> CONNECT pubuser/password
SQL> SELECT table_name FROM user_tables;
SQL> SELECT sequence_name FROM user_sequences;
SQL> SELECT DISTINCT name FROM user_source WHERE type = 'PACKAGE';
SQL> SELECT trigger_name FROM user_triggers;
-synchronization
會多出RRST_開頭的Table
會多出RRPI_, RRPU_及RRPD_開頭的Trigger, for每個repl的table.
-snapshot
就沒有RRST_開頭的Table及沒有任何Trigger
-for EDB
會產生_edb_replicator_pub這個schema。如下圖
Publication control schema does not exist on target database
這時我們就得清除所有的xDB metadata才能再讓xDB
以下記錄清除的步驟:
1.Stop Publication / Subscription Server
-#/etc/init.d/edb-xdbpubserver stop
-#/etc/init.d/edb-xdbsubserver stop
2.確認publication 的 metadata database objects
-for Oracle
SQL> CONNECT pubuser/password
SQL> SELECT table_name FROM user_tables;
SQL> SELECT sequence_name FROM user_sequences;
SQL> SELECT DISTINCT name FROM user_source WHERE type = 'PACKAGE';
SQL> SELECT trigger_name FROM user_triggers;
-synchronization
會多出RRST_開頭的Table
會多出RRPI_, RRPU_及RRPD_開頭的Trigger, for每個repl的table.
-snapshot
就沒有RRST_開頭的Table及沒有任何Trigger
-for EDB
會產生_edb_replicator_pub這個schema。如下圖
3.刪除這些Publication Database Objects
-for Oracle
SQL> CONNECT system/password
SQL> DROP USER pubuser CASCADE;
-for EDB
postgres=# \c edb postgres
edb=# DROP SCHEMA _edb_replicator_pub CASCADE;
訂閱:
文章 (Atom)







