f 四月 2021 ~ 迪貝之家

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.

親等計算

處理Oracle 內的日期garbage data

 

在前一家公司的職務是維運的dba
採用golden gate升級移轉10g到18c時
專案負責人有來要求清理garbage data
當時以不是專案scope來回絕
開玩笑....幾億筆的資料
我又不是你單位的人
光做個golden gate implement
我就忙死了,而且手上又不是只有一個專案
答應的話, 我就不用休息睡覺了
現在dedicate在一個政府的系統功能升級標案
雖然說是DBA,不過坦白說9成以上的工作在寫轉檔資料的程式
一定會碰到garbage data
只能處理,避不掉的..........
算分隔符號出現幾次
select REGEXP_COUNT('2003/05/29', '/') from dual
類似Perl 的split , 拆解各elements
select regexp_substr('2003/05-29', '[^/-]+', 1, 1) as grupo_1
,regexp_substr('2003-05/29', '[^/-]+', 1, 2) as grupo_2
,regexp_substr('2003/05/29', '[^/-]+', 1, 3) as grupo_3
from dual;
[^/-]
1.非 / 或 -
2.+ 一或多次出現
驗測是否為數字
case when regexp_like(ur_col, '^\d+(\.\d+)?$')
then 'numeric'
else 'not number'
end





怎麼清掉unicode的空白(0020)
眼前的工作最大的價值
看起來就是在幫客戶清理及整理資料
做起來實在是有夠嘔的.........
SELECT 
CASE WHEN trim(ur_col) = '0' then null else rawtohex(ur_col) end ccc,
length(ur_col) as length,
lengthb(ur_col) as lengthb,
rtrim(ur_col,unistr('\0020')) rtrim_special,
length(rtrim(ur_col,unistr('\0020'))) rtrim_special_length,
lengthb(rtrim(ur_col,unistr('\0020'))) rtrim_special_lengthb
FROM T2



我要截取2012/1/18 上午 12:00:00的後半段
然後再組合存成date
被這些資料給搞死
真是一個資料,各自表述
select regexp_replace('2012/1/18 上午 12:00:00',regexp_substr('2012/1/18 上午 12:00:00', '[^ ]+', 1, 1),'')  from dual;





update town
set name = regexp_replace(name,'臺','台')
where regexp_like(name,'^臺.[縣|市]'); <- 臺開頭,空一個任何字元, 第三個字是縣或市
update county
set name = regexp_replace(name,'臺','台')
where regexp_like(name,'臺');

string包含小寫:
where regexp_like(ANSWER,'[a-z]')
or 
where regexp_like(ANSWER,'[:lower:]')
兩者差異
前者是至少一個字元,後者僅一個字元
兩者要一致
 regexp_like(ANSWER,'[[:lower:]]')

神奇的Mongodb $elemMatch Operator

 

這是個神奇的東西
既可做查詢條件
也可做為Projection的設定
一開始我其實搞不太清楚它與field.field.field....格式間的差異
看了資料結構後
我才恍然大悟
field.field.field.... 是給只有單一document
elemMatch 是用來找array的內容是document
舉個例子來看,就清楚了
這是relationships欄位的資料結構
它是document array























db.companies.find({ "relationships":
                      { "$elemMatch": { "is_past": true,
                                        "person.first_name": "Mark" } } },
                  { "name": 1 }).pretty()

我們接著來看elemMatch怎麼當作Projection
先瞧瞧scores的資料結構
教材裡的設定
是只顯示超過85分的document
而不是給你所有的scores的資料
db.grades.find({ "class_id": 431 }, { "scores": { "$elemMatch": { "score": { "$gt": 85 } } } }).pretty()

其實Mongodb都把他們的教學影片公開在youtube
我只要註明出處
就不會違反著作權了
更何況我又沒拿來營利....
出處:
https://youtu.be/Vo3SntUloY8
https://youtu.be/8FDWzlkB-oo