f 七月 2020 ~ 迪貝之家

Microsoft SQL Server Log Shipping

SQL 7就有的技術,簡單的說就是資料庫複本資料同步的技術,而這份複本可以開放讀取的功能以分散營業資料庫的負載,也可純粹當成備援資料庫,不管是在本地還是異地。怎麼達成? 透過SQL Agent自動化排程進行備份、傳檔及復原等作業。

Oracle GolGateden

機房搬遷跨Site能即時同步資料庫利器

Nagios 資料庫維運自動化

一開始設計這架構時,就排除使用remote agent的想法因為在專業分工的組織下,要求安裝新軟體於既有系統是一件不太可行的方案,既然身為DBA就只能把資料庫instance當作是一個最大的agent 想辦法在資料庫內做到我想做的事情

This is default featured post 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured post 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

How to tell memory usage of an oracle db session

幹DBA常常會被AP challenge
就突然丟個top 指令的output
質問為什麼你們的連線用這麼多記憶體??
這是他們的貼圖
人家都框起來囉!!質問你用了超過11GB的記憶體
我想RES及SHR的解釋部分
我來引用一個org網站所寫的top指令output文章
(找好久...至少覺得它說出來的,較有說服力)
Understand Fedora memory usage with top
這篇文章裡,舉gnome-shell 這個process為例
來解釋記憶體的使用
基本上,其實就是RES - SHR
一減下來,其實就沒什麼記憶體的用量
就我們DBA來說,依據Oracle的連線架構
有可能去跟作業系統要記憶體的就是PGA的用量
所以我透過下列語法,去找到對應Server Process的PGA用量
SELECT --distinct s.inst_id,
distinct s.sid,
s.serial#,
p.spid,
s.username,
s.program,
-- s.machine,
s.status,
pga_used_mem/1024/1024,
pga_alloc_mem/1024/1024
FROM gv$session s, gv$process p
where p.addr = s.paddr
AND p.inst_id = s.inst_id
and p.spid in ( 10681,16565,8757,16095) ;
這是Query OUTPUT
了不起頂多就allocate了11MB
我們能說什麼 ???
SHR的部分,就有DB的環境
最大宗的應該是buffer cache所用掉的 shared memory
我們得為了這種事情去做解釋

t-sql backup to network share

因為Local沒空間了
只能借用網路硬碟分享看看


$ sqlcmd -S youraddress -W -U sa -d master
Password:
1> backup database dailyck to disk='\\WEB\WEB_dbbackup\test2.bk' with compression
2> go
已處理資料庫 'dailyck' 的 3944 頁,檔案 1 上的檔案 'dailyck'。
已處理資料庫 'dailyck' 的 744 頁,檔案 1 上的檔案 'dailyck_02'。
已處理資料庫 'dailyck' 的 696 頁,檔案 1 上的檔案 'dailyck_03'。
已處理資料庫 'dailyck' 的 648 頁,檔案 1 上的檔案 'dailyck_04'。
已處理資料庫 'dailyck' 的 1976 頁,檔案 1 上的檔案 'dailyck05'。
已處理資料庫 'dailyck' 的 2096 頁,檔案 1 上的檔案 'dailyck_06'。
已處理資料庫 'dailyck' 的 1928 頁,檔案 1 上的檔案 'dailyck_07'。
已處理資料庫 'dailyck' 的 1888 頁,檔案 1 上的檔案 'dailyck_08'。
已處理資料庫 'dailyck' 的 1920 頁,檔案 1 上的檔案 'dailyck_09'。
已處理資料庫 'dailyck' 的 1832 頁,檔案 1 上的檔案 'dailyck_10'。
已處理資料庫 'dailyck' 的 3 頁,檔案 1 上的檔案 'dailyck_log'。
BACKUP DATABASE 已於 1.336 秒內成功處理了 17675 頁 (103.353 MB/sec)。

Tuning Example IV: EDB(Postgres) DB 主機 CPU 滿載.....的案例

嘿...厲害吧~~~
我們家專門出現CPU滿載的案例
出現的狀況是
系統是由士林clone至板橋
莫名其妙板橋晚上6點鐘開始就CPU衝高
有人來反應
我也就只能查看數據
這系統很舊了...9.1 PPAS
Postgres當然就是看pgbager報表
不然哩....
能不透過工具就能debug postgres 效能的人
我佩服你.....
首先當然看數據
應該是這兩段sql 語句造成
再比對同時段另一個運作正常的資料庫的數據
很明顯吧~~
總執行1個多小時分別跟13分鐘及1.5秒做比較
比對Min/Max/Avg duration (s)這個欄位的最右邊的值(平均值)就可以看得出來最大的差異應該是在執行速度
通常看到這個狀況
大概就是去看執行計畫了
恩....
還真的不一樣

