레이블이 Oracle인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Oracle인 게시물을 표시합니다. 모든 게시물 표시

2018년 12월 20일 목요일

[IT] MS PowerBI - on-Premise 데이터 게이트웨이 사용


* 고려하게 된 배경

on-promise 내부에 있는 데이터를 클라우드에서 또는 외부(망 외부) 도구를 활용하여 데이터을 접근하고자 할때 내부 시스템 데이터에 접근하는 것이 한계가 있습니다. 이러한 방법보다 더 좋은 구성이 훨씬더 많겠으나 이러한 것도 있지 않을까 하며 찾다가 보니 한번 해봤습니다. 지극히 개인적으로 MS 제품을 잘 사용하지 않다보니 어색하기도 합니다.

- MS PowerBI Pro 버전 사용
- MS Azure 사용
- MS Office365 사용


* 상황
1. 내부의 데이터중 정제된 일부 데이터를 외부 공간으로 보내고 싶다.

2. 실제 데이터는 회사 내부 시스템 공간 데이터베이스에 있다.

3. BI 도구는 MS PowerBI 클라우드 버전을 사용한다.

4. 대시보드를 조직구성원에 일자별 업데이트된 내용으로 공유하고자 한다.

** 사전 전제 조건
MS - OFFICE365 또는 AZURE AD등 조직구성등록이 되어 있어야 가능 함


1. PowerBI - 데이터 게이트 웨이 설치 및 관리

 웹 클라우드 버전 로그인 후
 다운로드 메뉴 에서 데이터 게이트웨이 다운로드 후 설치

 * 설치 과정은 마이크로소포트에서 자세한 안내가 있다. 

 - 데이터 게이트 웨이 안내
  https://powerbi.microsoft.com/ko-kr/gateway/

 - 설치 안내 사이트
  https://docs.microsoft.com/ko-kr/power-bi/service-gateway-install 


 * 설치 과정정에서 생성하는 클라우드 Azure에서의 데이터게이트 웨이 생성이 있다.
   기존에 설치된 것이 있다면 인증 후 선택 할 수 있고 없다면 새로 생성 할 수 있다.

  현재(2018년 12월) 까지는 리전이 국내 중부/남부에는 아직 제공되지 않고 아시아 남동부로만 제공하는 것이 아쉽(?)다. 테스트 상태에서는 크게 이슈나 차이를 잘 모르겠으나 전문가가 아닌이상 더이상의 설명은 어렵겠다.


 * 설치 과정을 마무리 한 이후에 On-Premise 의 데이터 원본과 연결하는 정보를 입력하고 연결 할 수 있다.
 https://docs.microsoft.com/ko-kr/power-bi/service-gateway-manage


내부 조직원을 위한 공유로 사용을 테스트 하는 과정에서 알게 된 것인데 시각화 툴들이 아주 저렴하게 시장에 많이 나와있다. 다양한 종류들도 마찬가지이며 레포트나 대시보드를 공유하고 사용하려면 제품마다 넘어야 할 산들이 많은데 그중에 가장 큰 것이 과금체계인 것 같다. MS PowerBI 역시 클라우드에서 제공하는 공유 (Power BI Embedded)를 사용하는 경우는 비용이 기하급수로 증가 한다. 테스트 한번 해보려다 헉(!) 하고 놀랬다는 좀더 유연한 솔루션은 없는지 오늘도 찾아 헤메어 보려 한다. 

내부의 시스템에서 결국 클라우드로 전환 되어야 한다는 흐름에는 동의 하는데 아직도 망설이게 되는 것들이 과연 그것이 진정으로 비용절감인가가 몸에 와닿지 않는것은 나뿐일까.

2018년 1월 19일 금요일

Oracle SQL Developer or SQL Developer Data Modeler - Locale not recognized error


If you are using Oracle SQL Developer or SQL Developer Data Modeler on a Mac, you may get a "Locale not recognized" error. You can do the following:



1. Application icon - Right Click (or CTRL + Click) - Package Contents View




2. case #1- SQL Developer Data Modeler
Contents/Resources/datamodeler/datamodeler/bin/datamodeler.conf















2. case #2- SQL Developer
Contents/Resources/sqldeveloper/sqldeveloper/bin/sqldeveloper.conf


3. Add Option Text

AddVMOption -Duser.language=ko
AddVMOption -Duser.country=KR

4. Restart Application - Success

2017년 8월 14일 월요일

[Oracle] Memo - Oracle Function - TO_CHAR

