'분류 전체보기'에 해당되는 글 108건

  1. 2014.11.17 자바스크립트에서 replace를 replaceAll 처럼 사용하기
  2. 2014.11.05 ORA-01461: LONG 값은 LONG 열에만 입력할 수 있습니다
  3. 2014.10.17 [APACHE][PHP] 윈도우에 64bit 아파치 설치 및 PHP 연동
  4. 2014.09.25 tbadmin을 이용하여 excel 파일에 입력된 데이터를 import 해보자
  5. 2014.09.25 공백 구분자로 텍스트 자르기
  6. 2014.09.24 특수문자 기준 문자열 자르기 문의 드립니다~
  7. 2014.09.12 웹표준에서 table height 100% 적용 안되는 경우 해결법 입니다.
  8. 2014.08.27 윈도우7에 오라클 11g 클라이언트 설치
  9. 2014.05.29 프로시저 검색하기
  10. 2014.02.20 오라클 힌트 정리표
  11. 2014.02.20 [오라클] TABLE ANALYZE 하기
  12. 2014.02.18 opacity IE 6 ~ 8 대비용
  13. 2014.02.13 자바스크립트로 class 지정 바꾸기
  14. 2013.12.06 readOnly 만 스타일적용
  15. 2013.09.12 숫자/문자 체크

자바스크립트에서 replace를 replaceAll 처럼 사용하기

|

자바스크립트에서 replaceAll 은 없다.

 

정규식을 이용하여 대상 스트링에서 모든 부분을 수정해줄 수 있다.

ex) str.replace("#","");   ->  #를 공백으로 변경한다.

 

하지만 첫번째 # 만 공백으로 변경하고 나머지는 변경이 되지 않는다.

