2015年9月14日 星期一

Java Method for Regular Expression


以下 Method 為判斷字串是否符合所設定之 Regular Expression

    /**
     * Get the match result between string and regular expression pattern string
     *
     * @param patternStr - Regular expression pattern string.
     * @param testString - String for testing with match pattern.
     * @return true/false: String is match (true), or is not match (false).
     */
    public static boolean isRegexMatch(String patternStr, String testString) {
        Pattern pattern = Pattern.compile(patternStr);
        Matcher matcher = pattern.matcher(testString);
       
        return matcher.matches();
    }

2015年2月9日 星期一

清除 Oracle Data Pump Job

步驟 1:找出正在執行的 JOB


用 system 帳號登入 oracle 並利用下面 SQL 指令
SQL> select job_name, state from dba_datapump_jobs;

JOB_NAME         STATE
------------------------------ ------------------------------
SYS_IMPORT_SCHEMA_02        EXECUTING
SYS_EXPORT_SCHEMA_01        NOT RUNNING
SYS_IMPORT_SCHEMA_01        NOT RUNNING
SYS_EXPORT_SCHEMA_02        NOT RUNNING
 
看到 STATE = EXECUTING 則代表此 JOB 正在執行中,因此我們可以先將 JOB_NAME 記下來
此例子 JOB_NAME = SYS_IMPORT_SCHEMA_02 

步驟 2:執行 Impdp utility
 
   impdp system/******* attach=system.SYS_IMPORT_SCHEMA_02 
system/******* ==> 代表 system 之帳號及密碼

執行結果:
Import: Release 11.2.0.3.0 - Production on Sab May 19 21:55:38 2012

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

Job: SYS_IMPORT_SCHEMA_02
  Owner: system
  Operation: IMPORT
  Creator Privs: TRUE
  GUID: C06A6B4EAEB4122ER0434EDH74850F
  Start Time: Sabado, 19 Mayo, 2012 21:55:04
  Mode: SCHEMA
  Instance: BD1
  Max Parallelism: 1
  EXPORT Job Parameters:
  Parameter Name      Parameter Value:
     CLIENT_COMMAND        system/******** SCHEMAS=SCHEMA DIRECTORY=BCK dumpfile=export_SCHEMA.dmp logfile=export.SCHEMA.log reuse_dumpfiles=true
  IMPORT Job Parameters:
     CLIENT_COMMAND        system/******** SCHEMAS=SCHEMA DIRECTORY=BCK dumpfile=export_SCHEMA.dmp logfile=import_SCHEMA.log
  State: EXECUTING
  Bytes Processed: 90.681.272
  Percent Done: 98
  Current Parallelism: 1
  Job Error Count: 0
  Dump File: /bck/export_SCHEMA.dmp

Worker 1 Status:
  Process Name: DW00
  State: EXECUTING
  Object Schema: SCHEMA
  Object Name: TABLE_EXAMPLE
  Object Type: SCHEMA_EXPORT/TABLE/TABLE_DATA
  Completed Objects: 28
  Completed Bytes: 90.832
  Worker Parallelism: 1

Import> 

亦可透過 STATUS 指令觀察該 Job 之狀態:
Import> STATUS
Job: SYS_IMPORT_SCHEMA_02
  Operation: IMPORT
  Mode: SCHEMA
  State: EXECUTING
  Bytes Processed: 91.676.344
  Percent Done: 99
  Current Parallelism: 1
  Job Error Count: 0
  Dump File: /bck/export_SCHEMA.dmp

Worker 1 Status:
  Process Name: DW00
  State: EXECUTING
  Object Schema: SCHEMA
  Object Name: TABLE_OBJECTS_EXAMPLE
  Object Type: SCHEMA_EXPORT/TABLE/INDEX/INDEX
  Completed Objects: 38
  Worker Parallelism: 1
 
步驟 3:刪除 Job
Import> kill_job
Are you sure you wish to stop this job ([yes]/no):
 
 
步驟 4:刪除 Table (若 Table 還在)
sqlplus / as sysdba
SQL> drop table SYS_IMPORT_SCHEMA_02;
Table dropped. 
 
參考資料:http://albertolarripa.com/2012/05/19/clean-oracle-data-pump-jobs/

How to delete/remove non executing datapump jobs?
https://pavandba.com/2011/07/12/how-to-deleteremove-non-executing-datapump-jobs/

Kill, cancel and resume or restart datapump expdp and impdp jobs
http://blog.oracle48.nl/wordpress/killing-and-resuming-datapump-expdp-and-impdp-jobs/

Find DB Session and DB Process by Server Process ID  (SPID)
--Find Session by SPID (Server Process ID)
SELECT
     S.SID,
     S.SERIAL#,
     S.PROCESS,
     P.SERIAL# PROCESS_SERIAL#,
     P.PID,
     P.SPID,
     S.LOCKWAIT,
     S.STATUS,
     S.LOGON_TIME,
     S.MODULE,
     S.ACTION,
     S.MACHINE
FROM
     V$SESSION S,
     V$PROCESS P
WHERE 1 = 1
AND S.PADDR = P.ADDR
AND (
     P.SPID IN (
          '21581','21674','23559'
     )
)


2015年1月21日 星期三

Oracle Database 刪除目前 User 底下所有 Table

首先利用下面的 SQL Command,即可將刪除 Table 之 SQL command 全部產生出來:

select 'drop table '||table_name||' cascade constraints;' from user_tables order by table_name

接下來批次執行所有產生出來的 SQL command 即可

2015年1月18日 星期日

JSON 與 Map 互轉 (使用 GSON)


import java.lang.reflect.Type;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;

public class JsonUtils {
  
    public static Map<String, Object> fromJson(String json) {
        return fromJson(json, Map.class);
    }

    public static String toJson(Object src) {

        Gson gson = new Gson();
        return gson.toJson(src);
    }

    public static <T> T fromJson(String json, Type typeOfT) {
        Gson gson = new Gson();
        return (T) gson.fromJson(json, typeOfT);
    }
   
    public static boolean isValidJson(String json) {
        try {
            fromJson(json);
            return true;
        } catch(JsonSyntaxException ex) {
            return false;
        }
    }
   
    public static boolean isValidJson(String json, Type typeOfT) {
        try {
            fromJson(json, Map.class);
            return true;
        } catch(JsonSyntaxException ex) {
            return false;
        }
    }
}

使用方式:
[JSON Map]
Map<String, Object> retMap = JsonUtils.fromJson(jsonData);
傳入 JSON 字串 jsonData ==> JsonUtils.fromJson(jsonData)
回傳型態為 Map<String, Object> map: retMap

[Map JSON]
String jsonString = JsonUtils.toJson(mapData);
傳入 型態為 Map<String, Object> map mapData ==> JsonUtils.toJson(mapData);
回傳 JSON 字串 jsonString