2014年12月30日 星期二

[MySQL]innodb_stats_on_metadata記得要關閉

        最近有個log DB量實在有點大,其中一個大Table每天新增三千萬筆資料,目前Table逼近100G,不得已只好拆成Partitioning Table,以方便清除歷史資料及查詢。

        以MySQL來說,Partitioning Table效能及操作方便性沒有Oracle及SQL Server來的好,分區太多會影響效能,若按天拆分,會有90個分區,因User要求保留三個月資料,後來與User商量的結果,保留近七天的熱資料在分區表上,七天以前的冷資料會每天拆成一個表,這樣要查資料都還調的到

        等我拆完表後,發現一個奇怪的現象,就是Response慢慢慢,比不拆前還慢

        show index慢
     
        查information_schema.PARTITIONS也慢
        
        連Explain也慢

        我還沒Query怎麼會慢成這樣,此時忽然想起之前有看到一篇Solving INFORMATION_SCHEMA slowness,關掉innodb_stats_on_metadata就OK囉
set global innodb_stats_on_metadata=0;
        記得My.ini也要加就是了,要不然重啟又啟用了
innodb_stats_on_metadata=0
        5.5版本預設是開啟的,用5.6就沒有這個問題, 因為5.6預設是關閉的!


        

2014年12月23日 星期二

如何有效率的瀏覽大量的部落格或網站


        話說因為工作的需要,一天要追七八十個資料庫或系統運維等相關的技術網站或部落格,看看那些前輩、達人、牛人及大師有沒有分享新的技術文章,一個一個看是十分浪費時間的,因為不是每個部落格及網站每天都有新文章的,點進去沒有新文章不就白看了,那有沒有工具可以幫你過濾呢?比如說在數十個網站中只顯示那些有新增文章但你尚未瀏覽過的,答案是有的,接下來介紹的兩個工具可以協助你喔!

        使用方式都很簡單,就先註冊一個帳號,把你想追蹤的部落格加進去就可以了,最下方提供一些介紹怎麼使用的文章供參考。那為何我要用兩個呢?因為有的部落格Feedly可加得進去,另一個工具Digg卻加不進去,而我一開始先使用Digg的,就只好兩個都用啦!最後這兩個工具除了電腦版以外也都有APP喔,很方便吧!


相關教學連結如下
Digg Reader:全新的 RSS 閱讀器來了,跟 Google Reader 說再見

2014年12月6日 星期六

[推薦][SQL Server]sp_who加強版系列

        sp_who或sp_who2系列一直以來不斷的有高人加強它衍生出很多版本,這邊紀錄一下看到覺得不錯用的,給不知道的人參考
  • sp_AskBrent 這個含有whoisactive的功能,再加上job、 wait statisticsPerfmon counters的監控,也很不錯
  • sp_whopro 這個最近看到的,對應到最新SQL 2014版本,但還沒試,感覺像whoisactive囉

2014年12月2日 星期二

[SQL Server][Oracle][MySQL][PostgreSQL] IN條件式寫法的差異

        一般找某個資料表的資料是否存在另一個資料表中,就語法上來說,可以用INNER JOIN,若條件式僅JOIN單一欄位,可以改成用IN或EXISTS;若是JOIN多個欄位,就無法用IN囉,這是在SQL Server的情況

        無意間看到在Oracle中,IN條件式的寫法裡竟然可以接受多個欄位呢,另外試了MySQL與PostgreSQL也都可以喔

2014年11月27日 星期四

[MySQL]log_queries_not_using_indexes與slow_query_log同時啟用會造成大量的slow query log

        話說管理的MySQL有啟用slow_query_log,然後發現每天的成長量非常的大 ,每天增加1G吧,量太大了對於分析slow query非常耗時,仔細分析又發現幾乎所有的Query紀錄進去了 ,這不太對啊,log_query_time設1秒,照理說超過1秒才會記錄,但幾乎全紀錄,毫秒微秒級的也記錄作什,看avg、95%跟前五名的都是毫秒級回應,收到這種分析幾乎沒什用


2014年11月21日 星期五