原以為找到原因了
後來我用sql hint去指定跑速正常的索引
(不要懷疑, edb 真的有這個功能)
(對...就是Oracle的語法)
執行計畫一樣了....
但........
沒有改善.....
我就知道,應該不是root cause
就再找過....
因此就去比對兩邊的表格大小
看到了吧~~
408K VS 1827M
這就難怪囉......
然後去count兩邊的筆數
當下都是0筆
所以我就建議用truncate指令把表格縮小
指令下完後
當晚CPU就沒衝高了
想說...總算呈現了我的價值吧~~
隔沒幾天
同個人又反應晚上CPU衝高
其實之前每天日檢的時候
我就發現報表裏頭有drop 指令出現
其實那時候我應該有發mail出去
但沒人回應我
那就算了....
憑我的印象,我就用drop 字眼去掃兩端的系統記錄檔
截圖後把它mail出去
每天中午一點會有個排程drop該表
反正該講的我都講了
要怎麼做,那就不關我事了

RAC 12.2 On HPUX GI Patching Steps for 3rd Q 2020

12.1請參考 (文档 ID 1591616.1)
12.2請參考 (文档 ID 2246888.1)
For Grid Infrastructure Home, as home user:
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /oracle/patch/31305382/31312468
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /oracle/patch/31305382/31309299
For Database home, as home user:
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /oracle/patch/31305382/31312468
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /oracle/patch/31305382/31309299
Execute the following on each node of the cluster in non-shared CRS and DB home environment to apply the patch.
1. Stop the CRS managed resources running from DB homes.
If this is a GI Home environment, as the database home owner execute:
$ <ORACLE_HOME>/bin/srvctl stop home -o <ORACLE_HOME> -s <status file location> -n <node name>
srvctl stop home -o $ORACLE_HOME -s /home/oracle/patch.txt -n dbracn1
srvctl stop home -o $ORACLE_HOME -s /home/oracle/patch.txt -n dbracn2
Note:
You need to make sure that the Oracle ACFS file systems are unmounted (see Section 2.8) and all other Oracle processes are shutdown before you proceed.
2. Run the pre root script.
this is a GI Home, as the root user execute:
# <GI_HOME>/crs/install/rootcrs.sh -prepatch
$ORACLE_HOME/crs/install/rootcrs.sh -prepatch
3. Patch GI home.
As the GI home owner execute:
$ <GI_HOME>/OPatch/opatch apply -oh <GI_HOME> -local <UNZIPPED_PATCH_LOCATION>/%BUGNO%/%OCW TRACKING BUG%
$ORACLE_HOME/OPatch/opatch apply -oh $ORACLE_HOME -local /oracle/patch/31305382/31312468
$ORACLE_HOME/OPatch/opatch apply -oh $ORACLE_HOME -local /oracle/patch/31305382/31309299
4. Patch DB home.
/u01/app/oraInventory/ContentsXML]$ ll
total 6
-rw-rw---- 1 grid oinstall 329 Jun 15 13:41 comps.xml
-rw-rw---- 1 grid oinstall 670 Jan 15 10:55 inventory.xml
-rw-rw---- 1 grid oinstall 292 Jun 15 13:41 libs.xml
As the database home owner execute:
$ <UNZIPPED_PATCH_LOCATION>/%BUGNO%/%OCW TRACKING BUG%/custom/scripts/prepatch.sh -dbhome <ORACLE_HOME>
/oracle/patch/31305382/31309299/custom/scripts/prepatch.sh -dbhome $ORACLE_HOME
$ <ORACLE_HOME>/OPatch/opatch apply -oh <ORACLE_HOME> -local <UNZIPPED_PATCH_LOCATION>/%BUGNO%/%OCW TRACKING BUG%
$ORACLE_HOME/OPatch/opatch apply -oh $ORACLE_HOME -local /oracle/patch/31305382/31312468
$ORACLE_HOME/OPatch/opatch apply -oh $ORACLE_HOME -local /oracle/patch/31305382/31309299
$ <UNZIPPED_PATCH_LOCATION>/%BUGNO%/%OCW TRACKING BUG%/custom/scripts/postpatch.sh -dbhome <ORACLE_HOME>
/oracle/patch/31305382/31309299/custom/scripts/postpatch.sh -dbhome $ORACLE_HOME
5. Run the post script.
As the root user execute:
# <GI_HOME>/rdbms/install/rootadd_rdbms.sh
$ORACLE_HOME/rdbms/install/rootadd_rdbms.sh
If this is a GI Home, as the root user execute:
# <GI_HOME>/crs/install/rootcrs.pl -postpatch
$ORACLE_HOME/crs/install/rootcrs.sh -postpatch
If this is an Oracle Restart Home, as the root user execute:
6. If the message, "A system reboot is recommended before using ACFS is shown, then a reboot must be issued before continuing. Failure to do so will result in running with an unpatched ACFS\ADVM\OKS driver.
7. Start the CRS managed resources that were earlier running from DB homes.
If this is a GI Home environment, as the database home owner execute:
$ <ORACLE_HOME>/bin/srvctl start home -o <ORACLE_HOME> -s <status file location> -n <node name>
srvctl start home -o $ORACLE_HOME -s /home/oracle/patch.txt -n dbracn1
srvctl start home -o $ORACLE_HOME -s /home/oracle/patch.txt -n dbracn2
8. For each database instance running on the Oracle home being patched, run the datapatch utility as described in next table.
sqlplus / as sysdba
startup
quit
cd $ORACLE_HOME/OPatch
./datapatch -verbose
如果datapatch是空的,not apply
則需要手動處理 (請參考DOC 1955058.1)