str.replace(/#/gi, "");    -> #를 감싼 따옴표를 슬래시로 대체하고 뒤에 gi 를 붙이면

 

replaceAll 과 같은 결과를 볼 수 있다.

 

좋은팁^^   

 

출처 : http://blog.naver.com/banhong?Redirect=Log&logNo=143384991

 

 

And

ORA-01461: LONG 값은 LONG 열에만 입력할 수 있습니다

|

[출처] http://show.ideatree.kr/pages/index.php3?board_content_idx=1003

 

[해결방법] ORA-01461: LONG 값은 LONG 열에만 입력할 수 있습니다

 

1.OJDBC 버전이 Release 2 인지 확인
2.CLOB 처리시 PreparedStatement를 사용할 경우,
2-1.
먼저 대상 clob field를 INSERT INTO TEST_TABLE(CLOBFIELD)VALUES(empty_clob()) 혹은
UPDATE TEST_TABLE SET CLOBFIELD = empty_clob WHERE idx=999 와 같이 empty_clob()으로
초기화 시킨다.
2-2.
다른 사용자가 CLOB UPDATE 중간에 변경을 못하도록
CLOB Row를 먼저 SELECT~FOR UPDATE 로 잠그고,
SELECT ~FOR UPDATE로 부터 Clob Field값을 얻어서 java.io.Writer 객체를 생성한다.
clobField = rs.getClob(0);
Writer writer = clobField.getCharacterOutputStream();
2-3.
그리고, 입력할 clob데이타로 부터 java.io.Reader 객체를 생성한다.
Reader reader = new CharArrayReader(clobInput.toCharArray());
2-4.
버퍼를 만들어서 reader를 읽어가면서 writer에 읽은만큼 써준다.
char[] buffer = new char[1024];
while( (read = reader.read(buffer, 0, 1024) ) != -1 )
{
 writer.write(buffer, 0, read); //reader를 죽~ 읽어가면서 써준다.
}
reader.close();
writer.close();

 

And

[APACHE][PHP] 윈도우에 64bit 아파치 설치 및 PHP 연동

|

참고 : http://ideaargo.phps.kr/tc/180

 

 

아래는 위의 링크를 따라하면서 필자에게 맞게 조금 수정하고 추가한것.

 

 

설치환경 - window server 2008 64bit

 

1. Visual C++ Redistributable for Visual Studio 2012 설치

경로 : http://www.microsoft.com/en-us/download/details.aspx?id=30679

파일 : vcredist_x64.exe

apache v11, php v11 버전들은 Visual C++ Redistributable for Visual Studio 2012 해당 프로그램 필요하니 미리 설치

 

 

2. Apache 64bit 설치

경로 : http://httpd.apache.org/download.cgi

파일 : httpd-2.4.7-win64-VC11.zip

압축을 푼후 원하는 폴더에 Apache24폴더를 복사

(보통 C:\ 나 C:\Program Files를 많이 애용)

cmd 실행시킨후 

cd C:\Program Files\Apache24\bin 

httpd.exe -k install

명령을 실행하여 아파치를 서비스에 등록

 

 

3. php 64bit 설치

경로 : http://windows.php.net/download/

파일 : php-5.5.9-Win32-VC11-x64.zip

VC11 x64 Non Thread Safe 방식인 php-5.5.9-nts-Win32-VC11-x64.zip 파일에는 php5apache2_4.dll 이 없습니다.

VC11 x64 버전에서 Thread Safe 방식에만 php5apache2_4.dll 파일이 있고 그외 1.x, 2.0.x, 2.2.x 버전용 dll 은 없습니다.

필요하시다면 컴파일을 하셔서 만들던지 다른 경로로 구하셔야 합니다.

 

Thread Safe 방식과 Non Thread Safe 방식의 차이는 다음 URL 을 참조해 주세요.

http://auctionpro.co.kr/?p=773

 

압축을 푼후 "C:\Program Files\php" 에 복사

php.ini-development 파일을 php.ini 복사후 설정

 

설치 경로의 php.ini 파일을 열어 아래의 내용을 변경해준다.

extension_dir=”./” ====> extension_dir=”C:\PHP\ext\”

 

 

수정한 php.ini 파일을 C:\Windows\ 폴더로 이동시킨다.(복사하면 안된다. 반드시 이동시켜야 한다.)

(C:\Program Files\php 폴더에 php.ini 파일이 있으면 제대로 연동이 안된다.)


4. Apache php 연동
httpd.conf 설정에서 ServerName, DocumentRoot, 디렉토리 권한등을 변경해주신다음
맨 하단에 아래의 부분을 추가합니다.
=================================================================================
PHPIniDir "C:/Program Files/php" 
LoadModule php5_module "C:/Program Files/php/php5apache2_4.dll" 
AddType application/x-httpd-php .php
=================================================================================


위와 같이 한뒤에 DocumentRoot로 설정된 폴더에 가서 <? phpinfo() ?> 가 들어간 웹페이지를 하나 만들어서 실험해 보면, 제대로 연동이 됐을경우 phpinfo가 뜰것이다.

하지만 이건 지극히 가장 기본적인 연동 설정만 한 것으로..
여러가지 각종 설정이나, 모듈 설치는 각각 설치 해야 할 것이다.


httpd.conf
 웹페이지에서 디렉토리 구조로 보여지게 안하는 설정
<Directory "c:/Program Files/Apache24/htdocs">
    #Options Indexes FollowSymLinks
    Options None

php.ini
date(): It is not safe to rely on the system's timezone settings. 와 같은 오류가 뜰때 는
;date.timezone = 
date.timezone = Asia/Seoul

세션 폴더 지정
;     session.save_path = "N;/path"
     session.save_path = "c:/php5session"
And

tbadmin을 이용하여 excel 파일에 입력된 데이터를 import 해보자

|

tbadmin을 이용하여 excel 파일에 입력된 데이터를 import 해보자

Posted at 2012/10/30 18:17 | Posted in 개발자 이야기/티베로 (Tibero)

 

개  요

 

 

mysql에서 tibero로 데이터를 이관해야 하는데 중간에 정제 작업을 거쳐야 했다 딱히 마땅한 수정 프로그램이 없어서 mysql에서 csv 파일로 export 하여 다시 csv 파일을 엑셀에서 열어 수정 작업을 거치고 다시 tibero로  import 해야 하는 상황이었다.

 

 

준비과정

 

 

먼저 mysql에서 이관할 테이블을 csv 파일로 export 하고 (아래 링크 참조)

 

2012/10/30 - [개발자 이야기/MYSQL] - csv 파일을 이용하여 데이터 export import 하는 방법

 

 

엑셀에서 열어 데이터 수정을 실시하고 다시 csv 파일로 저장하는게 아니라 xls(2003 버젼) 으로 저장

(절대 xlsx 파일로 저장하면 안됨 tbadmin 에서 지원하지 않음)

 

 

 

 

TbAdmin 에서

 

 

tbadmin 메뉴에서 tool → ExpImp 메뉴 클릭 아래와 같은 창이 뜬다

 

 

 

Use Excel file 체크 후 Import 텝을 클릭 하면 아래와 같은 화면이 나온다.

 

source file 에는 import할 excel 파일을 선택하고 Destination table 에는 import 할 테이블을 선택한다 또 ignore the first line에 체크한다(단 엑셀파일 첫줄에 항목이름이 있다면 체크 바로 데이터가 있다면 체크하지 말것)  Start Importing 클릭 하면 아래와 같은 화면이 뜬다. 

 

 

 

 

전체필드에 입력하지 않을경우 필요없는 필드는 삭제해도 무관하다 적당히 필드 맵핑하고 ok 클릭하면 끝

And

공백 구분자로 텍스트 자르기

|


with a as (
    select '제주특별자치도 서귀포시 광평로 105 ( 안덕면, 통나무힐스 )' bigo from dual
    union all
    select '부산광역시 강서구 대저1동 4302-22' from dual
)
select  bigo
    , regexp_substr(bigo, '[^ ]+',1,1) a
    , regexp_substr(bigo, '[^ ]+',1,2) b
    , regexp_substr(bigo, '[^ ]+',1,3) c
    , regexp_substr(bigo, '[^ ]+',1,4) d
    , regexp_substr(bigo, '[^ ]+',1,5) e
from a

And

특수문자 기준 문자열 자르기 문의 드립니다~

|
http://www.gurubee.net/article/62172

 

 

특수문자 기준 문자열 자르기 문의 드립니다~
 
안녕하세요~ 요즘 날씨가 많이 포근해졌네요~ 즐거운 한주 되세요~


문자열 ';' 기준으로 아래 값들을

HT1816112121400121;로스엔젤레스;부산광역시 강서구 대저1동 4302-22
HT7014021412091123;대한민국;부산광역시 강서구 대저1동 4302-22
HT1611221911240214;오스트레일리아;부산광역시 강서구 대저1동 4302-22

A컬럼에 HT1816112121400121
B컬럼에 로스엔젤레스
C컬럼에 부산광역시 강서구 대저1동 4302-22

A,B,C 컬럼에 나누어 넣으려고 합니다...

SELECT BIGO, SUBSTR(BIGO,1,INSTR(컬럼,';')-1) A, REVERSE(SUBSTR(REVERSE(BIGO), 19, INSTR(REVERSE(BIGO), ';') -1)) B, REVERSE(SUBSTR(REVERSE(BIGO), 1, INSTR(REVERSE(BIGO), ';') - 1)) C
FROM 테이블명 WHERE  BIGO LIKE '%;%'; 이렇게 했더니...

B에 들어가는 값들이 '로스엔젤레스;부산광역시' 또는 '대한민국;부산광역시 강서구'  이런식으로 들어가는데요...
B컬럼 구문 어느곳이 틀린건지 문의 드립니다...


그리고 가운데 '로스엔젤레스, 대한민국, 오스트레일리아' 만 가져오려고 구문을 짜봤는데 
'로스엔젤레스;부산광역시' 이렇게 나옵니다...
SELECT BIGO
, REGEXP_REPLACE(SUBSTR(BIGO, INSTR(BIGO, ';', 1) +1), '\(;*\)') T
FROM (SELECT BIGO FROM 컬럼명);

두개의 쿼리에 대해 조언 부탁드리겠습니다.....

 

글 등 록 목록보기

댓글 목록
  •  
    마농 (30,074:Lv60) [2014년 03월 25일 23시]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    -- 1. 어차피 a 는 고정 자리수일텐데 Instr 은 뭐하러 하나요?
    -- 2. Why Reverse?
    -- 3. 정규식 패턴 사용이 적절하지 않고요...
    WITH t AS
    (
    SELECT 'HT1816112121400121;로스엔젤레스;부산광역시 강서구 대저1동 4302-22' bigo FROM dual
    UNION ALL SELECT 'HT7014021412091123;대한민국;부산광역시 강서구 대저1동 4302-22' FROM dual
    UNION ALL SELECT 'HT1611221911240214;오스트레일리아;부산광역시 강서구 대저1동 4302-22' FROM dual
    )
    SELECT bigo
         -- 1. a 가 자리수 고정인 경우
         , SUBSTR(bigo, 1, 18) a1
         , SUBSTR(bigo, 20, INSTR(bigo, ';', 1, 2)-20) b1
         , SUBSTR(bigo, INSTR(bigo, ';', 1, 2)+1) c1
         -- 2. 자리수와 상관 없이
         , SUBSTR(bigo, 1, INSTR(bigo, ';')-1) a2
         , SUBSTR(bigo, INSTR(bigo, ';')+1, INSTR(bigo, ';', -1)-INSTR(bigo, ';')-1) b2
         , SUBSTR(bigo, INSTR(bigo, ';', -1)+1) c2
         -- 3. 정규식 이용
         , REGEXP_SUBSTR(bigo, '[^;]+', 1, 1) a3
         , REGEXP_SUBSTR(bigo, '[^;]+', 1, 2) b3
         , REGEXP_SUBSTR(bigo, '[^;]+', 1, 3) c3
      FROM t
    ;
And

웹표준에서 table height 100% 적용 안되는 경우 해결법 입니다.

|

퍼옴 : http://gameqa.tistory.com/171

 

웹표준에 맞춰 작업을 하다가 

table 에서 height 100% 적용안되는 경우가 있어 해결법을 올려둡니다.




원인은... 웹표준에서 table 사용시 height 값을 바로 가져오지 못하기 때문입니다.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


쉬운 방법은, 위 문장을 아래와 같이 변경하는 것입니다. (XHTML 1.0 을 HTML 4.01 로 변경하는게 핵심)


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">




그런데, 이 방법은 XHTML 1.0 을 HTML 4.01 로 바꾸는 것이기 때문에,

XHTML 을 사용하고자 하는 경우에는 다른 방법을 사용해야 합니다.



우선, CSS 에 다음 내용을 추가 합니다.


html, body, #fullheight {

height:100%;

}