---- 날자 계산하기 -----------------------------------------------------------------------------
-- 오늘날자 (현재날자 0시 0분 0초 ...)
SELECT to_char(trunc(sysdate,'dd')    ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;                

-- 내일날자 (다음날자 0시 0분 0초 ...)
SELECT to_char(trunc(sysdate,'dd') + 1,'yyyy/mm/dd hh24:mi:ss') FROM dual ;                

-- 내일날자 (다음날자 현재시 현재분 현재초 ...)
SELECT to_char(sysdate + 1 ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;


---- 달 계산하기 -------------------------------------------------------------------------------

-- 이번달 시작날자(현재달 1일 0시 0분 0초 ...)
SELECT to_char(trunc(sysdate,'mm') ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;                  

-- 이번달 시작날자(현재달 1일 현재시 현재분 현재초 ...)  
SELECT to_char(sysdate - TO_CHAR(SYSDATE, 'dd') + 1 ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;  

-- 다음달 시작날자(다음달 1일 0시 0분 0초 ...)
SELECT to_char(trunc(add_months(sysdate, + 1),'mm') ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;  

-- 다음달 시작날자(다음달 1일 현재시 현재분 현재초 ...)
SELECT to_char(add_months(sysdate, 1) - to_char(add_months(sysdate, 1), 'dd') + 1,'yyyy/mm/dd hh24:mi:ss') FROM dual ;

-- 다음달 오늘 날자(다음달 현재일 현재시 현재분 현재초 ...)
SELECT to_char(add_months(sysdate, 1) ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;


---- 년 계산하기 -------------------------------------------------------------------------------

-- 올해 시작날자(올해 1월 1일 0시 0분 0초 ...)
SELECT to_char(trunc(sysdate, 'yyyy') ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;    

-- 1년전 현재일자(전년 현재달 현재일 0시 0분 0초 ...)
SELECT to_char(trunc(add_months(sysdate, -12), 'dd'),'yyyy/mm/dd hh24:mi:ss') FROM dual ;  

-- 1년전 현재일자(전년 현재달 현재일 현재시 현재분 현재초 ...)
SELECT to_char(add_months(sysdate, -12),'yyyy/mm/dd hh24:mi:ss') FROM dual ;


---- 참고사항 -----------------------------------------------------------------------------------

-- TO_CHAR      : 숫자나 날짜를 문자열로 변환
-- TO_NUMBER    : 문자를 숫자로 변환
-- TO_DATE      : 문자를 날짜로 변환

SELECT sysdate() -1 FROM dual;   -- 현재시간 - 1일
SELECT sysdate() -1/24 FROM dual;  -- 현재시간 - 1시간
SELECT sysdate() -1/24/60 FROM dual;  -- 현재시간 - 1분
SELECT sysdate() -1/24/60/60 FROM dual;  -- 현재시간 - 1초

-- YYYY     : 4자리 연도로 표시
-- YY       : 끝의 2자리 연도로 표시
-- YEAR     : 연도를 알파벳으로 표시
-- MM       : 달을 숫자로 표시
-- MON      : 달을 알파벳 약어 로표시
-- MONTH    : 달을 알파벳으로 표시
-- DD       : 일자를 숫자로 표시
-- DAY      : 일에 해당하는 요일
-- DY       : 일에 해당하는 요일의 약어
-- HH       : 12시간으로 표시(1-12)
-- HH24     : 24시간으로 표시(0-23)
-- MI       : 분을 표시
-- SS       : 초를 표시
-- AM, PM   : 오전인지 오후인지를 표시


---- 기초 날자구하기 --------------------------------------------------------------------------

-- SYSDATE          : 현재 시스템의 날짜 및 시간을 구함
SELECT sysdate FROM dual;

-- LAST_DAY         : 지정한 날짜의 해당 월의 마지막 날짜를 구함
SELECT last_day(sysdate) FROM dual;

-------------------------------------------------------------------------------
-- 두 날자 사이의 차이 (1번째 인자가 2번째인자보다 작으면 음수, 크면 양수)
-- 날자를 구할때 날자이후 데이터 까지 있다면 계산이 시간단위까지 계산하는듯하다
-- 그래서 날자까지만 변환해서 잘라줘야 한다.

SELECT to_date(to_char(to_date('20120220042517','yyyymmddhh24miss'), 'yyyymmdd'), 'yyyymmdd') - to_date(to_char(sysdate, 'yyyymmdd'), 'yyyymmdd') FROM dual;
-------------------------------------------------------------------------------

-- MONTHS_BETWEEN   : 두달 사이의 개월 차이 (1번째 인자가 2번째인자보다 작으면 음수, 크면 양수)
SELECT MONTHS_BETWEEN(to_date('20120219','yyyymmdd'), sysdate) FROM dual;

-- ADD_MONTHS       : 현재달로부터 지정한 달의 날자를 구함 (즉 1달뒤 2달뒤 등의 날자를 구함)
SELECT add_months(sysdate, -3) FROM dual;

-- ROUND            : 날짜에 대한 반올림 (12시이후(12:00 00초포함)면 1일을 더함)
SELECT round(sysdate) FROM dual;
SELECT round(to_date('20110221120000', 'yyyymmddhh24miss')) FROM dual;

-- TRUNC : 날짜에 대한 버림
SELECT trunc(sysdate) FROM dual;


---- TO_CHAR 의 변환 형식들 ----------------------------------------------------------------

-- 9    : 일반적인 숫자를 나타냄
SELECT to_char('123', '999999') FROM dual;

-- 0    : 앞의 빈자리를 0으로 채움
SELECT to_char('123', '000000') FROM dual;

-- $    : dollar를 표시함
SELECT to_char('123', '$999999') FROM dual;

-- L    : 지역 통화 단위(ex \)
SELECT to_char('123', 'L999999') FROM dual;

-- . : 소숫점을 표시함
SELECT to_char('123', '999.999') FROM dual;
SELECT to_char('12.3', '999.999') FROM dual;

-- , : 천단위를 표시함
SELECT to_char('12345', '999,999,999') FROM dual;

2017년 6월 20일 화요일

[Oracle] Listener Start Error - CentOS 6.5 / Oracle 11gR2


Listener starts when it starts,


but listener was not starting when command "status" input.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.xxx)(PORT=xxxx)))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused



"hosts" File localhost add (Red Color Markup)

[oracle@ora11g admin]$ cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1        localhost.localdomain localhost
::1                localhost6.localdomain6 localhost6

192.168.10.11   oracle

My Case

[oracle@ora11g admin]$ cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.

192.168.10.11   oracle


But what you can not understand is why you do not know why. It is now running.

2017년 5월 23일 화요일

[Oracle] APEX(Applcation Express) Install on CentOS 6.5

1. Oracle Web Site apex install  : File Download
[root@oracle ~] wget http://download.oracle.com/otn/java/appexpress/apex_5.1.1.zip

2. unzip
[root@oracle ~] unzip apex_5.1.1.zip

create folder apex by this command

3. sql file execute
[root@oracle ~] cd apex

# sqlplus sys dba login
[root@oracle apex] sqlplus '/as sysdba'

SQL> !pwd
/home/oracle/apex

/*
Create Table Space

CREATE SMALLFILE TABLESPACE TBS_APEX
    DATAFILE
        '/home/oracle/app/oradata/TSUN/TBS_APEX' SIZE 1073741824 AUTOEXTEND ON NEXT 16384 MAXSIZE 34359721984
    BLOCKSIZE 8192
    DEFAULT NOCOMPRESS
    ONLINE
    SEGMENT SPACE MANAGEMENT AUTO
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

*/

/*@apexins.sql tablespace_apex tablespace_files tablespace_temp images */
SQL> @apexins.sql TBS_APEX TBS_APEX TEMP /images/
.......

** Command Result - Create Schema
APEX_PUBLIC_USER
APEX_050000
FLOWS_FILES

SQL> @apxchpwd.sql
==========================================================
This script can be used to change the password of an Application Express
instance administrator. If the user does not yet exist, a user record will be
created.
==========================================================
Enter the administrator's username [ADMIN]
User "ADMIN" does not yet exist and will be created.
Elapsed: 00:00:00.00
Enter ADMIN's email [ADMIN]
Enter ADMIN's password []
Created instance administrator ADMIN
Elapsed: 00:00:00.23

/* User Modify */
SQL> alter user APEX_PUBLIC_USER account unlock;
SQL> alter user APEX_PUBLIC_USER identified by "apex password";
SQL> alter profile DEFAULT limit PASSWORD_FILE_TIME unlimited;


/* APEX RESTful Service Database Schema Install */
SQL> @apex_rest_config.sql


4. Oracle REST Data Service (ORDS) Install - Stanalone Mode - File Download

[root@oracle ~] wget http://download.oracle.com/otn/java/ords/ords.3.0.9.348.07.16.zip

[root@oracle ~] unzip ords.3.0.9.348.07.16.zip

/* ords install & Setting */
[root@oracle ~]  java -jar ords.war install advanced

이 Oracle REST Data Services 인스턴스는 아직 구성되지 않았습니다.
다음 프롬프트에 값을 입력하십시오.
구성 데이터를 저장할 위치를 입력하십시오.: /home/public_html/dbtool/
데이터베이스 서버의 이름을 입력하십시오. [localhost]: ***.***.***.*** 
데이터베이스 수신 포트를 입력하십시오. [1521]: ****
데이터베이스 서비스 이름을 지정하려면 1을 입력하고, 데이터베이스 SID를 지정하려면 2를 입력하십시오. [1]:2
데이터베이스 SID를 입력하십시오. [xe]: ORATEST

Oracle REST Data Services 스키마를 확인/설치하려면 1을 입력하고, 이 단계를 건너 뛰려면 2를 입력하십시오. [1]:1
ORDS_PUBLIC_USER에 대한 데이터베이스 비밀번호를 입력하십시오.: New Password
비밀번호 확인:
Oracle REST Data Services 스키마를 확인하려면 SYSDBA 권한으로 로그인하십시오. 설치해야 할 수 있습니다.
설치를 확인하려면 SYSDBA 권한을 보유한 사용자 이름을 입력하십시오. [SYS]:
SYS에 대한 데이터베이스 비밀번호를 입력하십시오.:
비밀번호 확인:

Oracle REST Data Services 스키마가 존재하지 않으므로 생성됩니다.
ORDS_METADATA에 대한 기본 테이블스페이스을(를) 입력하십시오. [SYSAUX]:TBS_APEX
ORDS_METADATA에 대한 임시 테이블스페이스을(를) 입력하십시오. [TEMP]:
ORDS_PUBLIC_USER에 대한 기본 테이블스페이스을(를) 입력하십시오. [USERS]:TBS_APEX
ORDS_PUBLIC_USER에 대한 임시 테이블스페이스을(를) 입력하십시오. [TEMP]:

PL/SQL 게이트웨이를 사용하려면 1을 입력하고, 이 단계를 건너 뛰려면 2를 입력하십시오. [1]:2
Application Express RESTful Services 데이터베이스 사용자(APEX_LISTENER, APEX_REST_PUBLIC_USER)에 대한 비밀번호를 지정하려면 1을 입력하고, 이 단계를 건너 뛰려면 2를 입력하십시오. [1]:
APEX_LISTENER에 대한 데이터베이스 비밀번호를 입력하십시오.:
비밀번호 확인:
APEX_REST_PUBLIC_USER에 대한 데이터베이스 비밀번호를 입력하십시오.:
비밀번호 확인:

독립형 모드를 시작하려면 1을 입력하고, 종료하려면 2를 입력하십시오. [1]:1
HTTP 포트를 입력하십시오. [8080]: 8081


5. image Folder copy or move
[root@oracle ~] mv /home/oracle/apex/images /home/oracle/dbtool//home/oracle/dbtool/ords/standalone/doc_root/

or comment
example ords folder

/home/oracle/dbtool/
/home/oracle/dbtool/ords/
/home/oracle/dbtool/ords/conf/
/home/oracle/dbtool/ords/standalone/
/home/oracle/dbtool/ords/standalone/doc_root/
/home/oracle/dbtool/ords/standalone/doc_root/images

2017년 5월 19일 금요일

[Oracle DV] Oracle Data Visualization install error

If Oracle Data Visualization install error message

" The System cannot find the path specified. "

Press any key to continue ...


and if Windows 7 is installed, try the following.


1. Start Command Prompt (Administrator privileges)

2. Manual installation

C:\Program Files\Oracle Data Visualization Desktop\>install_advanced_analytics.cmd _payload_ C:\Program Files\Oracle Data Visualization Desktop




2017년 5월 3일 수요일

[Python] Oracle Client Install & cx_Oracle Install on Mac


1. Download Instant Client - Oracle Web Site :

instantclient-basic-macos.x64-11.2.0.4.0.zip
instantclient-sdk-macos.x64-11.2.0.4.0.zip
instantclient-sqlplus-macos.x64-11.2.0.4.0.zip

Unzip and move to /Library/Oracle

1.1 .bash_profile Files Modify
export DYLD_LIBRARY_PATH="/Library/Oracle/instantclient_11_2"
export TNS_ADMIN="/Library/Oracle/instantclient_11_2"
export ORACLE_HOME="/Library/Oracle/instantclient_11_2"
export OCI_LIB="/Library/Oracle/instantclient_11_2"
export OCI_INCLUDE_DIR="/Library/Oracle/instantclient_11_2/sdk/include"

export PATH=$DYLD_LIBRARY_PATH:$PATH

2. Create symlink

 $ cd /Library/Oracle/instantclient_11_2/
 $ ln -s libclntsh.dylib.11.1 libclntsh.dylib

[ This step might not be needed ]

3. Copy files:

 sudo cp /Library/Oracle/instantclient_11_2/sdk/include/*.h /usr/include/
 sudo cp /Library/Oracle/instantclient_11_2/*.dylib /usr/lib
 sudo cp /Library/Oracle/instantclient_11_2/sqlplus /usr/bin

If it needs root permission, sudo to root first.

Make sure you do this rather than sudo because you need to set the environment variable in the correct shell

if Mac OS - Operation not Permitted
Refenece - http://macnews.tistory.com/3408


4. Run pip install cx_Oracle

Installl Complete

2016년 10월 13일 목요일

[Oracle] UTL_HTTP 패키지를 활용한 웹서비스 호출 또는 URL CALL

웹/앱 리뉴얼 프로젝트를 진행 중에 내부에서 처리해야할 프로세스상 로직이 있었는데 오라클(데이터베이스) 단계에서 처리가 곤란하게 되어 외부서비스(웹)의 특정 URL/URI를 호출해야 되는 경우가 생겼다. 구글링으로 검색을 해도 상세히 설명 된 곳이 별로 없다. 잠깐 보게 되면 남겨져 있는 대부분 같은 질문과 대답만 있을 뿐이었다.

#별것도 아닌 것으로 하루 시간을 보낸걸 생각하니 화가 치밀어 오르기도 하면서 나와 같은 사람이 분명 있을 꺼라 생각을 하고 정보를 공유하니 도움이 되시길 바란다. 이보다 여러가지 형태의 호출/호출 후 응답 데이터 활용 등이 있을 수 있으나 해당 포스팅에서는 웹서비스 호출을 하기 위한 준비 정도까지만 공유 하고자 한다.

#설정 후 그 이후 단은 적용하고자 하는 도메인과 요구사항에 따라 달라질 수 있으니 해당 내용에서는 제외 한다.

1. 자 일단 Oracle 에서는 웹서비스 호출 및 메일보내기(?) 등을 사용하기 위해 몇몇의 기본 패키지들을 제공하고 있다.

UTL_URL : URL의 인코딩/디코딩 하는 것을 지원
UTL_TCP : TCP/IP를 사용하여 외부 웹서버와 통신할 수 있는 기능을 제공
 - 참고 : "뇌를 자극하는 오라클 프로그래밍" p576  참고 하시길
UTL_SMTP - 메일보내기

이 포스팅에서 소개할 내용과 실사 내용 보고는 아래의 UTL_HTTP 이다.

UTL_HTTP : Oracle에서 web service 호출을 위한 기능 제공
 - Oracle Help Center : 바로가기


1) UTL_HTTP 패키지를 사용하기 위해서는 우선 ACL(Access Control List - 접근제어목록) 에 사용할 데이터베이스 사용자에게 권한을 부여해야 한다. 아래의 3가지 예제를 통하여 우선 진행 해보자.

 * Example Source
1-1) ACL에 사용하고자 하는 것을 추가 한다.

BEGIN
    DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
              acl => 'my_test_utl_http.xml',
              description => '테스트용 ACL 입니다. ',
              principal => 'ORACLE_USER',  -- ORACLE_USER란 사용자에게 권한 할당
              is_grant => true,
              privilege => 'connect');

      COMMIT;
END;

1-2) ORACLE_USER에게 권한을 할당 .
BEGIN
    DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE (
              acl => 'my_test_utl_http.xml',
              principal => 'ORACLE_USER',  -- ORACLE_USER란 사용자에게 권한 할당
              is_grant => true,
              privilege => 'connect');

      COMMIT;
END;

1-3) 접속할 HOST 정보를 추가
BEGIN
   DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
                         acl          => 'my_test_utl_http.xml',              
                         host         => 'www.oracle.com',
                         lower_port => 80,
                         upper_port => 80);
   COMMIT;
END;

2) 추가된 접속 정보가 잘들어 갔는지 SYS AS SYSDBA 권한으로 조회를 확인

select * from DBA_NETWORK_ACLS;
select * from DBA_NETWORK_ACL_PRIVILEGES ;

정상적으로 조회가 된다면 사전 준비가 된것 이다.
이제 간단하게 확인을 해보자.


* Example Source

DECLARE
  req   UTL_HTTP.REQ;
  resp  UTL_HTTP.RESP;
  value VARCHAR2(1024);

BEGIN

  req := UTL_HTTP.BEGIN_REQUEST('http://www.oracle.com');
  UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/4.0');
  resp := UTL_HTTP.GET_RESPONSE(req);

  LOOP
    UTL_HTTP.READ_LINE(resp, value, TRUE);
    DBMS_OUTPUT.PUT_LINE(value);
  END LOOP;
  UTL_HTTP.END_RESPONSE(resp);

EXCEPTION WHEN UTL_HTTP.END_OF_BODY THEN
    UTL_HTTP.END_RESPONSE(resp);
END;

결과적으로 해당 웹사이트에 대한 응답에 결과를 출력하게 되므로 HTML 소스의 응답부분을 출력하게 될 것이다. 여러가지 오류사항이 나타날 수 있다. 나 역시 그런 오류들이 당황스럽게 만들기도 하였으니 몇 가지만 공유 하면 다음과 같다.


** 자주보게 되는 오류
* ORA-24247: network access denied by access control list (ACL)
- ACL 설정에 대한 문제 : 사전 준비과정에서 ACL 정보가 잘못들어 간 곳은 없는지 확인하는게 좋다. 가끔 오타가 있는경우가 많을 것이다.

사전 준비 과정에서의 ACL 값을 다 지우고 다시 하고 싶다면 아래의 프로시저를 사용 하면 된다.

exec DBMS_NETWORK_ACL_ADMIN.DROP_ACL(acl => 'my_test_utl_http.xml');

해당 ACL명칭을 사용된 이름을 확인하여 삭제 하면 된다.

* ORA-29273: HTTP request failed
* ORA-06512: at "SYS.UTL_HTTP", line 1130
* ORA-12541: TNS:no listener
* ORA-06512: at line 1

나 처럼 네트워크 라우팅문제 이거나 DNS 문제로 인하여 발생하는 어처구니 없는 상황일 수 있다. 네트워크 담당자에게 확인하거나 본이이 직접 해결하던가 필요 하다. 어찌 되었든 지속적인 접근에 응답이 없어서 그러한 것이다.

왜 안되지 안되지 하면서 허송세월 보내다가 CENTOS 서버 쉘에서

LINUX #] curl -v www.oracle.com

으로 실행해 보니 접속 내역을 보면서 확인 할 수 있다. 확인하다 보니 해당 도메인을 찾지 못하거나 IP정보의 네트워크 상의 라우팅 문제일 수 있으니 말이다. 모두가 쉽게 해결 되길. 좀더 상세한 각 패키지의 기능은 오라클 Help Center 를 활용하시길..


2016년 4월 22일 금요일

[전산실 이야기] Oracle RAC 구성을 결정 하다 - 준비하기

규모가 그리 크지 않은 회사들만을 경험하다 보니 사실 이론적으로만 이해하고 있던 부분에 대해서 실제적인 경험으로 다기 올 때는 두려움과 설레임 두 가지가 함께 다가 온다. 물론 나는 DBA 이거나 아키텍처를 설계하는 엔지니어가 아닌 사내 내부 프로그램을 개발 하는 응용프로그래머 입장에서의 정리 내용이므로 깊이 있는 데이터베이스에 대한 것들은 전문적인 사이트에서 참고 하시는 것을 권한다.

http://www.dbguide.net/ 또는 http://database.sarang.net/


일반적으로 지금까지 경험해본 것은 대부분 단독형(Stand Alone)형태 이거나 복구용 이중화가 구성된 Active - Standby 구조만 경험해 보았다. 단독형의 경우에는 사용하던 오라클 인스턴스에 장애가 나거나 스토리지 부분에 장애에 대한 위험/리스크가 크기 때문에 최소한 이중화 정도 까지는 구현을 하는 것이 맞지 않나 싶다. 그런데 흔하게 이중화라고 하는
HA(High Availability) 구성이란 노드(Node Server로 이해하자) 1개는 항상 서비스를 하고 있는 활성(Active) 상태이고 나머지 한대는 장애가 발생하지 않는 한 항상 대기(Standby) 상태 이다. HA방식이 장애에 대응하는 구조를 가지고 있긴 하나 서비스 정지(Down Time)을 가진다는 것이다.

내부적으로 지금과 같은 중소(?) 규모의 시스템에서 과연 HA와 RAC 중 어느것을 해야 하는가에 대한 고민을 하게된 대목이기도 하다. 결국 비용차이가 그리 크지 않다는 전제하에 RAC로 결정을 하긴 하였으나 항상 그러하들 의사결정 후엔 불안과 설렘이 공존한다. 과연 잘한것인가? 아니 잘했을꺼야 하고 그걸 합리화 시키는 건지도 모른다. 어찌 되었든 HA구성이 가지고 있는 문제를 보완하여 나온 구조가 RAC 인것 같다. 인터넷을 이것 저것 찾아 보니 과거 버전엔 OPS(Oracle Parallel Server) 구성이란 것으로 처리 한것으로 보이는데 일단 이글 내용에선 제외하고 현재 시점에서의 내용만 기록을 남겨 보도록 한다.

음식점이니 간단한 시나리오로 정리 해보자면

1. 단독형 (Stand Alone)
  - 음식 주문 했다.
  - 장애 발생
  - 일단 주문도 안된다. 주문 됐는지도 확인 안된다.
  - 다시 살아 날때 까지 아무것도 못한다.

( 그러나 사실 음식접업 특성상 시스템이 다 죽어 버린다 한들 가능은 하다. 그래도 최소한 전기는 들어와야 한다. 눈감고 먹긴 힘드니까 - 단 밥을 언제 먹을 수 있을지는 장담하지 못하겟다. )

2. HA(High Availability)
   - 음식주문 창구 1 , 조리 창구 1 (음식주문/창구 2 대기)
   - 장애 발생
   - 음식주문 창구 2, 조리 창구 2 ( 대기 하고 있다 대신 처리 단, 처음 부터 다시 )
   - 가끔 서비스는 다시 가능 한데 전에 주문 했던걸 다시 해야 할수 있음(동기화 문제)
   - 일단 처리는 될 수 있으나 일정(수초 ~ 수분)한 시간 이후에 가능
   - 불편할 수 있으나 대응은 되었다고 본다.

( 그러나 사실 이것 또한 엄청 심한 컴플레인 요소가 되기도 한다. 음식점업 특성상 몰리는 시간이 정해져 있다. 점심/저녁 시스템에서 확인해야 할 할인내역이나 쿠폰 조회가 되지 않는다면 상상 해보라. 피크시간 다운타임 수분은 피를 말리는 일중 하나이다. )

위와 같은 상황을 격고 싶지는 않다는 것이 결론이었다. RAC 구축을 한다고 내부적으로 결론을 내렸다. 헉.. 그런데 돈이 엄청 든다. 물론 Enterprise 가격은 어마 어마 한것에 비하면 많지는 않으나 진짜 이걸 함으로 인해서 모든 장애 요소와 성능의 향상을 기대 할 수 있을까? 하는 두려움이 밀려 온다.

Oracle RAC(Real Application Clusters)는 두대의 서버(Node)에 하나의 스토리지를 공유하는 구조로 가져가고자 한다. 이러한 구조에서는 서버에는 각 인스턴스를 1개씩 구성하고 저장소는 공유하는 구조이다. RAC를 적용하기 이전 OPS는 인스턴스에서 하던 작업의 내용을 디스크에 저장해 두었다가 장애가 발생하였을 때 다른 인스턴스가 디스크에 있는 내용을 로드하여 처리를 해주는 방식이다 보니 디스크에 내용을 저장하고 다시 올려주는 과정에서의 성능적인 부하가 있었던 모양이다. RAC는 서로 다른 Instance 에서 변경된 데이터를 저장 디스크를 거치지 않고 바로 Instance 로 가져올 수 있는 기능인 캐시퓨전(Cache Fusion) 이라는 기능이 사용된다. 캐시퓨전은 서로 독립적인 인스턴스를 마치 하나의 인스턴스인것 처럼 데이터의 교환이 이루어지면서 섞여 있다라는 의미로 해석할 수 있을것 같다.

명확하게 어떤 숫자들을 봐야 하는지 뭐 전문가가 아니다 보니 사실 참 어렵다 어렵다는 생각을 항상 하게 된다. 그렇다고 전산실이 해당 업체를 100% 신뢰 하느냐? 뭐 상황이나 사람마다 다르겠으나 나는 보면 51%와 49%를 왔다 갔다 하는 편이다 보니 어떠한 자료와 근거를 요청 하고 다른곳에서도 비교해보는 것들을 하곤 한다. 모든 분야에 전문가가 될 수 없다 보니 사실 이런 부분이 어느 정도는 믿음을 가져주고 가는 경우가 많지 않을까.

기존의 단독형 구조에서 RAC구로로의 변화 뿐 아니라 기존의 WIN949 캐릭터셋에서 UTF-8로의 변화가 함께 진행 되는 나름 큰 마음 먹고 진행 하는 과정이 더 있어 어떤 부분들을 어떻게 좀더 신경을 써야 하고 스케쥴관리를 해야 하는지에 대한 것이 더 많을 것으로 생각이 된다. 오늘은 그것의 시작으로 어떤 항목과 어떤 단계의 과정에서 어떻게 준비하고 대응해야 하는지 작업을 시작하기 전에 간략하게 단독형(Stand Alone)과 RAC(Real Application Clusters) 구조에 대해서만 간략하게 기술해 보았다.

다음 포스트엔 체크포인트에 대한 부분과 전산실에서의 IT투자 후 평가에 대한 부분을 간략하게 나마 정리해보고자 한다. 규모에 대한 차이는 아니나 그러한 부분에 대해서 소홀 했던것은 사실이다. 우리에게 어떤 방향성이 있어야 하고 어떤 접근을 해야 하고 그래서 우리는 이것이 필요 합니다. 투자해주세요. 한 이후에 적절한 IT투자에 대한 효과 분석이나 평가분석이 부재 하였던 것은 스스로에게도 좀 부끄러운 일이고 조직에도 반드시 필요한 사례인것 같다.

혹 지나다 어설픈 저의 글을 보신 전문가 분들이 계시다면 덧글로 고견을 남겨 주시고 또 도움을 주실수 있는 의견도 언제든지 열려 있습니다.

오늘의 기록은 여기까지 이제 다시 현업으로.... 전산실의 길은 언제까지 일까..





2016년 3월 25일 금요일

[Oracle] NLS Data Format Alter

# OS에서 SYSDBA SQLPLUS 접속

oracle$ sqlplus / as sysdba

SQL> alter system set nls_date_format='DD-MON-RR' scope=spfile;
SQL> alter system set nls_date_language='AMERICAN' scope=spfile;
SQL> alter system set nls_iso_currency='AMERICA' scope=spfile;
SQL> alter system set nls_language='AMERICAN' scope=spfile;
SQL> alter system set nls_territory='AMERICA' scope=spfile;
SQL> alter system set nls_time_format='HH.MI.SSXFF AM' scope=spfile;
SQL> alter system set nls_time_tz_format='HH.MI.SSXFF AM TZR' scope=spfile;
SQL> alter system set nls_timestamp_format='DD-MON-RR HH.MI.SSXFF AM' scope=spfile;
SQL> alter system set nls_timestamp_tz_format='DD-MON-RR HH.MI.SSXFF AM TZR' scope=spfile;

SQL> startup force;  è DB 재시작


SQL> show parameter nls  è 잘 변경되었는지 확인

2014년 7월 28일 월요일

[MSSQL] Windows 7 - ODBC "SQLSTATE = IM014" Error Tip


[Error Messages] SQLSTATE = IM014



Source URL - http://msdn.microsoft.com/en-us/library/windows/desktop/ms712362%28v=vs.85%29.aspx


To manage a data source that connects to a 32-bit driver under 64-bit platform, use c:\windows\sysWOW64\odbcad32.exe. To manage a data source that connects to a 64-bit driver, use c:\windows\system32\odbcad32.exe. In Administrative Tools on a 64-bit Windows 8 operating system, there are icons for both the 32-bit and 64-bit ODBC Data Source Administrator dialog box.



2014년 1월 9일 목요일

[ORACLE] FUNCTION - GREATEST OR LEAST


MAX VALUE --> GREATEST(EXPR1, EXPR2, ..., EXPR-N)  
MIN VALUE --> LEAST(EXPR1, EXPR2, ..., EXPR-N)


SAMPLE) 100 = GREATEST(100, 50, 20) --> TRUE 
SAMPLE) 20 = LEAST(100, 50, 20) --> TRUE 
SAMPLE) NULL = LEAST(100, 50, 20, NULL) --> TRUE 

* EXCEPTION
SAMPLE) 'A' = LEAST(100, 50, 20, NULL, 'A') --> ERROR 

[ORACLE] PL/SQL PREDEFINED EXCEPTION - 미리정의된 예약


오랜만에 PL/SQL을 하다 보니 예외처르 부분에 대해서 작성하다가 자꾸 책을 찾아 보게 되서 정리된 내용을 블러그에 올려 놓고 참고 하기로


예외내용예외번호SQLCODE발생시점
ACCESS_INTO_NULLORA-06530-6530초기화 되지 않은 오브젝트에 값을
할당하려고 할 경우 
CASE_NOT_FOUNDORA-06592-6592CASE 문장에서 ELSE 구문도 없고 WHEN 절에 명시된 조건을 만족하는 것이 하나도 없을 경우 
COLLECTION_IS_NULLORA-06531-6531초기화 되지 않은 중첩 테이블이나 VARRAY 같은 콜렉션을 EXISTS 외의 다른 메소드로 접근을 시도할 경우 발생 
COURSOR_ALREADY_OPENORA-06511-6511이미 오픈된 커서를 다시 오픈하려고
시도 하는 경우 
DUP_VAL_ON_INDEXORA-00001-1유일 인덱스가 걸린 컬럼에 중복
데이터를 입력할 경우 
INVALID_CURSORORA-01001-1001허용되지 않는 커서에 접근할 경우
(오픈되지 않은 커서를 닫으려고 시도하는 경우) 
INVALID_NUMBERORA-01722-1722SQL 문장에서 문자형 데이터를 숫자형으로 변활할 때 제대로 된 숫자로 변환이 되지 않을 경우 
LOGIN_DENIEDORA-01017-1017잘못된 사용자나 비밀번호로
로그인을 시도 할 때 
NO_DATA_FOUNDORA-01403100SELECT INTO 문장의 결과로 선택된
로우가 하나도 없을 경우 
NOT_LOGGED_ONORA-01012-1012오라클에 연결되지 않았을 경우 
PROGRAM_ERRORORA-06501-6501PL/SQL 내부에 문제가 발생했을 경우 
SELF_IS_NULLORA-30625-30625OBEJCT 타입이 초기화 되지 않은 상태에서 MEMBER 메소드를 사용할 경우 
STORAGE_ERRORORA-06500-6500메모리가 부족한 경우 
SUBSCRIPT_BEYOND_CONUNTORA-06532-6532충첩 테이블이나 VARRAY의 요소값에 접근할 때, 명시한 인덱스 번호가 콜렉션 전체 크기를 넘어서는 경우 
SUBSCRIPT_OUTSIDE_LIMITORA-01410-1410충첩 테이블이나 VARRAY의 요소값에 접근할 때, 잘못된 인덱스 번호를 사용할 경우 
SYS_INVALID_ROWIDORA-01410-1410문자열을 ROWID로 변환할 때 변환값에 해당하는 ROWID값이 없을 경우 
TIMEOUT_ON_RESOURCEORA-00051-51오라클이 리소스를 기다리는 동안
타임아웃이 발생했을 때 
TO_MANY_ROWSORA-01422-1422SELECT INTO 문장에서 하나 이상의
로우가 반환될 때 
VALUE_ERRORORA-06502-6502문자형 데이터를 숫자형으로 변환하는데 타당한 숫자가 아니거나 값을 할당 시 값의 크기가 선언된 변수의 크기를 넘어서는 경우와 같이 값을 변환하거나 할당할 때 오류가 발생할 경우 
ZERO_DIVIDEORA-01476-1476제수가 0일때 발생

2012년 3월 13일 화요일

[Oracle] Database EXPORT / IMPORT

EXPORT
EXPORT?
  - 오라클에서 제공하는 논리적인 백업에 사용되는 유틸리티로써, binary file 형태로 기록한다.
  - $ORACLE_HOME/bin 디렉토리 안에 exp 실행파일이 있다. 윈도우의 경우 exp.exe파일
  - 데이터베이스가 가동중인 상태에서 실행한다.
  - 전체 데이터베이스, 특정 사용자, 특정 테이블들을 EXPORT 할 수 있다.
  - 권한, 인덱스, 제약조건들과 테이블들과 연관되는 데이터 딕셔너리 정보도 EXPORT 할 것인지를 선택할 수 있다.
  - 마지막 EXPORT 이후로 변경된 테이블들에 대해서만 EXPORT 작업을 실행 할 수도 있다.
EXPORT 옵션
  - userid : EXPORT를 실행시키고 있는 username/password .
  - buffer : 데이터 행들을 가져오는데 사용되는 버퍼의 크기.
  - file : 생성되는 EXPORT덤프 파일명
  - filesize : EXPORT덤프 파일의 최대 크기
  - grants : 데이터베이스 객체에 대한 권한 정보의 EXPORT여부 (Y/N 플래그)
  - indexes : 테이블에 대한 INDEXES EXPORT여부 (Y/N 플래그)
  - rows : 행들에 대한 EXPORT여부. (Y/N 플래그) 만약 "no"이면 데이터는 EXPORT 되지않고 테이블의 정의만 EXPORT 된다.
  - constraints : 테이블에 대한 제약조건 정보의 EXPORT여부 (Y/N 플래그)
  - compress : IMPORT에 대비하여 테이블의 데이터를 한 extent로 압축 할것인가의 여부(Y/N 플래그)
  - full : 전체 데이터베이스를 EXPORT할것인가의 여부 (Full Level EXPORT) (Y/N 플래그)
  - owner : EXPORT 될 데이터베이스의 소유자 명 (User Level EXPORT)[owner=user]
  - tables : EXPORT될 테이블의 리스트(Table Level EXPORT) [tables=(table1, table2, ...)]
  - help : EXPORT 실행 시 파라미터에 관한 설명을 보여준다.
  - tablespaces : EXPORT 될 테이블스페이스의 리스트
  - log : EXPORT 실행 과정을 지정된 로그 파일에 저장
Full Level EXPORT
  전체 데이터베이스가 엑스포트 된다. 모든 테이블스페이스, 모든 사용자, 또한 모든 객체, 데이터들이 포함 된다.

exp userid=system/manager file='C:\full.dmp' full=y
User Level EXPORT
  - 사용자 객체들이 EXPORT 되고 객체들 안에 있는 데이터도 EXPORT 된다.
  - 사용자 객체에 대한 모든 권한들과 인덱스들도 EXPORT 된다.
-- 사용자 자신이 만든 모든 오브젝트를 그 user EXPORT하는 방법
C:\>exp userid=scott/tiger file='C:\scott.dmp' 
-- SYSTEM계정으로 특정 user소유의 오브젝트들을 EXPORT 하는 방법
C:\>exp userid=system/manager owner=scott file='C:\scottuser.dmp' 
Table Level EXPORT
  명시된 테이블만 EXPORT 되며, 테이블의 구조, 인덱스, 권한등이 테이블과 함께 EXPORT 된다.

-- SYSTEM계정으로 특정 유저의 table EXPORT하는 예제
-- 다른 계정으로 EXPORT table user명까지 지정해야 EXPORT가 성공한다.
C:\>exp userid=system/manager file='C:exp.dmp' tables=(scott.EMP, scott.DEPT)
 -- scott user table을 몇 개만EXPORT하는 예제
-- 자신의 table EXPORT할 때에는 user명을 지정할 필요가 없다.
C:\>exp userid=scott/tiger file='C:\exp.dmp' tables=(EMP, DEPT) log=exp.log




IMPORT

IMPORT란?

  - EXPORT 덤프 파일을 읽어서 그 안에 저장되어 있는 명령을 실행시킨다.
  - $ORACLE_HOME/bin 디렉토리 안에 imp 실행파일이 있다. 윈도우의 경우 imp.exe파일
  - 데이터베이스를 복구하거나 재구성 하기위해 사용 한다.
  - IMPORT를 수행하기 위해서는 반드시 EXPORT한 dump file이 존재해야 하며, dump file 받은 EXPORT옵션에 따라서 IMPORT는 제약을 가질 수 있다.

IMPORT 옵션

  - userid : IMPORT를 실생시키는 계정의 username/password 명
  - buffer : 데이터를 행들을 가져오는데 사용되는 buffer의 bytes 수
  - file : IMPORT될 EXPORT 덤프 파일명
  - show : 파일 내용이 화면에 표시되어야 할 것인가를 나타냄(Y/N 플래그)
  - ignore : IMPORT중 CREATE명령을 실행할 때 만나게 되는 에러들을 무시할 것인지 결정(Y/N 플래그)
  - indexes : 테이블 INDEX의 IMPORT여부(Y/N 플래그)
  - rows : 테이블 데이터를 IMPORT할 것인가(Y/N 플래그) 만약 "N"로 설정하면 데이터베이스 객체들에 대한 DDL만이 실행된다.
  - full : FULL엑스포트 덤프 파일이 IMPORT 할때 사용한다.
  - tables : IMPORT될 테이블 리스트
  - commit : 배열(배열의 크기는 BUFFER에 의해 설정됩니다) 단위로 COMMIT을 할것인가 결정 기본적으로는 테이블 단위로 COMMIT을 한다.
  - fromuser : EXPORT덤프 파일로 부터 읽혀져야 하는 객체들을 갖고 있는 테이터베이스 계정
  - touser : EXPORT덤프 안에 있는 객체들이 IMPORT될 데이터베이스 계정

IMPORT 예제

 
-- 전체 데이터베이스가 IMPORT(Full Level Export file을 Import)
C:\>imp userid=system/manager file='C:\full.dmp'  full=y


-- User Level Export file을 Import
C:\>imp userid=scott/tiger file='C:\scott.dmp'


-- User Level Export file을 다른 계정으로 IMPORT
-- scott 유저의 데이터를 EXPORT받아 test 유저에게 IMPORT하는 예제 
C:\>exp userid=system/manager file='C:\scott.dmp' owner=scott
C:\>imp userid=system/manager file='C:\scott.dmp' fromuser=scott touser=test 


출처 -- 오라클클럽

언제 부터 였던가 생각해보니 아르바이트 겸 외부 컨설팅을 의뢰 받고 맥북 프로를 처음 써봤을 때 부터 였던 것 같다. 지금은 거의 대부분의 작업을 맥으로 작업을 하다 보니 윈도우에서만 실행되는 일부 프로그램들 때문과 회사 내부 ERP프로그램이 윈도우 ...