RAC 12.2 On Linux GI Patching Steps for 3rd Q 2020

貼錯了.....修正

12.1請參考 (文档 ID 1591616.1)
12.2請參考 (文档 ID 2246888.1)

For Grid Infrastructure Home, as home user:

$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir  /home/grid/31305382/31312468
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir  /home/grid/31305382/31309299
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir  /home/grid/31305382/31245159
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir  /home/grid/31305382/26839277
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir  /home/grid/31305382/30888810
For Database home, as home user:

$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir  /home/grid/31305382/31312468
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir  /home/grid/31305382/31309299
Execute the following on each node of the cluster in non-shared CRS and DB home environment to apply the patch.

1.    Stop the CRS managed resources running from DB homes.

If this is a GI Home environment, as the database home owner execute:
$ <ORACLE_HOME>/bin/srvctl stop home -o <ORACLE_HOME> -s <status file location> -n <node name>
srvctl stop home -o $ORACLE_HOME -s /home/oracle/patch.txt -n ha1

srvctl stop home -o $ORACLE_HOME -s /home/oracle/patch.txt -n ha2

Note:

You need to make sure that the Oracle ACFS file systems are unmounted (see Section 2.8) and all other Oracle processes are shutdown before you proceed.

2.    Run the pre root script.
this is a GI Home, as the root user execute:
# <GI_HOME>/crs/install/rootcrs.sh -prepatch
$ORACLE_HOME/crs/install/rootcrs.sh -prepatch


3.    Patch GI home.

As the GI home owner execute:
$ <GI_HOME>/OPatch/opatch apply -oh <GI_HOME> -local <UNZIPPED_PATCH_LOCATION>/%BUGNO%/%OCW TRACKING BUG%
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir  /home/grid/31305382/31312468
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir  /home/grid/31305382/31309299
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir  /home/grid/31305382/31245159
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir  /home/grid/31305382/26839277
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir  /home/grid/31305382/30888810


4.    Patch DB home.
注意事項
因oracle的Inventory與grid的Inventory住在一起,所以下面路徑檔案在打第四步Patch DB home的時候記得要先改為oracle:oinstall
打完DB的之後記得要改回來grid:oinstall,改完後才能在繼續往下
/u01/app/oraInventory/ContentsXML]$ ll
total 6
-rw-rw----   1 grid       oinstall       329 Jun 15 13:41 comps.xml
-rw-rw----   1 grid       oinstall       670 Jan 15 10:55 inventory.xml
-rw-rw----   1 grid       oinstall       292 Jun 15 13:41 libs.xml