그리고, table 에서 사용할 때는, 아래와 같이 div 안에 넣어주면 됩니다.


<div id="fullheight">

<table width=100% id="fullheight">

<tr><td>...</td></tr>

</table>

</div>



이렇게 하면, body 와 div 를 거쳐 height 값을 가져올 수 있기 때문에,

table 에서 height 100% 를 적용할 수 있게 됩니다.



html 4.01 관련한 설명은 아래 링크를 참고하세요. (링크에 div 관련 설명은 안나옵니다)

http://www.apptools.com/examples/tableheight.php

 

And

윈도우7에 오라클 11g 클라이언트 설치

|

윈도우7에 오라클 11g 클라이언트를 설치해보겠습니다.

 

오라클은 서버와 클라이언트로 나뉘어지는건 다들 아시죠?

 

서버는 누군가 다른 사람들이 접속할 수 있는 장소를 만드는 곳이고

 

클라이언트는 다른 서버로 접속하기 위한 것입니다.

 

따라서 클라이언트를 설치한다면

 

데이터베이스에 접속하는 것은 가능하나

 

데이터베이스를 생성하는 것은 안됩니다.

 

데이터베이스를 생성할 목적이라면 서버를 설치하시면 되겠습니다.

 

 

 

 

 

 

설치 방법은 간단합니다.