[MySQL]Account user_name@host_name does not exists but it still has privileges defined for following objects:database_name

        平常刪除帳號都用drop user,今天需要對某個DB刪除大量帳號,想說直接delete from mysql.user最快了,刪完用MySQL Workbench開啟來看是否刪乾淨了,結果發現帳號還在,只是前面多了"(!)"符號

        點擊某個帳號,出現下列訊息,好像告訴我沒有刪除乾淨

Account user_name@host_name does not exists but it still has privileges defined for following objects:database_name

       猛然想起mysql.db好像也要刪除,所以若不用drop user而直接清除user資料表,別忘記db資料表也要清喔,完整的刪除方式如下

DELETE FROM mysql.user WHERE user='phpmyadmin' and host='localhost';
DELETE FROM mysql.db   WHERE user='phpmyadmin' and host='localhost';
FLUSH PRIVILEGES;

       若用別的client工具似乎不會發現這個問題,我用Navicat打開是不會看到只刪user未刪db的帳號喔!

2014年11月19日 星期三

[MySQL]查看Binlog的內容

        Binlog是MySQL的日誌,通常用作Replication及備份使用,這麼重要的東西當然要了解它囉,預設安裝是不會啟用Binlog的,要啟用它要在my.ini檔加入下列系統參數,然後重啟MySQL生效

#還有其他相關參數就不列了
log-bin=/var/lib/mysql/mysql-bin #必要的,設定位置及檔案名稱
expire_logs_days=14                    #選擇性的,設定保留的期間
binlog-format=statement              #選擇性的,有三種模式,預設是statement,還有row及mixed

2014年11月6日 星期四