As the database home owner execute:
$ <UNZIPPED_PATCH_LOCATION>/%BUGNO%/%OCW TRACKING BUG%/custom/scripts/prepatch.sh -dbhome <ORACLE_HOME>
/home/grid/31305382/31309299/custom/scripts/prepatch.sh -dbhome $ORACLE_HOME

$ <ORACLE_HOME>/OPatch/opatch apply -oh <ORACLE_HOME> -local <UNZIPPED_PATCH_LOCATION>/%BUGNO%/%OCW TRACKING BUG%
$ORACLE_HOME/OPatch/opatch apply -oh $ORACLE_HOME -local /home/grid/31305382/31312468
$ORACLE_HOME/OPatch/opatch apply -oh $ORACLE_HOME -local /home/grid/31305382/31309299

$ <UNZIPPED_PATCH_LOCATION>/%BUGNO%/%OCW TRACKING BUG%/custom/scripts/postpatch.sh -dbhome <ORACLE_HOME>  
/home/grid/31305382/31309299/custom/scripts/postpatch.sh -dbhome $ORACLE_HOME 

5.    Run the post script.

As the root user execute:
# <GI_HOME>/rdbms/install/rootadd_rdbms.sh
$ORACLE_HOME/rdbms/install/rootadd_rdbms.sh

If this is a GI Home, as the root user execute:
# <GI_HOME>/crs/install/rootcrs.pl -postpatch
$ORACLE_HOME/crs/install/rootcrs.sh -postpatch

If this is an Oracle Restart Home, as the root user execute:

6.    If the message, "A system reboot is recommended before using ACFS is shown, then a reboot must be issued before continuing. Failure to do so will result in running with an unpatched ACFS\ADVM\OKS driver.

7.    Start the CRS managed resources that were earlier running from DB homes.

If this is a GI Home environment, as the database home owner execute:
$ <ORACLE_HOME>/bin/srvctl start home -o <ORACLE_HOME> -s <status file location> -n <node name>
srvctl start home -o $ORACLE_HOME -s /home/oracle/patch.txt -n ha1

srvctl start home -o $ORACLE_HOME -s /home/oracle/patch.txt -n ha2


8. For each database instance running on the Oracle home being patched, run the datapatch utility as described in next table.


sqlplus / as sysdba
startup
quit
cd $ORACLE_HOME/OPatch
./datapatch -verbose 

如果datapatch是空的,not apply
則需要手動處理 (請參考DOC 1955058.1)







我在aurora serverless 上postgres 參數的設定及壓測數據

我建議的cluster parameter設定
log_connections=on
log_disconnections=on
log_temp_files=512000
log_lock_waits = on
log_autovacuum_min_duration=300000
rds.force_autovacuum_logging_level=log
log_min_duration_statement=60000
log_statement=ddl
rds.force_admin_logging_level=log
log_checkpoints = on -- 這個確定應該是不能設定
auto_explain.log_min_duration = '3s'
log_destination = stderr,csv -- 因為要透過log_fdw從sql 介面茶系統記錄
看到上述參數,當然就是要在shared_preload_libraries
指定要預載的函式庫
3秒....當然AP單位回饋我的
執行超過3秒的SQL 語句
我才能從系統紀錄檔看被拋出來的執行計畫
不然哩~~怎麼debug
憑空想像嗎 ??
再來就是pg_stat_statements 的數據
3秒的比對
當然就是看我標紅色的那個欄位的數值
它是total/calls, 就是平均值袂
如果有看到超過3的數值
我就知道該去看系統紀錄
調出相應的執行計畫
不過從數據看起來
這個外包寫的程式算漂亮
數值是來自於pg_stat_statements模組
當然也得指定preload參數預載
安裝及使用
進到postgres 資料庫
當然也可以放在user資料庫
但何必哩~~
postgres> create extension pg_stat_statements;
預設的參數值應該就可以使用了
壓測開始前清空數據
SELECT pg_stat_statements_reset()
結束後就透過下列語法撈取數據
SELECT userid,round((100 * total_time / sum(total_time) OVER ())::numeric, 2) percent,
round(total_time::numeric, 2) AS total,
calls,
round(mean_time::numeric, 2) AS mean,
round(stddev_time::numeric, 2) AS steddev,
substring(query, 1, 100)
--FROM enterprisedb.pg_stat_statements
FROM pg_stat_statements
ORDER BY calls desc ,total_time DESC
LIMIT 10;
Aurora Serverless 的設計如下:
By design, Aurora Serverless connects to a proxy fleet of DB instances that scales automatically. There isn't a direct DB instance to access and host the log files.
反正db instance不是固定的
因此pg_stat_statements的數據撈一撈
可能就會突然不見
因此當你發現數據不動的時候
就不能再refresh執行sql 語句
把數據存檔,以供後續使用