http://www.oracle.com/technetwork/topics/winsoft-085727.html

 

홈페이지로 이동하여 밑에 두 파일을 다운로드 받습니다.

 

 

 

 

 

 

 

 

 

 

 

 

두 파일을 같은 폴더에 압축을 풀어 놓습니다.

 

tnsname 파일을 위치하기 위해 다운받은 폴더 밑에 network - admin 폴더를 생성하고

 

tnsname 파일을 위치시킵니다.

 

여기까지 하면 설치는 끝났습니다.

 

마지막으로 패스만 설정하면 설치가 완료됩니다.

 

<내컴퓨터>  <속성>  <고급 시스템 설정>  <환경변수>  <시스템 변수> 로 들어가

 

환경변수를 설정합니다.

 

1. ORACLE_HOME -> 다운받은 오라클 폴더(ex. C:\instantclient_11_2)

 

2. TNS_ADMIN -> tnsname파일이 위치한 폴더

 

3. path -> 다운받은 오라클 폴더(ex. C:\instantclient_11_2)

 

원격 접속지로 접속이 되는지 확인합니다.

 

시작프로그램 - 실행 - cmd 입력하여 cmd창으로 이동합니다.

 

sqlplus 아이디/패스워드@원격지tnsname

 

정상적으로 접속이 되면 설치가 완료되었습니다.

 