[Shell scripts]warning: here-document at line 3 delimited by end-of-file (wanted `EOF')

        把一個測試過的Shell script用copy與paste內容的方法複製到另外一台Server上,結果執行卻遇到如下錯誤

check_err_log.sh: line 28: warning: here-document at line 3 delimited by end-of-file (wanted `EOF')
check_err_log.sh: line 29: syntax error: unexpected end of file

        上網查是說EOF前面不能有SPACE,可以有TAB,可是怎麼看兩邊的script都一樣啊,至少我肉眼分辨不出來,兩邊的長得跟下圖一模一樣,為何兩邊結果不一樣?


        後來查到可以用cat -A file 命令秀出那些印不出的字,才看出兩邊是不一樣的,左邊是正常可以執行的,是用TAB,會顯示"^I";右邊是會出錯的,SPACE還是顯示SPACE


        最後就把SPACE移掉換用TAB就沒問題了,不過copy和paste會把TAB換成SPACE真是奇怪的行為,上網有查到似乎在某些模式下會這樣,之後遇到再看看囉

2014年10月30日 星期四

[MySQL]如何在Percona上安裝mysqlftppc-bigram做中文全文索引呢

為何不用Sphinx或Lucene呢?因為比起前面這兩個,這plugin安裝及使用上相對容易,幾百萬筆的資料查詢起來還可接受,M/S架構上裝在Slave運作也還OK,若資料量千萬筆就比較不建議用這個囉,還是用專業的Sphinx或Lucene吧

環境:CentOS 6.5 + Percona 5.5.40

安裝條件:
1.mysql-devel套件,安裝這個才有mysql_config
2.libicu-devel套件,要支援UNICODE,安裝這個才有icu-config
4.相容MySQL 5.5與5.6,Engine只能用MyISAM喔

2014年10月7日 星期二

msdtc settings not configured optimally

        話說我用SQL Server 2008 R2 BPA分析新安裝的SQL Server,有一項Warning是msdtc settings not configured optimally,照建議的 MSDTC 設定將用於分散式交易中 SQL Server的這個去設定,我發現怎樣都不會通過檢查,後來仔細看它Issue的地方有反饋一些registry key得設定成建議的值,回推正確的設定應該如下圖,供參考


2014年10月2日 星期四

[Oracle]With Clase與SQL Server的CTE用法不太一樣喔,要注意!

        SQL Server的With子句叫CTE,可以說是暫存的結果集,讓語法看器來更簡潔,可以Reuse結果;Oracle也有With子句,叫Subquery Factoring,我以為用法跟SQL Server一樣用,實際上有滿大的差異,今天花點時間研究一下,原來Oracle可以把with子句當inline view(在FORM裡的子查詢)或temporary table來處理喔,很不一樣吧

        據說Oracle會自行判斷with子句當inline view或temporary table處理,讓它自行判斷往往會發生意想不到的結果,可以使用兩個undocumented materialize hint與inline hint來指定用哪種囉

[Oracle]Rman備份時利用Rate參數限制IO流量

        話說用Rman備份資料庫時,開兩個Channel備份,雖然備份時間縮短了,但那段時間的IO好高,雖沒人反映那段時間系統運作很慢,我還是想想有沒有限流的方法,結果Channel那邊本身就有參數支援囉。

        Rate參數是用來限制IO Bandwith/sec的,下面例子限制為10M/s

run { allocate channel t1 type disk rate 10M; CROSSCHECK ARCHIVELOG ALL; DELETE NOPROMPT EXPIRED ARCHIVELOG ALL ; backup full format '/backup/rman_backup/db_%T_%u_%s_%p' database include current controlfile; sql 'alter system archive log current'; backup format '/backup/rman_backup/archive_%T_%u_%s_%p' archivelog all delete input; delete noprompt obsolete; crosscheck backup; Release Channel t1; }

2014年9月23日 星期二

DBCC SHRINKFILE遇到cannot be shrunk as it is either being shrunk by another process or is empty.

        先不管這件事好不好,同事因為磁碟空間不足去DBCC SHRINKFILE資料檔,結果遇到下面的錯誤

File ID # of database ID # cannot be shrunk as it is either being shrunk by another process or is empty.


        理論上SHIRKFILE不是獨佔的行為,不需要停機進行,而同事已經在應用停止的情況下作業了,也確認沒有另一個process在shirk,資料檔也是有剩餘幾十G的空間,但出現這錯真是奇怪

        上網搜尋了一下,這篇DBCC SHRINKFILE and SHRINKDATABASE failing after backup的解法竟然是建議對資料檔加大幾MB的空間,照著做再shirk還真的成功了,實在不解啊

2014年9月5日 星期五

[Oracle]Partition Table的維護

        如果分區表先天設計不良,後天要改又很麻煩,造成清除逾期資料無法用truncate partition來處理,只能用delete處理逾期資料,那會因為HWM高水位的問題造成資料表占用空間不斷成長,可以參考以下命令來針對partition table與partition index做搬移與重建,就可以釋放空間囉

--alter table TABLE_NAME  truncate partition PARTITION_NAME;

--查看資料表佔用空間
select SUM(BYTES)/1024/1024 SIZE_MB from DBA_SEGMENTS where SEGMENT_NAME='TABLE_NAME';

--查看索引佔用空間
select sum(bytes)/1024/1024 SIZE_MB from DBA_segments where segment_name IN (SELECT INDEX_NAME FROM DBA_INDEXES WHERE TABLE_NAME='TABLE_NAME');

--產生搬移分區表命令
--alter table TABLE_NAME move  partition PARTITION_NAME
SELECT 'alter table ' || table_name || ' move  partition ' || partition_name from DBA_TAB_PARTITIONS WHERE TABLE_NAME= 'TABLE_NAME';

--因為搬移完分區表,分區索引會失效,所以要重建喔
--產生重建分區索引命令 
--alter index INDEX_NAME rebuild partition PARTITION_NAME TABLESPACE TABLESPACE_NAME
SELECT 'alter index '|| index_name ||'  rebuild partition  ' || partition_name || ' TABLESPACE ' || tablespace_name  from DBA_Ind_Partitions WHERE  index_name in (select index_name from dba_part_indexes where table_name = 'TABLE_NAME');

--檢查是否有無效的索引分區
SELECT * from DBA_Ind_Partitions WHERE  index_name in (select index_name from dba_part_indexes where table_name = 'TABLE_NAME') and status = 'UNUSABLE';




2014年9月3日 星期三

[SQL Server]Replication如何加入新的發行項

很簡單...紀錄一下...以免忘記

對Local Publications下你要加入新的發行項的發行集右鍵,選屬性

在Articles加入新增的資料表為發行項後


2014年8月27日 星期三

[Oracle]ORA-00923: FROM keyword not found where expected

執行下列語句

SELECT *,  ROW_NUMBER() OVER (ORDER BY LOG_DATE ) AS RN FROM TEMP3;

返回如下錯誤

ORA-00923: FROM keyword not found where expected

猜猜看哪裡錯?

2014年8月26日 星期二

[SQL Server]Snapshot Replication


        很簡單的設定,但久久用一次沒記錄很容易忘記,這邊記錄一下囉!當然前置作業還要設定SQL Server Agent的啟動帳號與權限,還有快照集目錄的設定,我這邊沒提到,至於Transactional replication與Merge replication設定上也差不多,但使用限制跟情境不太一樣,自行參考Types of Replication Overview吧,還有點對點的交易式複寫可參考Cary大師的SQL Server 分散式架構 - 點對點交易式複寫 + NLB

2014年8月20日 星期三

[SQL Server]怎麼查ShrinkFile進度及預估完成時間呢?

   非不得已還是不要用shrinkfile吧,沒什好處,但廠商要求就只能照做了,結果出乎意外地跑了好久,MDF不過500G,使用380G,壓成400G,結果花了快八小時!

--壓縮之前先確認有沒有足夠的可用空間可以移除
SELECT name ,size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB FROM sys.database_files;

--shirk data file(MB)
DBCC SHRINKFILE (N'TestDB_log' , 1024)

--shirk log file(MB)
DBCC SHRINKFILE (N'TestDB' , 10)


關於Shrink的過程可參考下列連結

--因為實在太久了,找到以下可以看到進度及預估時間的命令
--真的是估計,會一直變,會一直往遞延
--實際上完成時間往後遞延了一個多小時喔...@@
SELECT
     session_id,
     percent_complete,
     DATEADD(MILLISECOND,estimated_completion_time,CURRENT_TIMESTAMP) Estimated_finish_time,
     (total_elapsed_time/1000)/60 Total_Elapsed_Time_MINS ,
     DB_NAME(Database_id) Database_Name ,command,sql_handle
FROM sys.dm_exec_requests
where command in ('DbccSpaceReclaim','DbccFilesCompact','DbccLOBCompact');


下面這篇有提到shirk的建議作法,也可參考


2014年8月17日 星期日

[MySQL]Memory Table的維護

       同事認為定期delete資料可以清除memory table空間?
       我們來看一下吧!

#建立memory table
create table mem (id int) engine = memory;
show table status like 'mem'\G



2014年8月15日 星期五

[MySQL]啟用innodb_file_per_table將共享表空間改成獨立表空間

        MySQL預設是共享表空間,而獨立表空間的優點是減少對表空間IO資源的爭用,容易管理及備份,回收空間容易,而本文是教你怎麼套用成獨立表空間

        可以看到innodb_file_per_table預設未開啟

mysql> show variables like 'innodb_file_per_table%';
+--------------------------+----------+
| Variable_name            | Value    |
+--------------------------+----------+
| innodb_file_per_table    | OFF      |
+--------------------------+----------+
1 rows in set (0.00 sec)

2014年7月25日 星期五

[MySQL]多種字符編碼同時顯示的問題

        目前字符集是utf8
            
show variables like '%char%';


        建立測試資料表

DROP TABLE IF EXISTS `unicode_test`;

CREATE TABLE `unicode_test` (
  `t1` int(11) NOT NULL AUTO_INCREMENT,
  `t2` varchar(64) NOT NULL,
  PRIMARY KEY (`t1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;

        插入一筆亂碼資料看看
insert into unicode_test (t2) values ('我是奇怪文嬗');

        果然顯示亂碼
select * from unicode_test;


2014年7月21日 星期一

[CrystalDiskMark]簡單易用的磁碟效能測試工具


        可參考How to Test Your Storage with CrystalDiskMark,裡面有說明,我試了一下還滿容易使用的,可以玩玩看



        CrystalDiskMark下載頁,記得要抓CrystalDiskMark可攜版喔,不要載錯了


2014年7月16日 星期三

[HammerDB][TPC-C]Database load testing and benchmarking tool for SQL Server

        HammerDB是一個open source多執行序效能測試工具,支援多種DB,如Oracle、SQL Server、PostgreSQL、MySQL等的DB,對應SQL Server的版本有SQL 2008及SQL 2012,最新的SQL 2014並沒有支援

        它本身支援TPC-C模型,TPC(Transaction Processing Performance Council)是一系列交易處理和資料庫基準測試的規範。其中TPC-C是針對OLTP的基準測試模型,模擬零售商店下訂單的交易環境,是很熱門的基準測試模型

        用HammerDB進行TPC-C測試是很簡單的,只要多試幾次就能上手喔,可參考以下說明

2014年7月14日 星期一

[MySQL]CREATE FUNCTION的權限

        話說同事跟我說他無法在MySQL裡建立Function,出現如下錯誤訊息
You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_routine_creators variable) 
        我想說已經給他該DB層級ALL的權限了,為何還要給SUPER這種伺服器層級的權限呢?

        一查13.1.15 CREATE PROCEDURE and CREATE FUNCTION Syntax一節,還真的要給SUPER權限

CREATE PROCEDURE and CREATE FUNCTION require the CREATE ROUTINE privilege. They might also require theSUPER privilege, depending on the DEFINER value, as described later in this section. If binary logging is enabled,CREATE FUNCTION might require the SUPER privilege, as described in Section 20.7, “Binary Logging of Stored Programs”.

2014年7月13日 星期日

[轉貼]技術人員應真正學會的第二課程

        雖然是簡體字的,但我覺得講得不錯,值得一看喔

連結在此 技术人员应真正学会的第二课程

2014年7月10日 星期四

[轉貼]免費資料庫學習影片

        有一些免費資料庫教學影片喔,請造訪51CTO學院吧,不只SQL Server還有Oracle與MySQL呢!






2014年6月24日 星期二

[MySQL]Order By Null

        第一次看到MySQL可以用Order By Null時很訝異,而且這樣用並不是要將Null排在最前還是最後,而是不需要排序的意思,但要配合Group By使用

        像SQL Server不支援這樣寫;Oracle可以這樣寫Order By Null First或Order By Null Last,看是Null值要放前放後而已

        MySQL的Group By有隱含排序的效果,意思就是會花額外的資源去做排序,這會有效能的疑慮,我自己測試在Group By Table1.Col, Table2.Col這種情況下,最為明顯,在執行計畫Extra欄位可以看到Using filesort,這就表示有額外去作排序喔,可參考下面的例子

2014年6月23日 星期一

使用sp_testlinkedserver檢查Linked Servers是否正常

        有個需求要建Data Mart,然後我打算用PowerPivot讓User可以自己取得最新資料來分析,那驗證這端怎麼弄,因為有AD就簡單很多,可是來源DB在MySQL上耶,那就想辦法把Data Mart建在SQL Server上囉,因為資料量目前不過百萬筆,預估三年內應該不會破千萬,目前容量也不到1G,使用SQL 2014 Express應該足夠

        因為要ETL到SQL Server上,才發現Express不支援SQL Server Agent,只好用工作排程器加SQLCMD來解決

        在SQL Server上建Linked Server到MySQL很簡單,但在ETL的過程中有時會遇到錯誤


        怪的是時好時壞,才想說有沒有測試Linked Server的工具呢,原來微軟早就提供sp_testlinkedserver啦,怎麼用?如下

BEGIN TRY
    
     EXEC sp_testlinkedserver  N'LK_MEM';

     TRUNCATE TABLE [dbo].[test];
     INSERT INTO [dbo].[test]
     SELECT * FROM OPENQUERY(LK_MEM,'SELECT id FROM test.t1;');

END TRY
BEGIN CATCH
     PRINT ERROR_NUMBER()
     PRINT ERROR_MESSAGE()

END CATCH

        很簡單

2014年6月16日 星期一

[MySQL][ODBC]reading authorization packet, system error 2

        我想在SQL Server上打算建Link Server到MySQL去,要連兩台MySQL,所以建兩個Link Server,測試時先在兩台上建同一組帳密,然後開始在SQL上設ODBC,第一台順利建立完成,但第二台設ODBC時就出現如下錯誤


        看起來像驗證的問題,我原以為密碼錯誤,但是我SQL上用mysql cmd連是OK,MySQL Workbench也OK,也確認ODBC輸入的帳密沒問題

        我想該不會是帳號怪怪的有問題吧,我又建立另一組帳號,只是帳號名稱不同,密碼權限相同,結果另一組帳號可行

        總結一下,在同一台MySQL上,建兩組帳號,除帳號名稱不同外,密碼權限皆相同,在遠端用mysql cmd與Workbench兩個帳號都通過驗證,但odbc卻有一組帳號會出現上面那個錯誤,我以為是帳號名稱太長,但另一台同樣的帳密卻OK,真是活見鬼

        在網上搜尋一下,Bug #28359:Intermitted lost connection at 'reading authorization packet' errors,我覺得應該是Bug

2014年6月8日 星期日

在SQL Server上建立連結伺服器到Oracle

        方法超簡單,首先要SQL Server上安裝ODAC,裝完後記得重開機



        然後展開Linked Servers的Providers,應該要有OraOLEDB.Oracle喔,如上圖

2014年6月4日 星期三

[SSRS][Oracle]Memory Usage Report

        接著分享Memory Usage Report



2014年5月30日 星期五

[PowerPivot]如何從MySQL載入資料

        可參考How to Use MySQL and Microsoft PowerPivot Together此篇的教學

        因為得撰寫SQL來撈取資料,所以可以用SQL組成一個扁平化的大表,那如果想要照星狀結構那樣匯入Dimension及Fact Table何較快速的載入其他資料表呢

        假設已經成功匯入一個Table了,在PowerPivot工具列選[設計]的[現有連接]

2014年5月16日 星期五

Excel另類應用:教你分析正妹粉絲團的相片




        想看效果可直接從4分鐘左右開始看,如要做到影片那樣,Excel必須要安裝下列三個Plugin:
  1. Power Query:用來取得Facebook的資料,像是相簿、貼文及按讚等資料
  2. PowerPivot:建立異質資料之間的關聯,供之後的互動式樞紐分析表使用
  3. PowerView:動態圖表,呈現相片用的
        這三個Plugin有最低Office版本的限制,如下:
  1. Power Query:Office 2010 Standard  + Power Query
  2. PowerPivot:Office 2010 Standard + PowerPivot
  3. PowerView:Office 2013 Pro Plus + 啟用PowerView
        也就是說用Office 2010 Standard可以裝Power Query及PowerPivot,PowerView是不支援的;若是Office 2013 Standard的話,很抱歉三個都不支援;若有Office 2013 Pro Plus的話,恭喜你三個都支援喔;Office 365 Pro Plus版也才有支援喔

        以上版本都沒有也沒關係,去評估 Office Professional Plus 2013,就可以免費試用60天喔,試試又不用錢,像我就用評估的啊

2014年5月14日 星期三

[PowerPivot]無法在要求的方向建立關聯性。當您按一下建立時,將會反轉關聯性的方向。

        情況是這樣的,我不想藉由資料庫去Join資料表,剛好看到PowerPivot似乎可以幫我這個忙,只要建立關聯性後,公式列用RELATED資料表的欄位即可,於是就來試試看,那原本有三張資料表:Source、Transactions及Players,都是由Id欄位建立關聯,請注意箭頭方向,此時我多新增了一張資料表Login


2014年4月28日 星期一

Microsoft SQL Server 2012 SP1 PowerPivot for Microsoft Excel 2010

        Excel 2010也是支援Personal BI工具Power Pivot的喔,只要裝對plugin即可,為何要說要裝對呢?

        因為你若下載到Microsoft SQL Server 2008 R2 - PowerPivot for Microsoft Excel 2010 - RTM此版的話,會找不到Diagram View(圖表檢視)喔,就無法享受到它便利的modelling tool了

        記得要裝最新版的Microsoft® SQL Server® 2012 SP1 PowerPivot for Microsoft Excel® 2010,才會看到Diagram View

        以下這是錯的版本,SQL 2008 R2的,是10開頭的,無接換到進階模式

2014年4月27日 星期日

[BPA]安裝Microsoft SQL Server 2008 R2 Best Practice Analyzer

        周五參加集英信誠舉辦的與大師對談的課,其中的一堂課裡有提到BPA(Microsoft SQL Server Best Practice Analyzer),可以很方便的診斷SQL Server的設定與微軟建議的Best Practice有何不同,回家後就來安裝試試

        要使用BPA需先安裝MBCA 2.0,然後針對SQL 2008 R2與SQL 2012則要分別下載
        然後我安裝SQL2008R2BPA_Setup64時遇到下面的錯誤


2014年4月18日 星期五

[MS SQL][Oracle][MySQL][PostgreSQL]字串相連

        雖然字串相連是很簡單的東西,但不同DB卻是有差異的喔,整理目前會用到的,供參考



2014年4月13日 星期日

[Power Query][從Facebook]DataSource.Error: An unknown error occurred

        Excel的Power Query外掛很強大,可以把Facebook當資料來源匯入工作表喔,就可以做一些分析啦,超方便!

        有時可能會遇到下面的錯誤,這是Facebook graph API的限制造成的
DataSource.Error: An unknown error occurred

        怎麼解?

2014年4月10日 星期四

[MySQL]Error Code: 1366. Incorrect string value



        同事遇到上面這個錯誤,這是字元集設錯的問題,或是說定序設錯的關係,反正就是編碼的問題啦,MySQL與MS SQL一樣是可以從Server到Database到Table的Column都可設定,以下示範一下Column層級的差異囉,以免下次自己又忘了

2014年3月30日 星期日

[SSRS][Oracle]Tablespace Usage Report

        話說小弟我打字不快,但我又想有效率的管理DB,那怎麼做呢?就是把日常對DB作檢查的Script客製成自己想要的報表就好啦,只要用滑鼠點點點就可以看我想看的資訊,這樣是不是輕鬆很多?

        客製自己想要的報表,好處之一是可以滿足自己的需求,好處之二就是你得要求自己去研究那些資訊要如何取得,從中也順便對DB有進一步的了解,也是自學的好方法之一!

        因為小弟對MS SQL較熟悉,所以就想到用Reporting Services 2008 R2作為我報表呈現的工具,來去取得Oracle的資料,Reporting Services可以呈現精美的報表,也有訂閱的功能可以把報表送出,很方便喔

        以下就先分享Tablespace Usage的報表


2014年3月23日 星期日

[Rman]將備份檔還原到異機

        假設要將QA1的Rman備份還原到QA2,首先在QA1用Rman完整備份,記得archivelog與controlfile都要備份,命令如下

RMAN>run { allocate channel t1 type disk; allocate channel t2 type disk; CROSSCHECK ARCHIVELOG ALL; DELETE NOPROMPT EXPIRED ARCHIVELOG ALL ; backup full format '/home/oracle/rman_backup/db_%T_%u_%s_%p' database include current controlfile; sql 'alter system archive log current'; backup format '/home/oracle/rman_backup/archive_%T_%u_%s_%p' archivelog all delete input; delete noprompt obsolete; crosscheck backup; Release Channel t1; Release Channel t2; }

2014年3月16日 星期日

[PLSQL]當Tablespace的剩餘空間不足時,自動增加Datafile

        因為工作需要用Oracle,小弟只好自學了,因為剛開始不熟所以原廠說什就配合什,那時原廠DBA說要時常監控tablespace的剩餘空間,最好兩個小時就check一次,如果小於2GB時,就要主動增加datafile,避免單一datafile自動增長超過4G,那時想說Oracle怎麼那麼麻煩,不就一開始估計會長多大,就先分配好足夠的空間就好嗎?

        正因為不熟所以只好傻傻地照做,想說寫個Procedure來幫我做這件事好了,於是就產生的這個Procedure囉,但後來還是沒用到,但還是放上來給有需要的人參考,不過話說PLSQL跟T-SQL差好多啊

2014年1月6日 星期一

用Reporting Services 2008 R2連接Oracle

        最近打算用Reporting Services 2008 R2連接Oracle 11gR2,光測試到底要安裝哪個ODAC就快瘋掉,有夠複雜,因為我是先在VM上測試,OS是裝windows server 2008 r2 x64,打算開發與RS都在同一台上,但發現這樣行不通,似乎得拆開,因為開發用Visual Studio 2008是x32的,而RS是x64的,這會影響ODAC的版本,若全都裝在同一台,容易出錯的