#2020/08/15 補充
時區的部分,如果要抓台北的時間
資料庫的參數 timezone, log_timezone
得由預設的UTC改成 UTC-8

Perl 存取 Tibero資料庫

照原廠文件所述
Tibero Perl Integration
它是用一個叫iodbc的open source作為ODBC的介面
但底層還是要有Tibero給出來的odbc driver
$TB_HOME/client/lib/libtbodbc.so
這是我的環境
Perl : Ubuntu 18.04.4
Tibero: Tac on Debian 10
Client Config tbdsn.tbr:
tac =
((INSTANCE = (HOST = 192.168.56.12)
(PORT = 8629)
(DB_NAME = tac))
(INSTANCE = (HOST = 192.168.56.13)
(PORT = 8629)
(DB_NAME = tac))
(LOAD_BALANCE = Y)
(USE_FAILOVER = Y)
)
當下iodbc tarball是libiodbc-3.52.10.tar
這是安裝
export LDFLAGS="-brtl"
./configure --prefix=/root/tibero6/iodbc --with-iodbc-inidir=/root/tibero6/iodbc/etc --disable-gui
照原廠文件所述,brtl 加了上去
configure指令就出錯
configure: error: in `/root/libiodbc-3.52.12':
configure: error: C compiler cannot create executables
See `config.log' for more details
依照它的指示,去看了config.log的內容
嘿~~它不認得brtl flag
configure:3518: gcc -brtl conftest.c >&5
gcc: error: unrecognized command line option '-brtl'; did you mean '-mrtd'?
其實還沒執行configure之前
我就google 了LDFLAGS
就是沒查到brtl到底是什麼 ??
所以這裡我就把它給槓掉了
至於--with-iodbc-inidir=/root/tibero6/iodbc/etc
我後續再談
iODBC Driver Manager 3.52.12 configuration summary
==================================================
Installation variables
layout default
prefix /root/tibero6/iodbc
exec_prefix ${prefix}
Installation paths
programs ${exec_prefix}/bin
include files ${prefix}/include
libraries ${exec_prefix}/lib
manual pages ${datarootdir}/man
Configuration files
odbc.ini /root/tibero6/iodbc/etc/odbc.ini
odbcinst.ini /root/tibero6/iodbc/etc/odbcinst.ini
default FILEDSN path /root/tibero6/iodbc/etc/ODBCDataSources
Extensions
ODBC Version 3
GUI Extensions false
ThreadSafe true
Install libodbc.so true
接下來就是透過iodbctest工具來測試
這真是夢靨阿~~
照著文件指示去config dsn記錄
iodbctest怎麼測就是告訴你找不到你所設定的DSN記錄
不管參照的路徑是/etc/odbc.ini還是~/.odbc.ini
或者我compile所指定的設定檔目錄
--with-iodbc-inidir=/root/tibero6/iodbc/etc
都一樣找不到我所設定的DSN
一律的回覆你底下這個訊息
[iODBC][Driver Manager]Data source name not found and no default driver specified. Driver could not be loaded, SQLSTATE=IM002
我只好又上網去找資料了
恩............
要由環境變數指定odbcinst.ini
export ODBCINI=/root/tibero6/iodbc/etc/odbcinst.ini
真是不由得握緊了拳頭
算了~~ open source 嘛!!
我的odbcinst.ini的內容
iodbc tsn setup
iodbctest的測試結果
接下來就是安裝DBI 及DBD::ODBC
就照著iodbc 的installation guide吧~~
因為DBD::ODBC得去指定你所compile的iodbc home directory
不然應該找不到iodbc相應的library
我沒測過所有的步驟都透過deb 安裝
也許都用apt-get install來安裝預設封裝
會把所有的設定都搞定吧~~
安裝DBI :
bash# perl -MCPAN -e shell
cpan>install DBI
安裝DBD::ODBC
它是先用cpan把最新的source tarball下載回來
然後再進到相應的目錄進行compile
應該是為了指定iodbc的home directory
bash# perl -MCPAN -e shell
cpan>get DBD::ODBC
cpan的畫面會告訴你source tarball放在哪裡
我的環境如下
/root/.cpan/sources/authors/id/M/MJ/MJEVANS/DBD-ODBC-1.61.tar.gz
進到/root/.cpan/sources/authors/id/M/MJ/MJEVANS
解tar
tar xvf DBD-ODBC-1.61.tar.gz
cd DBD-ODBC-1.61
指定odbc home directory
export ODBCHOME=/root/tibero6/iodbc
perl Makefile.PL
make
make install
到目前為止
環境已經搞定
接下來就是抄原廠文件上的perl script來進行測試
root@tbtools:~# cat test.pl
use strict;
use DBI;
my $dbh = DBI->connect("dbi:ODBC:tac","ot","ot");
my $sql = qq{select deptno,dname,loc from dept};
my $sth = $dbh->prepare($sql);
$sth->execute();
my ($deptno, $dname, $loc);
$sth->bind_columns(undef, \$deptno, \$dname, \$loc);
while($sth->fetch()) {
print "$deptno, $dname ,$loc\n";
}
$sth->finish();
$dbh->disconnect();
測試