접속이 되지 않으면 tnsname 파일을 확인하여 정보가 맞는지 확인합니다. 

 

윈도우 환경변수 등록 (시스템 환경변수)

변수명 - NLS_LANG

변수값 - KOREAN_KOREA.KO16MSWIN949

And

프로시저 검색하기

|
SELECT * FROM   USER_SOURCE WHERE  TYPE = 'PROCEDURE'
AND    text like  '%내용%' ORDER BY name, line

[출처] 프로시져 검색하기|작성자 박군

And

오라클 힌트 정리표

|

출처 ♡ Joy를 위해서 ♡ | 행복한오뚜기
원문 http://blog.naver.com/kyumi0705/20130933394

 http://blog.naver.com/itough2323?Redirect=Log&logNo=80125972268

         http://blog.naver.com/explojh?Redirect=Log&logNo=60036603826

 

◆ 개요
힌트는 SQL 튜닝의 핵심부분으로 일종의 지시구문이다.
SQL에 포함되어 쓰여져 Optimizer의 실행 계획을 원하는 대로 바꿀 수 있게 해준다.
오라클 Optimizer라고 해서 항상 최선의 실행 계획을 수립할 수는 없으므로
테이블이나 인덱스의 잘못된 실행 계획을 개발자가 직접 바꿀 수 있도록 도와주는 것이다.
사용자는 특정 SQL 문장에서 어떤 인덱스가 선택도가 높은지에 대해 알고 있는데
이 경우 오라클 서버의 Optimizer에 의존하여 나온 실행 계획보다 훨씬 효율적인 실행 계획을 사용자가 구사할 수 있다.

 

 

◆ 사용
힌트를 사용하여 아래와 같은 것들을 할 수 있다.
액세스 경로, 조인 순서, 병렬 및 직렬 처리, Optimizer의 목표(Goal)를 변경 가능하다.

 

 

◆ 오라클 힌트 사용예

 SELECT /*+ INDEX(idx_col1) */
             id, password, name
  FROM emp;

 SELECT /*+ ORDERED  INDEX(b idx_col1) */
             id, password, name
  FROM emp a
         , depart b

※ 주의! 주석 표시 뒤에 '+' 기호가 있다.
 

 

◆ INDEX Access Operation 관련 HINT

 HINT

 내용

 사용법

 INDEX

 INDEX를 순차적으로 스캔

 INDEX(TABLE_name, INDEX_name)

 INDEX_ASC

 INDEX를 내림차순으로 스캔. 

 

 INDEX_DESC

 INDEX를 오름차순으로 스캔.

 INDEX_DESC(TABLE_name, INDEX_name)

 INDEX_FFS

 INDEX FAST FULL SCAN

 INDEX_FFS(TABLE_name, INDEX_name)

 PARALLEL_INDEX

 INDEX PARALLEL SCAN

 PARALLEL_INDEX(TABLE_name, INDEX_name)

 NOPARALLEL_INDEX

 INDEX PARALLEL SCAN 제한

 NOPARALLEL_INDEX(TABLE_name, INDEX_name)

 AND_EQUALS

 여러개의 INDEX MARGE 수행

 AND_EQUALS(INDEX_name, INDEX_name)

 FULL

 FULL SCAN

 지정된 테이블에 대한 전체 스캔.

 FULL(TABLE_name)


 