T-UP DATA Migration on Ubuntu 18.04.4

要跑在linux
得把xrdp裝起來
至少UI的連線會比較方便
我用的是ubuntu 18.04.4
但從18開始
好像xrdp就有問題
找了好久的文件
才解決xrdp的使用
步驟如下 :
apt-get install xrdp -y
apt-get install xorgxrdp-hwe-18.04 -y
xorgxrdp-hwe-18.04 主要癥結點在這個套件
細節可以參考底下網路這一篇Po文
xRDP – Issues when installing xRDP on Ubuntu 18.04.4
桌面環境我選擇MATE, xfce我不想在測了
To install MATE Please use below command
apt-get install mate-core mate-desktop-environment mate-notification-daemon
if you installed MATE, Please use below command to MATE environment
sudo sed -i.bak '/fi/a #xrdp multiple users configuration \n mate-session \n' /etc/xrdp/startwm.sh
adduser xrdp ssl-cert
ufw allow 3389/tcp
/etc/init.d/xrdp restart
設定細節可以參看底下這篇文章
How to Install Remote Desktop (Xrdp) on Ubuntu 18.04
至於T-UP 的版本
我的測試結果
好像不能用tibero 6最新fix那一版隨附的T-UP
tibero6-bin-FS07_CS_1912-linux64-174424-opt.tar
得用稍微舊一點版本
TMAXTECH 可以下載
Source : ORACLE 10gR2 on Redhat 5
Target : Tibero 6 TAC on Debian 10
T-UP : T-Up_linux64_201912 on Ubuntu 18.04.4
JDK : zulu6.22.0.3-jdk6.0.119-linux_amd64.deb
最新版會出現下列錯誤

Errors : 1
1. Migration Failed: String index out of range: -1
換成JDK 8
錯誤是不一樣了
但還是有問題
所以我才換成T-Up_linux64_201912這一版進行測試
然後T-Up_linux64_201912所附的tiberojdbc
在連接Tibero 6 的時候
會出現下列錯誤
所以我就拿了tibero6-bin-FS07_CS_1912-linux64-174424-opt.tar
這個版本的tibero jdbc
就解決了
migration 過程的畫面如下
新版的畫面可以參考我寫的這一篇文章
Tibero T-UP Data Migration
新版的功能設定比較細
主要是為了解決轉碼及資料轉移時可能會碰到的問題

Tibero T-UP Data Migration

看了utility guide之後
我才了解,為什麼installation guide要求安裝JDK
因為T-UP tbExport/tbImport這些工具
都是用Java寫的
我就想說奇怪了~~
我測試到現在,都沒看到Java的痕跡
至於jdk的download
我是不會再去下載Oracle JDK
一下載後,美國原廠那邊就又發mail
詢問Java License的使用
Oracle這家公司真的是有病
當初SunMicro就說免費使用
購併之後,偏要單面修改agreement的內容
怪了~~ 既然是agreement
不是得雙方合意嗎?
反正不用它就對了
找了一下Internet
微軟有這一篇文章
安裝適用於 Azure 和 Azure Stack 的 JDK
想說...都是windows系統
應該可以通用吧~~
結果...恩....T-UP連畫面都叫不出來
它是VERSION 11
也不知道是版本太新
還是真的只適用Azure的環境
反正我就再翻了T-UP章節
文件是說 jdk 6以上~~
好吧~~ 我就直接到zulu的網站下載版本6好了
Download Zulu Builds of OpenJDK
果然就OK了
好了~~廢話太多了
我們來測試T-UP
我的環境如下 :
Source : ORACLE 10gR2 on Redhat 5
Target : Tibero 6 TAC on Debian 10
T-UP : tibero6-bin-FS07_CS_1902-windows64-170287-opt-20190918145314-tested.tar on Windows 10
JDK  : zulu6.22.0.3-jdk6.0.119-win_x64
1.叫起T-UP畫面
2.選Migrator,因為我要轉資料
Analyzer是用來評估
Oracle轉Tibero
3. 填入Oracle 端的連接資訊
4. Type Conversion
我的測試環境預設就OK了
5. 挑選要轉置的物件
這邊我得稍微描述一下
就我的測試
是要轉OT Schema到Tibero
我一開始測試是上兩個選項沒打勾
設定完之後,一跑就轉不過去
測了幾次之後,還是有問題
我就乾脆在db level打勾
讓它全轉過去
結果系統物件可以轉得過去
但OT還是轉不過去
把轉到Tibero的資料清掉之後
再勾選最上兩個選項
資料還是過不去
後來我思考了一下
Tibero是TAS的架構
再對應了一下LOG
手動把USERS表格建出後
再選了最上兩個選項之後
進行轉檔就ok了
6. Migration Option
是否用DPL
或者有轉碼,需要擴欄位
是在這裡做設
7. Tibero db instance的連線設定
8. 設定完了,工具給你的summary
9. 要轉資料了
進到這個畫面之後
等了老半天
怪了~~怎麼沒動作
原來是要點選Migrate
它才會繼續動作
10. 資料移轉的過程
11. 完成資料移轉
12. 看看資料遷移的報表吧~~
有3個type物件有問題
13. LOG 目錄內會有錯誤細節可以參考
TYPE錯誤 如下 :

要怎麼解??
當然就是改相應的語法囉~~
不然哩~~

SQL Server TXN Replication Broken 14151

被反應資料不一致
因為有兩台subscriber
一台資料即時,一台資料delay
查了系統記錄...恩.....
發現這個錯誤
Replication-複寫散發子系統: agent xxxxx failed. Query timeout expired
查了Internet的資料
要你去查看error表格
TDS ERROR ???
網路上大都說是當下兩端連線斷了
解決方式大概就是
把對應的JOB停掉
再帶起來就可以解決了
如果data還在散發資料庫裏頭
沒被清掉的話
###2020/11/25####
今天又被反應了
看了一下記錄
又是一樣的狀況
嘗試重啟該同步代理排程
不管你是用哪個介面進行
job就是起不來
最後是上次值班處理這個問題的同事提醒了我
要砍掉那個job的process
我當下是用sp_whoisactive調session資訊
砍了該process 之後
還真的那個同步代理job就能啟動了
在這裡為了秀那個session的資料
我就從whoisactive歷史資料擷圖

Tuning Example III: Oracle DB 主機 CPU 滿載.....的案例

又在晚上接到CPU衝高的電話
看了ASH 15分鐘內的報表
就程式存取資料的效能問題
table size 2~3G
FTS 在RAC 環境下,相較於single instance
問題會被放大好幾倍
因為跟RAC Node間的溝通有關係
去看ash 報表裡頭top session就知道了
RMV 在做什麼 ??
這是Oracle 官方文件上的描述
晚上我也懶得深究
以為AP單位沒建索引
就建議他們在EMAIL欄位建出相應的index
不過隔天看mail時
他們家leader就告訴我
該欄位有索引
我查過internal view
也確實是有索引
我就透過set autotrace on來查看執行計畫
ㄝ......
不對啊...optimizer有跑索引阿~~

手動執行了一次
反正email隨便杜撰一個就行了
應該連千分之一秒都用不到
去調了awr 裡頭該sql 的執行數據
每次執行要花5秒.........
程式是用java寫的
其實這狀況我在其他公司及其他資料庫都碰過
sql 手動跑都正常
但是透過Java跑就是跑FTS
因為他們家老大強調要增加CPU
我做了如下答覆
這個case 應該是 bind variable的問題
可以參考metalink 文件401068.1
或者也可以看一下我之前駐點在其他site所發生的案例
Oracle Bind Variable