◆ JOIN Access Operator 관련 HINT

 HINT

 내용

 사용

 USE_NL

 NESTED LOOP JOIN

 옵티마이저가 NESTED LOOP JOIN을 사용하도록 한다.

 먼저 특정 TABLE의 ROW에 액세스하고 그 값에 해당하는 다른 TABLE의 ROW를 찾는 작업을 해당범위까지 실행하는 조인.

 USE_NL(TABLE1, TABLE2)

 USE_NL_WITH_INDEX

 INDEX를 사용해서 NESTED LOOP JOIN을 사용하도록 한다.

 USE_NL_WITH_INDEX(TABLE  INDEX)

 USE_MERGE

 SORT MERGE JOIN

 옵티마이저가 SORT MERGE JOIN을 사용하도록 한다.

 먼저 각각의 TABLE의 처리 범위를 스캔하여 SORT한 후, 서로 MERGE하면서 JOIN하는 방식.

 USE_MERGE(TABLE1, TABLE2)

 USE_HASH

 HASH JOIN

 옵티마이저가 HASH JOIN을 사용하도록 한다.

 USE_HASH(TABLE1, TABLE2)

 HASH_AJ

 HASH ANTIJOIN

 HASH_AJ(TABLE1, TABLE2)

 HASH_SJ

 HASH SEMIJOIN

 HASH_SJ(TABLE1, TABLE2)

 NL_AJ

 NESTED LOOP ANTIJOIN

 NL_AJ(TABLE1, TABLE2)

 NL_SJ

 NESTED LOOP SEMIJOIN

 NL_SJ(TABLE1, TABLE2)

 MERGE_AJ

 SORT MERGE ANTIJOIN

 MERGE_AJ(TABLE1, TABLE2)

 MERGE_SJ

 SORT MERGE SEMIJOIN

 MERGE_SJ(TABLE1, TABLE2)

 

 

◆ JOIN시 DRIVING 순서 결정 HINT

 HINT

 내용

 사용법

 ORDERED

 FROM절에 명시된 테이블의 순서대로 DRIVING

 

 LEADING 

 파라미터에 명시된 테이블의 순서대로 JOIN

 LEAING(TABLE_name1, TABLE_name2, ...)

 DRIVING

 해당 테이블을 먼저 DRIVING

 DRIVING(TABLE)


 

◆ 기타 HINT

 HINT

 내용

 사용법

 APPEND

 INSERT시 DIRECT LOADING

 

 PARALLEL

 SELECT, INSERT시 여러개의 프로세스로 수행

 PARALLEL(TABLE, 개수)

 CACHE

 데이터를 메모리에 CACHING

 

 NOCACHE

 데이터를 메모리에 CACHING하지 않음

 

 PUSH_SUBQ

 SUBQUERY를 먼저 수행

 

 REWRITE

 QUERY REWRITE 수행

 

 NOREWIRTE

 QUERY REWRITE를 수행 못함

 

 USE_CONCAT

 IN절을 CONCATENATION ACCESS OPERATION으로 수행

 

 USE_EXPAND

 IN절을 CONCATENATION ACCESS OPERATION으로 수행못하게 함

 

 MERGE

 VIEW MERGING 수행

 

 NO_MERGE

 VIEW MERGING 수행못하게 함

 

※ 추가

ALL_ROWS : 가장 좋은 단위 처리량의 목표로 문 블록을 최적화하기 위해 cost-based 접근 방법을 선택합니다. (즉, 전체적인 최소의 자원 소비, 모든 레코드의 처리하는 시간의 최소화를 목적으로 최적화)

FIRST_ROWS : 가장 좋은 응답 시간의 목표로 문 블록을 최적화하기 위해 cost-based 접근 방법을 선택합니다. (첫번째 레코드의 추출 시간을 최소화할 목적으로 최적화)

CHOOSE : 최적자(optimizer)가 그 문에 의해 접근된 테이블을 위해 통계의 존재에 근거를 두는 SQL문을 위해 rule-based 접근 방법과 cost-based 접근 방법 사이에 선택하게 됩니다.

CLUSTER : 지정된 테이블에 대한 클러스터 스캔.

HASH : 지정된 테이블에 대한 해쉬 스캔.

ROWID : 지정된 테이블에 대한 ROWID에 의한 테이블 스캔.

RULE : explicitlly chooses rule-based optimization for a statement block. rule-base Optimizer를 사용.


 

◆ 주의

 SELECT /*+ ORDERED USE_NL(A B C) INDEX(B ITOREDRETL1) */

    FROM TORDERDTL  B, TORDER  A, TITEM  C

  WHERE ...

1. ORDERED : FROM 절에 기술한 테이블 순(B → A → C 순)으로 조인함. USE_NL에 사용한 순서가 아님.

    ※ 참고) LEADING, 예) LEADING(B) : FROM 절의 기술 순서와 상관없이 B테이블이 가장 먼저 선행됨.

2. USE_NL : 조인방법을 Nested Loops방식으로 선택.

    예) USE_NL(A B), 테이블명이 아닌 테이블에 대한 Alias명

    참고) USE_HASH, USE_MERGE

3. INDEX : 특정 인덱스를 오름차순으로 읽음.

    예) INDEX(B  ITORDERDTL1) : B는 TORDERDTL 테이블의 Alias명, 사용할 인덱스명 기술

    참고) USE_DESC(B ITORDERDTL1) : ITORDERDTL1 인덱스를 내림차순으로 읽음

 

◆ 실행계획 살펴보기 1

 SELECT *

    FROM ( ==> 인라인뷰 3

                ( ==> 인라인뷰 2

                   ( ==> 인라인뷰 1

                   )

                )

              )

과 같이 되어 있다고 하자.

이럴 경우 실행계획을 보면, 우리가 예상했던대로 인라인뷰1 ==> 인라인뷰2 ==> 인라인뷰3 순서로 드라이빙 되지 않는 경우가 있다.

이런 경우 강제로 위 순서대로 실행계획을 수립하도록 하는 힌트

SELECT /*+ ORDERED */

            *

  FROM ( .....

위 힌트를 사용하면 맨 깊숙한 인라인뷰부터 실행된다.

 

 

◆ 힌트 사용하기

1. /*+ USE_CONCAT */

USE_CONCAT : 조건절에 있는 OR 연산자조건 (또는 IN 연산자 조건)을 별도의 실행단위로 분리하여 각각의 최적의 액세스 경로를 수립하여 이를 연결(Concatenation)하는 실행계획을 수립하도록 유도하는 힌트.

반드시 처리주관 조건이 OR로 나누어졌을 때 적용해야 하며, 잘못 사용하면 비효율이 발생할 수 있으므로 주의해야 함.

예>

SELECT /*+ USE_CONCAT */

   FROM employees

 WHERE job = &job

       OR dept_no = &deptno;

풀어쓰자면

SELECT *

    FROM employees

  WHERE job = &job

UNION ALL

SELECT *

    FROM employees

WHERER dept_no = &deptno;

WHERE 절 이후에 나오는  컬럼에 맞게 인덱스를 탄다.

 

2. /*+ NO_EXPAND */

조건절에 있는 OR 연산자 조건 또는 IN 연산자 조건을 연결 실행계획으로 처리되지 않도록 할 때 사용하는 힌트.

USE_CONCAT의 반대 개념.

예>

SELECT /*+ NO_EXPAND */

   FROM customer

 WHERE cust_type in ('A','B');

참고 : http://blog.naver.com/hkjhc107?Redirect=Log&logNo=130035827974

◆ 참고

1. Nested Loop

   - 테이블의 인덱스끼리 inner-outer 루프를 형성하여 결과를 쿼리하는 방식입니다.

   - 제일 많은 유형의 실행계획입니다.

2. Sort Merge

   - 쿼리의 결과가 많은 양의 데이터를 읽는 경우, 테이블들을 각각 full-scan하여 같은 키값을 갖는 데이터끼리 조인하여 실행합니다.

   - Sort-Merge 방식은 많은 메모리와 디스크 I/O를 필요로 하기 때문에, sqlplus를 실행하는 주체의 메모리/CPU/디스크 스펙에 많은 영향을 받습니다.

3. Hash Join

   - 한 테이블은 매우 많은 Row를 갖고, 다른 한 테이블은 매우 적은 Row를 가질 때, 해쉬 알고리즘에 의해 큰 테이블을 여러개의 버켓으로 나누어 쿼리를 수행하는 방식입니다. 작은 테이블은 인덱스를 태우는 것보다 full-scan을 하는 것이 유리할 때 사용됩니다.

 

And

[오라클] TABLE ANALYZE 하기

|

얼마전에 있었던 경험을 바탕으로 내용을 적어 본다.

 

갑자기 DBA의 실수로 운영DB의 테이블이 DROP 되었다.

신속한 시스템 복구를 위해 운 좋게 직전에 백업해두었던 테이블이 있어서 임시로 복구를 했다.

그냥 저냥 업무시간대를 잘 넘기고 있어서 별 문제 없이 지나가나 했었다.

갑자기 퇴근시간이 다되어 DB의 CPU 사용률이 높아지더니 떨어질 기미가 보이지 않는다.

여러 쿼리들의 수행시간이 엄청 길어졌고 계속 부하가 걸려온다.

느려진 쿼리의 PLAN을 떠봤다. 갑자기 타지 않던 FULL SCAN 플랜이 자꾸 뜬다.

분명히 DROP된 테이블과 관련이 있는듯 했으나, 새로 생성된 INDEX를 봐도 기존과 동일하게 문제가 없었다.

암만 봐도 인덱스의 문제가 없다.. 이거 왜이러지 하는 순간... 번뜩 생각이 났다.

보통 DB의 옵티마이져는 COST 베이스 방식으로 운영이 되고, 옵티마이저에 따라 DB가 플랜을 만들어서 돌린다.

이때 통계정보를 활용한다.... 바로 이거인듯 했다.

 

그래서 ANALYZE 된 정보를 확인해 보았다.

 

SELECT TABLE_NAME,
       NUM_ROWS,
       BLOCKS,
       EMPTY_BLOCKS,
       AVG_SPACE,
       CHAIN_CNT,
       AVG_ROW_LEN,
       SAMPLE_SIZE,
       LAST_ANALYZED
  FROM USER_TABLES
 WHERE TABLE_NAME = 'SAMPLE_TABLE'

;

 

역시나 TABLE이 DROP되면서 통계정보도 날아갔던 것이다.

즉, 아무리 인덱스가 생성되어 있어도 데이터의 형태에 따라 만들어진 통계정보가 없으면 FULL_SCAN이 발생한다.

DROP된 테이블이 시스템 사용시 무조건 사용되는 테이블이라 그 영향력은 크다.

 

그럼 통계정보를 생성해 본다.

 

ANALYZE TABLE SAMPLE_TABLE

COMPUTE STATISTICS

;

 

[문법 설명]

ANALYZE object_name operation STATISTICS

[VALIDATE STRUCTURE[CASCADE]]

[LIST CHAINED ROWS[INTO tables]]

* object는 TABLE, INDEX, CLUSTER 중에 해당하는 오브젝트 기술

* operation 

  - COMPUTE : 각각의 값등을 정확하게 계산한다. 가장 정확한 통계를 얻을 수 있지만 처리속도가 가장 느리다.

  - ESTIMATE : 자료사전의 값과 데이터 견본을 가지고 통계를 예상한다. 덜정확하지만 처리속도가 훨씬 빠르다.

  - DELETE : 테이블의 모든 통계정보를 삭제한다.

 

수행하고 나서 상단의 조회 쿼리를 다시 조회하면 결과가 나온다.

 

자 이제 느린 쿼리를 다시 수행해 본다... 음 역시 예전의 상태를 되찾았다!

 

 

And

opacity IE 6 ~ 8 대비용

|

<!--[if lte IE 8]>
.target {background:transparent; filter: progid:DXImageTransform.Microsoft.gradient(starColorstr=#80FFFFFF,endColorstr=#80FFFFFF); zoom:1;}
<![endif]-->

 

*opacity 는 IE 9, 크롬, 사파리, 오페라, 파이어폭스에서 적용 가능하다.

IE6~8버전에서는 이를 지원하지 않으나 filter를 통해서 비슷한 스타일 적용이 가능하다.


transparent8{zoom:1; /* ie 6,7,8 bug fix */ filter:alpha(opacity=80); opacity:0.8; }
filter의 값은 0 ~ 100 값을 가지며 opacity는 0 ~ 1 까지의 값을 가진다.

 

[출처] opacity IE 6 ~ 8 대비용 |작성자 써니

And

자바스크립트로 class 지정 바꾸기

|

 document.all.Divsubmenu[i].className='menuclick';

And

readOnly 만 스타일적용

|
background-color:expression((this.readOnly)?'#EAEAEA':'');
And

숫자/문자 체크

|

숫자만 -> trim(translate(cmp_user_id,'1234567890','  ')) is null

문자만 -> trim(translate(cmp_user_id,'1234567890','  ')) is not null

And
prev | 1 | 2 | 3 | 4 | 5 | 6 | ··· | 8 | next