Tibero tbpsm 참조안내서 Tibero 5 Copyright 2013 TIBERO Co., Ltd. All Rights Reserved.
Copyright Notice Copyright 2013 TIBERO Co., Ltd. All Rights Reserved. 대한민국경기도성남시분당구서현동 272-6 우 ) 463-824 Restricted Rights Legend All TIBERO Software Tibero ) and documents are protected by copyright laws and the Protection Act of Computer Programs, and international convention. TIBERO software and documents are made available under the terms of the TIBERO License Agreement and may only be used or copied in accordance with the terms of this agreement. No part of this document may be transmitted, copied, deployed, or reproduced in any form or by any means, electronic, mechanical, or optical, without the prior written consent of TIBERO Co., Ltd. 이소프트웨어 Tibero ) 사용서의내용과프로그램은저작권법, 컴퓨터프로그램보호법및국제조약에의해서보호받고있습니다. 사용서의내용과여기에된프로그램은 TIBERO Co., Ltd. 와의사용권계약하에서만사용이가능하며, 사용권계약을준수하는경우에만사용또는복제할수있습니다. 이사용서의전부또는일부분을 TIBERO의사전서면동의없이전자, 기계, 녹음등의수단을사용하여전송, 복제, 배포, 2차적저작물작성등의행위를하여서는안됩니다. Trademarks Tibero is a registered trademark of TIBERO Co., Ltd. Other products, titles or services may be registered trademarks of their respective companies. Tibero 는 TIBERO Co., Ltd. 의등록상표입니다. 기타모든제품들과회사이름은각각해당소유주의상표로서참조용으로만사용됩니다. Open Source Software Notice This product includes open source software developed and/or licensed by "OpenSSL," "RSA Data Security, Inc.," "Apache Foundation," "Jean-loup Gailly and Mark Adler," and "Paul Hsieh's hash". Information about the afore mentioned and the related open source software can be found in the "${INSTALL_PATH}/license/oss_licenses" directory. 본제품은 OpenSSL, RSA Data Security, Inc., Apache Foundation 및 Jean-loup Gailly와 Mark Adler 및 Paul Hsieh's hash 에의해개발또는라이선스된오픈소스소프트웨어를포함합니다. 관련상세정보는제품의디렉터리 ${INSTALL_PATH}/license/oss_licenses 에기재된사항을참고해주십시오. 안내서정보안내서제목 : Tibero tbpsm 참조안내서발행일 : 2013-02-25 소프트웨어버전 : Tibero 5 안내서버전 : 2.1.4
내용목차 안내서에대하여... xiii 제1장 DBMS_APM... 1 1.1. 개요... 1 1.2. 프로시저... 1 1.2.1. CREATE_SNAPSHOT... 1 1.2.2. REPORT_TEXT... 2 제2장 DBMS_APPLICATION_INFO... 3 2.1. 개요... 3 2.2. 프로시저... 3 2.2.1. READ_CLIENT_INFO... 3 2.2.2. READ_MODULE... 4 2.2.3. SET_ACTION... 4 2.2.4. SET_CLIENT_INFO... 5 2.2.5. SET_MODULE... 6 2.2.6. SET_SESSION_LONGOPS... 6 제3장 DBMS_CRYPTO... 9 3.1. 개요... 9 3.2. 암호화 / 복호화알고리즘및체인, 패딩... 9 3.3. 해시알고리즘... 11 3.4. 프로시저와함수... 12 3.4.1. DECRYPT... 270 3.4.2. ENCRYPT... 13 3.4.3. HASH... 15 제4장 DBMS_ERRLOG... 17 4.1. 개요... 17 4.2. 프로시저... 17 4.2.1. CREATE_ERROR_LOG... 17 제5장 DBMS_FLASHBACK... 59 5.1. 개요... 21 5.2. 프로시저와함수... 21 5.2.1. GET_SYSTEM_CHANGE_NUMBER... 21 제6장 DBMS_JAVA... 23 6.1. 개요... 23 6.2. 프로시저... 23 6.2.1. SET_OUTPUT... 23 6.3. 함수... 24 6.3.1. LONGNAME... 24 6.3.2. SHORTNAME... 24 Tibero iii
제7장 DBMS_JOB... 27 7.1. 개요... 27 7.2. 프로시저... 28 7.2.1. BROKEN... 28 7.2.2. CHANGE... 29 7.2.3. INTERVAL... 30 7.2.4. NEXT_DATE... 31 7.2.5. REMOVE... 31 7.2.6. RUN... 32 7.2.7. SUBMIT... 33 7.2.8. WHAT... 34 제8장 DBMS_LOB... 35 8.1. 개요... 35 8.2. 프로시저... 37 8.2.1. APPEND... 37 8.2.2. COPY... 38 8.2.3. CREATETEMPORARY... 40 8.2.4. ERASE... 41 8.2.5. FREETEMPORARY... 43 8.2.6. READ... 44 8.2.7. TRIM... 45 8.2.8. WRITE... 47 8.2.9. WRITEAPPEND... 48 8.3. 함수... 50 8.3.1. COMPARE... 50 8.3.2. GETLENGTH... 52 8.3.3. INSTR... 53 8.3.4. ISTEMPORARY... 55 8.3.5. SUBSTR... 56 제9장 DBMS_LOCK... 59 9.1. 개요... 59 9.2. 프로시저... 59 9.2.1. SLEEP... 59 제10장 DBMS_MVIEW... 61 10.1. 개요... 61 10.2. 프로시저... 61 10.2.1. EXPLAIN_REWRITE... 61 10.2.2. REFRESH... 62 제11장 DBMS_OBFUSCATION_TOOLKIT... 65 11.1. 개요... 65 11.2. 프로시저와함수... 66 iv Tibero tbpsm 참조안내서
11.2.1. DES3DECRYPT... 66 11.2.2. DES3ENCRYPT... 68 11.2.3. DES3GETKEY... 70 11.2.4. DESDECRYPT... 72 11.2.5. DESENCRYPT... 74 11.2.6. DESGETKEY... 75 제12장 DBMS_OUTPUT... 79 12.1. 개요... 79 12.2. 프로시저... 79 12.2.1. DISABLE... 79 12.2.2. ENABLE... 80 12.2.3. GET_LINE, GET_LINES... 215 12.2.4. NEW_LINE... 83 12.2.5. PUT, PUT_LINE... 83 제13장 DBMS_RANDOM... 85 13.1. 개요... 85 13.2. 프로시저와함수... 85 13.2.1. NORMAL... 85 13.2.2. RANDOM... 85 13.2.3. SEED... 86 13.2.4. STRING... 87 13.2.5. VALUE... 88 제14장 DBMS_REDEFINITION... 91 14.1. 개요... 91 14.2. 프로시저... 91 14.2.1. ABORT_REDEF_TABLE... 91 14.2.2. FINISH_REDEF_TABLE... 92 14.2.3. START_REDEF_TABLE... 93 14.2.4. SYNC_INTERIM_TABLE... 94 제15장 DBMS_REPAIR... 97 15.1. 개요... 97 15.2. 함수... 97 15.2.1. ONLINE_INDEX_CLEAN... 97 제16장 DBMS_RESULT_CACHE... 101 16.1. 개요... 101 16.2. 프로시저와함수... 101 16.2.1. BYPASS... 101 16.2.2. FLUSH... 102 16.2.3. INVALIDATE... 103 16.2.4. INVALIDATE_OBJECT... 104 16.2.5. MEMORY_REPORT... 105 Tibero v
16.2.6. STATUS... 106 제17장 DBMS_ROWID... 109 17.1. 개요... 109 17.2. 프로시저... 109 17.2.1. ROWID_INFO... 109 17.3. 함수... 110 17.3.1. ROWID_CREATE... 110 17.3.2. ROWID_SEGMENT... 111 17.3.3. ROWID_BLOCK_NUMBER... 111 17.3.4. ROWID_ROW_NUMBER... 112 17.3.5. ROWID_ABSOLUTE_FNO... 113 17.3.6. ROWID_TO_RELATIVE_FNO... 113 제18장 DBMS_SESSION... 115 18.1. 개요... 115 18.2. 프로시저... 115 18.2.1. CLEAR_IDENTIFIER... 115 18.2.2. UNIQUE_SESSION_ID... 115 18.2.3. SET_IDENTIFIER... 116 제19장 DBMS_SPACE... 117 19.1. 개요... 117 19.2. 프로시저... 117 19.2.1. SPACE_USAGE... 117 19.2.2. UNUSED_SPACE... 120 제20장 DBMS_SPACE_ADMIN... 123 20.1. 개요... 123 20.2. 프로시저... 123 20.2.1. SEGMENT_DUMP... 123 제21장 DBMS_SQL... 125 21.1. 개요... 125 21.2. 타입... 125 21.2.1. DESC_REC... 261 21.2.2. DESC_REC2... 261 21.2.3. DESC_TAB... 261 21.2.4. DESC_TAB2... 261 21.3. 프로시저... 127 21.3.1. BIND_ARRAY... 261 21.3.2. BIND_VARIABLE... 261 21.3.3. CLOSE_CURSOR... 132 21.3.4. COLUMN_VALUE... 133 21.3.5. DEFINE_COLUMN... 141 21.3.6. DESCRIBE_COLUMNS... 141 vi Tibero tbpsm 참조안내서
21.3.7. DESCRIBE_COLUMNS2... 141 21.3.8. PARSE... 142 21.4. 함수... 143 21.4.1. EXECUTE... 143 21.4.2. EXECUTE_AND_FETCH... 144 21.4.3. FETCH_ROWS... 145 21.4.4. OPEN_CURSOR... 146 21.4.5. IS_OPEN... 226 21.4.6. LAST_ERROR_POSITION... 148 21.4.7. LAST_ROW_COUNT... 149 제22장 DBMS_STATS... 151 22.1. 개요... 151 22.2. 프로시저... 151 22.2.1. CREATE_STAT_TABLE... 151 22.2.2. DELETE_COLUMN_STATS... 152 22.2.3. DELETE_DATABASE_STATS... 153 22.2.4. DELETE_DICTIONARY_STATS... 153 22.2.5. DELETE_INDEX_STATS... 153 22.2.6. DELETE_SCHEMA_STATS... 154 22.2.7. DELETE_SYSTEM_STATS... 155 22.2.8. DELETE_TABLE_STATS... 155 22.2.9. DROP_STAT_TABLE... 156 22.2.10. EXPORT_COLUMN_STATS... 157 22.2.11. EXPORT_DATABASE_STATS... 158 22.2.12. EXPORT_INDEX_STATS... 158 22.2.13. EXPORT_SCHEMA_STATS... 159 22.2.14. EXPORT_SYSTEM_STATS... 160 22.2.15. EXPORT_TABLE_STATS... 161 22.2.16. GATHER_DATABASE_STATS... 161 22.2.17. GATHER_DICTIONARY_STATS... 163 22.2.18. GATHER_INDEX_STATS... 164 22.2.19. GATHER_SCHEMA_STATS... 165 22.2.20. GATHER_SYSTEM_STATS... 166 22.2.21. GATHER_TABLE_STATS... 168 22.2.22. IMPORT_COLUMN_STATS... 169 22.2.23. IMPORT_DATABASE_STATS... 170 22.2.24. IMPORT_INDEX_STATS... 170 22.2.25. IMPORT_SCHEMA_STATS... 171 22.2.26. IMPORT_SYSTEM_STATS... 172 22.2.27. IMPORT_TABLE_STATS... 173 22.2.28. SET_PARAM... 173 22.2.29. SET_SYSTEM_STATS... 175 Tibero vii
22.3. 함수... 176 22.3.1. GET_PARAM... 176 22.3.2. LOCAL_TRANSACTION_ID... 176 22.3.3. TO_BOOLEAN... 177 제23장 DBMS_SYSTEM... 179 23.1. 개요... 179 23.2. 프로시저와함수... 179 23.2.1. SET_SQL_TRACE_IN_SESSION... 179 제24장 DBMS_TRANSACTION... 181 24.1. 개요... 181 24.2. 프로시저... 181 24.2.1. COMMIT... 181 24.2.2. ROLLBACK, ROLLBACK_SAVEPOINT... 182 24.2.3. SAVEPOINT... 182 제25장 DBMS_TYPES... 185 25.1. 개요... 185 25.2. 상수목록... 185 제26장 DBMS_UTILITY... 187 26.1. 개요... 187 26.2. 프로시저와함수... 187 26.2.1. COMMA_TO_TABLE... 187 26.2.2. GET_TIME... 188 제27장 HTP... 189 27.1. 개요... 189 27.2. Apache 연동... 189 27.3. 프로시저와함수... 189 27.3.1. BODYCLOSE... 270 27.3.2. BODYOPEN... 270 27.3.3. BR... 270 27.3.4. CENTER... 270 27.3.5. CENTERCLOSE... 270 27.3.6. CENTEROPEN... 270 27.3.7. FONTCLOSE... 270 27.3.8. FONTOPEN... 270 27.3.9. HEADCLOSE... 270 27.3.10. HEADER... 270 27.3.11. HEADOPEN... 270 27.3.12. HR... 270 27.3.13. HTMLCLOSE... 270 27.3.14. HTMLOPEN... 270 27.3.15. IMG... 270 viii Tibero tbpsm 참조안내서
27.3.16. IMG2... 270 27.3.17. LINE... 270 27.3.18. PRINT... 270 27.3.19. PRN... 270 27.3.20. TITLE... 270 제28장 UTL_ENCODE... 203 28.1. 개요... 203 28.2. 함수... 203 28.2.1. BASE64_DECODE... 203 28.2.2. BASE64_ENCODE... 204 28.2.3. TEXT_ENCODE... 205 제29장 UTL_FILE... 207 29.1. 개요... 207 29.2. 프로시저... 208 29.2.1. FCLOSE... 208 29.2.2. FCLOSE_ALL... 209 29.2.3. FCOPY... 209 29.2.4. FFLUSH... 210 29.2.5. FGETATTR... 211 29.2.6. FREMOVE... 213 29.2.7. FRENAME... 213 29.2.8. FSEEK... 214 29.2.9. GET_LINE... 215 29.2.10. GET_RAW... 217 29.2.11. NEW_LINE... 217 29.2.12. PUT... 218 29.2.13. PUTF... 219 29.2.14. PUT_RAW... 221 29.2.15. PUT_LINE... 222 29.3. 함수... 223 29.3.1. FGETPOS... 223 29.3.2. FOPEN... 224 29.3.3. IS_OPEN... 226 제30장 UTL_HTTP... 229 30.1. 개요... 229 30.2. 함수... 229 30.2.1. REQUEST... 229 제31장 UTL_I18N... 231 31.1. 개요... 231 31.2. 프로시저와함수... 231 31.2.1. RAW_TO_CHAR... 270 Tibero ix
31.2.2. STRING_TO_RAW... 270 제32장 UTL_RAW... 233 32.1. 개요... 233 32.2. 함수... 233 32.2.1. BIT_AND... 233 32.2.2. BIT_COMPLEMENT... 234 32.2.3. BIT_OR... 235 32.2.4. BIT_XOR... 236 32.2.5. CAST_FROM_BINARY_DOUBLE... 237 32.2.6. CAST_FROM_BINARY_FLOAT... 238 32.2.7. CAST_FROM_BINARY_INTEGER... 239 32.2.8. CAST_FROM_NUMBER... 241 32.2.9. CAST_TO_BINARY_DOUBLE... 242 32.2.10. CAST_TO_BINARY_FLOAT... 243 32.2.11. CAST_TO_BINARY_INTEGER... 244 32.2.12. CAST_TO_NUMBER... 245 32.2.13. CAST_TO_RAW... 246 32.2.14. CAST_TO_VARCHAR2... 247 32.2.15. COMPARE... 248 32.2.16. CONCAT... 249 32.2.17. COPIES... 250 32.2.18. LENGTH... 252 32.2.19. OVERLAY... 253 32.2.20. REVERSE... 254 32.2.21. SUBSTR... 255 32.2.22. TRANSLATE... 256 32.2.23. TRANSLITERATE... 257 32.2.24. XRANGE... 258 제33장 UTL_TCP... 261 33.1. 개요... 261 33.2. 타입... 261 33.2.1. CONNECTION... 261 33.3. 프로시저와함수... 262 33.3.1. CLOSE_CONNECTION... 270 33.3.2. GET_LINE... 270 33.3.3. GET_RAW... 270 33.3.4. GET_TEXT... 270 33.3.5. OPEN_CONNECTION... 270 33.3.6. READ_LINE... 270 33.3.7. READ_RAW... 270 33.3.8. READ_TEXT... 270 33.3.9. WRITE_LINE... 270 x Tibero tbpsm 참조안내서
33.3.10. WRITE_RAW... 270 33.3.11. WRITE_TEXT... 270 제34장 UTL_URL... 273 34.1. 개요... 273 34.2. 함수... 273 34.2.1. ESCAPE... 273 34.2.2. UNESCAPE... 274 색인... 277 Tibero xi
안내서에대하여 안내서의대상 본안내서는 Tibero 이하 Tibero ) 에서제공하는저장프로시저모듈즉 tbpsmtibero의 Persistent Stored Module) 패키지를참조하려는데이터베이스관리자 Database Administrator, 이하 DBA), 애플리케이션프로그램개발자를대상으로기술한다. 안내서의전제조건 본안내서를원활히이해하기위해서는다음과같은사항을미리알고있어야한다. 데이터베이스의이해 RDBMS 의이해 SQL 의이해 tbpsm 의이해 안내서의제한조건 본안내서는 Tibero 를실무에적용하거나운용하는데필요한모든사항을포함하고있지않다. 따라서설 치, 환경설정등운용및관리에대해서는각제품안내서를참고하기바란다. 참고 Tibero 의설치및환경설정에관한내용은 "Tibero 설치안내서 " 를참고한다. 안내서에대하여 xiii
안내서구성 Tibero tbpsm 참조안내서의각장의주요내용은다음과같다. 제1장 : 패키지소개패키지의기본개념과구성을간략히소개한다. 제 2 장 : DBMS_APM DBMS_APM 패키지의개요와사용방법을기술한다. 제 3 장 : DBMS_APPLICATION_INFO DBMS_APPLICATION_INFO 패키지의개요와사용방법을기술한다. 제 4 장 : DBMS_CRYPTO DBMS_CRYPTO 패키지의개요와사용방법을기술한다. 제 5 장 : DBMS_ERRLOG DBMS_ERRLOG 패키지의개요와사용방법을기술한다. 제 6 장 : DBMS_FLASHBACK DBMS_FLASHBACK 패키지의개요와사용방법을기술한다. 제 7 장 : DBMS_JAVA DBMS_JAVA 패키지의개요와사용방법을기술한다. 제 8 장 : DBMS_JOB DBMS_JOB 패키지의개요와사용방법을기술한다. 제 9 장 : DBMS_LOB DBMS_LOB 패키지의개요와사용방법을기술한다. 제 10 장 : DBMS_LOCK DBMS_LOCK 패키지의개요와사용방법을기술한다. 제 11 장 : DBMS_MVIEW DBMS_MVIEW 패키지의개요와사용방법을기술한다. 제 12 장 : DBMS_OBFUSCATION_TOOLKIT xiv Tibero tbpsm 참조안내서
DBMS_OBFUSCATION_TOOLKIT 패키지의개요와사용방법을기술한다. 제 13 장 : DBMS_OUTPUT DBMS_OUTPUT 패키지의개요와사용방법을기술한다. 제 14 장 : DBMS_RANDOM DBMS_RANDOM 패키지의개요와사용방법을기술한다. 제 15 장 : DBMS_REDEFINITION DBMS_REDEFINITION 패키지의개요와사용방법을기술한다. 제 16 장 : DBMS_REPAIR DBMS_REPAIR 패키지의개요와사용방법을기술한다. 제 17 장 : DBMS_RESULT_CACHE DBMS_RESULT_CACHE 패키지의개요와사용방법을기술한다. 제 18 장 : DBMS_ROWID DBMS_ROWID 패키지의개요와사용방법을기술한다. 제 19 장 : DBMS_SESSION DBMS_SESSION 패키지의개요와사용방법을기술한다. 제 20 장 : DBMS_SPACE DBMS_SPACE 패키지의개요와사용방법을기술한다. 제 21 장 : DBMS_SPACE_ADMIN DBMS_SPACE_ADMIN 패키지의개요와사용방법을기술한다. 제 22 장 : DBMS_SQL DBMS_SQL 패키지의개요와사용방법을기술한다. 제 23 장 : DBMS_STATS DBMS_STATS 패키지의개요와사용방법을기술한다. 제 24 장 : DBMS_SYSTEM DBMS_SYSTEM 패키지의개요와사용방법을기술한다. 안내서에대하여 xv
제 25 장 : DBMS_TRANSACTION DBMS_TRANSACTION 패키지의개요와사용방법을기술한다. 제 26 장 : DBMS_TYPES DBMS_TYPES 패키지의개요와사용방법을기술한다. 제 27 장 : DBMS_UTILITY DBMS_UTILITY 패키지의개요와사용방법을기술한다. 제 28 장 : HTP HTP 패키지의개요와사용방법을기술한다. 제 29 장 : UTL_ENCODE UTL_ENCODE 패키지의개요와사용방법을기술한다. 제 30 장 : UTL_FILE UTL_FILE 패키지의개요와사용방법을기술한다. 제 31 장 : UTL_HTTP UTL_HTTP 패키지의개요와사용방법을기술한다. 제 32 장 : UTL_I18N UTL_I18N 패키지의개요와사용방법을기술한다. 제 33 장 : UTL_RAW UTL_RAW 패키지의개요와사용방법을기술한다. 제 34 장 : UTL_TCP UTL_TCP 패키지의개요와사용방법을기술한다. 제 35 장 : UTL_URL UTL_URL 패키지의개요와사용방법을기술한다. xvi Tibero tbpsm 참조안내서
안내서규약 표기 <AaBbCc123> <Ctrl>+C [Button] 진하게 " " 따옴표 ) ' 입력항목 ' 하이퍼링크 > +---- ---- 참고 의미프로그램소스코드의파일명, 디렉터리 Ctrl과 C를동시에누름 GUI의버튼또는메뉴이름강조다른관련안내서또는안내서내의다른장및절언급화면 UI에서입력항목에대한메일계정, 웹사이트메뉴의진행순서하위디렉터리또는파일있음하위디렉터리또는파일없음참고또는주의사항 [ 그림 1.1] [ 표 1.1] AaBbCc123 그림이름 표이름 명령어, 명령어수행후화면에출력된결과물, 예제코드 { } [ ] 필수인수값 옵션인수값 선택인수값 안내서에대하여 xvii
시스템사용환경 요구사항 Platform HP-UX 11i PA-RISC, ia64) Solaris SPARC 9/Solaris 9) AIX PPC 5L/AIX 5.3) GNU X86, 64, IA64) Linux kernel 2.6 이상 Windowsx86) 32bit/64bit Hardware 최소 1.5GB 하드디스크공간 512MB 이상메모리공간 Compiler PSM C99 지원필요 ) tbesql/c C99 지원필요 ) xviii Tibero tbpsm 참조안내서
관련안내서 안내서 Tibero 설치안내서 Tibero tbcli 안내서 Tibero 애플리케이션개발자안내서 Tibero External Procedure 안내서 Tibero JDBC 개발자안내서 Tibero tbesql/c 안내서 Tibero tbesql/cobol 안내서 Tibero tbpsm 안내서 Tibero 관리자안내서 Tibero tbadmin 안내서 Tibero 유틸리티안내서 Tibero 설치시필요한시스템요구사항과설치및제거방법을기술한안내서이다. Call Level Interface인 tbcli의개념과구성요소, 프로그램구조를소개하고 tbcli 프로그램을작성하는데필요한데이터타입, 함수, 에러메시지를기술한안내서이다. 각종애플리케이션라이브러리를이용하여애플리케이션프로그램을개발하는방법을기술한안내서이다. External Procedure를소개하고이를생성하고사용하는방법을기술한안내서이다. Tibero에서제공하는 JDBC 기능을이용하여애플리케이션프로그램을개발하는방법을기술한안내서이다. C 프로그래밍언어를사용해데이터베이스작업을수행하는각종애플리케이션프로그램을작성하는방법을기술한안내서이다. COBOL 프로그래밍언어를사용해데이터베이스작업을수행하는각종애플리케이션프로그램을작성하는방법을기술한안내서이다. 저장프로시저모듈인 tbpsm의개념과문법, 구성요소를소개하고, tbpsm 프로그램을작성하는데필요한제어구조, 복합타입, 서브프로그램, 패키지와 SQL 문장을실행하고에러를처리하는방법을기술한안내서이다. Tibero의동작과주요기능의원활한수행을보장하기위해 DBA가알아야할관리방법을논리적또는물리적측면에서하고, 관리를지원하는각종도구를기술한안내서이다. SQL/PSM 처리와 DBA를위한시스템관리기능을제공하는 GUI 기반의툴인 tbadmin을소개하고, 설치및사용방법을기술한안내서이다. 데이터베이스와관련된작업을수행하기위해필요한유틸리티의설치및환경설정, 사용방법을기술한안내서이다. Tibero를사용하는도중에발생할수있는각종에러의원인과해결방법을기술한안내서이다. 안내서에대하여 xix
안내서 에러참조안내서 Tibero 참조안내서 Tibero SQL 참조안내서 Tibero의동작과사용에필요한초기화와데이터사전, 정적뷰, 동적뷰를기술한참조안내서이다. 데이터베이스작업을수행하거나애플리케이션프로그램을작성할때필요한 SQL 문장을기술한참조안내서이다. xx Tibero tbpsm 참조안내서
연락처 Korea TIBERO Co., Ltd. 272-6, Seohyeon-dong, Bundang-gu, Seongnam-si, Gyeonggi-do, 463-824 South Korea Tel: +82-31-779-7113 Fax: +82-31-779-7119 Email: info@tmax.co.kr Web Korean): http://www.tibero.com 기술지원 : http://technet.tmax.co.kr USA TmaxSoft, Inc. 560 Sylvan Avenue Englewood Cliffs, NJ 07632 U.S.A Tel: +1-201-567-8266 Fax: +1-201-567-7339 Email: info@tmaxsoft.com Web English): http://www.tmaxsoft.com Japan TmaxSoft Japan Co., Ltd. 5F Sanko Bldg, 3-12-16 Mita, Minato-Ku, Tokyo, 108-0073 Japan Tel: +81-3-5765-2550 Fax: +81-3-5765-2567 Email: info@tmaxsoft.co.jp Web Japanese): http://www.tmaxsoft.co.jp 안내서에대하여 xxi
China TmaxSoft China Co., Ltd. Beijing Silver Tower, RM 1508, 2# North Rd Dong San Huan, Chaoyang District, Beijing, China, 100027 China Tel: +86-10-6410-6145~8 Fax: +86-10-6410-6144 Email: info.cn@tmaxsoft.com Web Chinese): http://www.tmaxsoft.com.cn xxii Tibero tbpsm 참조안내서
제 1 장 DBMS_APM 본장에서는 DBMS_APM 패키지의기본개념과패키지내의프로시저를사용하는방법을한다. 보다 자세한은 Tibero 관리자안내서의 "Automatic Performance Monitoring" 을참조하기바란다. 1.1. 개요 DBMS_APM 패키지는 Automatic Performance Monitoring 이하 APM) 기능을사용하는데필요로하는 기능을제공하기위한패키지이다. 1.2. 프로시저 본절에서는 DBMS_APM 패키지에서제공하는프로시저를한다. 다음은 DBMS_APM 패키지에서제공하는프로시저를요약한목록이다. 프로시저명 CREATE_SNAPSHOT REPORT_TEXT APM 을위한스냅샷을바로남긴다. 특정구간의성능분석리포트를생성한다. 1.2.1. CREATE_SNAPSHOT APM 을위한스냅샷을바로남긴다. CREATE_SNAPSHOT 프로시저의세부내용은다음과같다. PROCEDURE CREATE_SNAPSHOT); exec DBMS_APM.CREATE_SNAPSHOT); / 제 1 장 DBMS_APM 1
1.2.2. REPORT_TEXT 특정구간의성능분석리포트를생성한다. REPORT_TEXT 프로시저의세부내용은다음과같다. PROCEDURE REPORT_TEXT begin_time IN DATE end_time IN DATE ); begin_time end_time 성능분석리포트대상구간중시작시간이다. 성능분석리포트대상구간중종료시간이다. exec DBMS_APM.REPORT_TEXT'2011/07/01 12:00:00', '2011/07/02 11:59:59'); / 주의 단, 위의예제에서두개의인자모두 DATE 타입이므로, 사용중인 DATE 포맷에맞게입력해야함 에주의한다. 2 Tibero tbpsm 참조안내서
제 2 장 DBMS_APPLICATION_INFO 본장에서는 DBMS_APPLICATION_INFO 패키지의기본개념과패키지내의프로시저를사용하는방법 을한다. 2.1. 개요 DBMS_APPLICATION_INFOV$SESSION, SYS._VT_SESSION_LONGOPS 뷰의값을변경하는패키지 이다. 2.2. 프로시저 본절에서는 DBMS_DBMS_APPLICATION_INFO 패키지에서제공하는프로시저를알파벳순으로 한다. 2.2.1. READ_CLIENT_INFO 현재세션의 client_info 값을읽는다. READ_CLIENT_INFO 프로시저의세부내용은다음과같다. DBMS_APPLICATION_INFO.READ_CLIENT_INFOclient_info OUT VARCHAR2) client_info 세션으로부터읽을 client info 값이다. DECLARE client_info VARCHAR264); DBMS_APPLICATION_INFO.READ_CLIENT_INFOclient_info); DBMS_OUTPUT.PUT_LINEclient_info); 제 2 장 DBMS_APPLICATION_INFO 3
/ 2.2.2. READ_MODULE 현재세션의모듈정보와액션정보를읽는프로시저이다. READ_MODULE 프로시저의세부내용은다음과같다. DBMS_APPLICATION_INFO.READ_MODULE module_name OUT VARCHAR2, action_name OUT VARCHAR2) module_name action_name 현재세션의 module 값이다. 현재세션의 action 값이다. DECLARE module_name VARCHAR64); action_name VARCHAR64); DBMS_APPLICATION_INFO.READ_MODULEmodule_name, action_name); DBMS_OUTPUT.PUT_LINEmodule_name); DBMS_OUTPUT.PUT_LINEaction_name); / 2.2.3. SET_ACTION 현재세션의액션이름을지정한다. SET_ACTION 프로시저의세부내용은다음과같다. DBMS_APPLICATION_INFO.SET_ACTIONaction_name IN VARCHAR2) 4 Tibero tbpsm 참조안내서
action_name 세션에저장할액션이름이다. 64byte 이상의값은잘린다. CREATE TABLE NEW_DATA_TBLDATA NUMBER) / DBMS_APPLICATION_INFO.SET_ACTION' 데이터추가 '); INSERT INTO NEW_DATA_TBL VALUES1); INSERT INTO NEW_DATA_TBL VALUES2); COMMIT; DBMS_APPLICATION_INFO.SET_ACTIONNULL); / 2.2.4. SET_CLIENT_INFO 현재세션의클라이언트정보를지정한다. SET_CLIENT_INFO 프로시저의세부내용은다음과같다. DBMS_APPLICATION_INFO.SET_CLIENT_INFOclient_info IN VARCHAR2) client_info 현재세션내에저장될 client_info 이다. 64byte 이상의값은잘린다. DBMS_APPLICATION_INFO.SET_CLIENT_INFO'my_client_info'); / SELECT sid, client_info FROM V$SESSION WHERE client_info = 'my_client_info'; 제 2 장 DBMS_APPLICATION_INFO 5
2.2.5. SET_MODULE 현재세션의모듈이름을지정한다. SET_MODULE 프로시저의세부내용은다음과같다. DBMS_APPLICATION_INFO.SET_MODULE module_name IN VARCHAR2, action_name IN VARCHAR2) module_name action_name 세션에저장할모듈이름이다. 64byte 이상의값은잘린다. 세션에저장할액션이름이다. 64byte 이상의값은잘린다. CREATE TABLE NEW_DATA_TBLDATA NUMBER) / DBMS_APPLICATION_INFO.SET_MODULE' 데이터추가 ', ' 새로운데이터인서트 '); INSERT INTO NEW_DATA_TBL VALUES1); INSERT INTO NEW_DATA_TBL VALUES2); COMMIT; DBMS_APPLICATION_INFO.SET_MODULENULL, NULL); / 2.2.6. SET_SESSION_LONGOPS SYS._VT_SESSION_LONGOPS 뷰의값을변경한다. SET_SESSION_LONGOPS 프로시저의세부내용은다음과같다. DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS id IN OUT PLS_INTEGER, op_name IN VARCHAR DEFAULT NULL, 6 Tibero tbpsm 참조안내서
sofar IN NUMBER DEFAULT 0, totalwork IN NUMBER DEFAULT 0, target_desc IN VARCHAR2 DEFAULT 'unknown target', units IN VARCHAR2 DEFAULT NULL) id 사용할 longops 의 ID 이다. -1 을넣은경우, 새로운 ID 를할당받는다. op_name SYS._VT_SESSION_LONGOPS 에저장될 opname column 값이다. 128byte 이상은무시된다. sofar totalwork target_desc SYS._VT_SESSION_LONGOPS 에저장될 sofar column 값이다. SYS._VT_SESSION_LONGOPS 에저장될 totalwork column 값이다. SYS._VT_SESSION_LONGOPS 에저장될 target_desc column 값이다. 128byte 이상은무시된다. units 값이다. SYS._VT_SESSION_LONGOPS 에저장될 units column 값이다. 128byte 이상은무시된다. DECLARE idx PLS_INTERGER := -1; DBMS_APPLICATION_INFO.SET_SESSION_LONGOPSidx); / SELECT * FROM SYS._VT_SESSION_LONGOPS; 제 2 장 DBMS_APPLICATION_INFO 7
제 3 장 DBMS_CRYPTO 본장에서는 DBMS_CRYPTO 패키지의기본개념과패키지내의프로시저와함수를사용하는방법을설 명한다. 3.1. 개요 DBMS_CRYPTO은데이터암복호화및인증등에쓰이는해시알고리즘을제공하는패키지이다. 이패키지의암복호화알고리즘들은모두키를사용하는데, 이와같이키를사용하는암호화알고리즘에서는키를안전하게관리하는것이무엇보다중요하다. 암호화알고리즘에서키를관리하는방법은 DBMS_CRYPTO 챕터를참고하기바란다. 해시알고리즘은임의의길이의데이터를고정길이의해시값으로변환한다. 3.2. 암호화 / 복호화알고리즘및체인, 패딩 DBMS_CRYPTO은데이터의암호화및복호화를위해 DESData Encryption Standard), 3DESTriple DES), AESAdvanced Encryption Standard) 등의더욱다양한알고리즘및블록패딩방식을지원하고있다. DBMS_CRYPTO보다많은종류의알고리즘을사용하므로, 이패키지를사용할것을권장한다. 각알고리즘, 체인, 패딩방식은아래와같다. 알고리즘 알고리즘 DES 64 bit의블록단위로나누어각각을 56 bit의키를사용하는알고리즘이다. 그동안널리사용되어왔으나최근에는보안성이보장되지않아점차사용빈도가줄어들고있다. 대칭키를사용하는알고리즘이다. 3DES 하나의데이터에 DES 알고리즘을두번내지세번반복하여적용하는 알고리즘이다. 각각 11256 * 2) bit 와 16856 * 3) bit 키를사용한다. DES 알고리즘과마찬가지로대칭키를사용하는알고리즘이다. 다른대칭키를사용하는알고리즘에비해암호화및복호화를하는시 간이많이필요하다는단점이있다. 제 3 장 DBMS_CRYPTO 9
알고리즘 AES RC4 128 bit의블록단위로나누어각각을 128, 192, 혹은 256 bit의키를사용하는알고리즘이다. DES 방식보다강력한알고리즘으로설계되었으며, 사실상암호화표준으로자리잡을것으로보인다. RSA 보안을위해로널드라이베스트가만든스트림암호화방식으로, 무작위치환에기반을두고있다. 바이트단위연산을하기때문에비트단위연산을하는다른스트림암호화에비해속도가빠르다. SSL/TLSSecure Sockets Layer / Transport Layer Security) 및무선랜 표준 IEEE 802.11 WEPWired Equivalent Privacy) 프로토콜등에서사 용된다. ARIA 대한민국의국가보안기술연구소에서개발한블록암호화알고리즘으 로, AES 처럼 128 bit 의블록단위로나누어각각을 128, 192, 혹은 256 bit 의키를사용한다. Involutional SPN 구조를갖기때문에경량환경및하드웨어구현에최 적화되어있다. 체인 chaining) 방식 체인방식 ECBElectronic Codebook) CBCCipher Block Chaining) 각원본데이터블록들이각각별개로암호화된다. 현재블록이바로앞에암호화된블록의데이터와 XOR 연산을거친후암호화된다. ECB 방식에서처럼동일한원본이있을경우동일한암호문이생성되는 위험을방지하기위함이다. CFBCipher-Feedback) CBC 와유사하지만, 비트단위로암호화하면서쉬프트시키는방식으로, 스트림암호화방식에가깝다. 그러므로블록크기보다작은단위의데이터의암호화도가능해진다. OFBOutput-Feedback) 블록암호가동기화된스트림암호처럼동작하게한다. CFB 와유사하지만, 다음블록을위한키배열조합에있어서현재블록 의암호문이영향을끼치지않으므로, 현재블록암호화에서오류가발 생해도다음블록에영향을끼치지않는장점이있다. 패딩 padding) 방식 10 Tibero tbpsm 참조안내서
패딩방식 PKCS5 NONE ZERO PKCS #5 Password-Based Cryptography Standard) 표준에따르는패딩방식이다. 패딩을사용하지않는다. 이러할경우데이터가단위블록의크기 128 bit) 의배수가아니면암호화가불가능하여에러를리턴하므로, 반드시데이터의크기를확인해야한다. 마지막블록의남는바이트들을 0으로채운다. 문자열과같이 0의값으로끝을체크하는데이터에만사용해야한다. 3.3. 해시알고리즘 DBMS_CRYPTO은임의의길이의데이터를고정길이의해시값으로변환하는데, 해시값을만드는것은쉽지만, 해시값을원래의데이터로복원하는일은지극히어렵게함으로써, 데이터의안전성을보장한다. 데이터변경여부체크및암호인증등인증 authentication) 작업에주로사용된다. MD4, MD5, SHA-1를통해더욱다양한알고리즘및블록패딩방식을지원하고있다. 각알고리즘은아래와같다. 알고리즘 SHA-1Secure Hash Algorithm 1) SHA는미국 NIST에의해개발된 SHSsecure hash standard) 내에정의된알고리즘으로, 길이 264bit 이하의메시지를 160bit 길이의축약된메시지로만들어낸다. MD5 보다는다소느리지만, 대규모메시지요약들이폭력적충돌및 도치공격을받을때, 좀더안전하게지켜준다. MD5Message Digest 5) 입력데이터 길이에상관없는하나의메시지 ) 로부터 128bit 메시지 축약을만듦으로써데이터무결성을검증하는데사용되는알고리 즘이다. MD4 의확장판인데, MD4 에비해속도가빠르지는않지만, 데이터 보안성에있어더많은확신을제공한다. MD4Message Digest 4) MD4 는 MD5 의초기버전으로서, 입력데이터 길이에상관없는하 나의메시지 ) 로부터 128bit 메시지축약을만듦으로써데이터무결 성을검증하는데사용되는알고리즘이다 제 3 장 DBMS_CRYPTO 11
3.4. 프로시저와함수 본절에서는 DBMS_CRYPTO 패키지에서제공하는프로시저와함수를알파벳순으로한다. 3.4.1. DECRYPT 사용자가명시한암호화알고리즘및체인, 패딩기법을이용하여암호화된데이터를복호화하는함수이다. 주어진알고리즘에맞는키의크기와블록의크기를설정해야올바르게동작한다. 알고리즘각각에따른키의크기와블록의크기는위의표에언급되어있으니참고하기바란다. DECRYPT 프로시저와함수의세부내용은다음과같다. DBMS_CRYPTO.DECRYPT src IN RAW, cipher_type IN PLS_INTEGER, key IN RAW, init_vector IN RAW DEFAULT NULL) RETURN RAW src cipher_type key init_vector 복호화할데이터이다. 사용할암호화알고리즘, 체인, 패딩기법이다. 복호화하기위해주어진키값이다. 초기화벡터이다. NULL이면 0으로채워진초기화벡터를사용한다. 반환값 복호화된데이터이다. 예외상황 예외상황 INVALID_ARGUMENT INVALID_NTH_ARGUMENT INVALID_INPUT KEY_TOO_SHORT 중하나라도 NULL인경우이다. cipher_type 값이잘못설정된경우이다. input_data의길이가 8의배수가아닌경우이다. key 값의길이가필요한크기보다작은경우이다. 12 Tibero tbpsm 참조안내서
DECLARE data RAW256); key RAW16); encrypted_data RAW256); decrypted_data RAW256); iv RAW256); data := '0102030405AE030D0102030405AE030D'; key := '0A123B8E002CD3FFA021B3E800C23DFF'; iv := '00000000000000000000000000000000'; encrypted_data := DBMS_CRYPTO.ENCRYPT src => data, cipher_type => DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); encrypted_data := DBMS_CRYPTO.DECRYPT src => encrypted_data, cipher_type => DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); 3.4.2. ENCRYPT 사용자가명시한암호화알고리즘및체인, 패딩기법을이용하여데이터를암호화하는함수이다. 주어진알고리즘에맞는키의크기와블록의크기를설정해야올바르게동작한다. 알고리즘각각에따른키의크기와블록의크기는위의표에언급되어있으니참고하기바란다. ENCRYPT 프로시저와함수의세부내용은다음과같다. DBMS_CRYPTO.ENCRYPT src IN RAW, cipher_type IN PLS_INTEGER, key IN RAW, init_vector IN RAW DEFAULT NULL) RETURN RAW 제 3 장 DBMS_CRYPTO 13
src cipher_type key init_vector 암호화할데이터이다. 사용할암호화알고리즘, 체인, 패딩기법이다. 암호화하기위해주어진키값이다. 초기화벡터이다. NULL이면 0으로채워진초기화벡터를사용한다. 반환값 암호화된데이터이다. 예외상황 예외상황 INVALID_ARGUMENT INVALID_NTH_ARGUMENT INVALID_INPUT KEY_TOO_SHORT 중하나라도 NULL인경우이다. cipher_type 값이잘못설정된경우이다. ZERO 패딩방식일때, input_data의길이가블록크기의배수가아닌경우이다. key 값의길이가필요한크기보다작은경우이다. DECLARE data RAW256); key RAW16); encrypted_data RAW256); decrypted_data RAW256); iv RAW256); data := '0102030405AE030D0102030405AE030D'; key := '0A123B8E002CD3FFA021B3E800C23DFF'; iv := '00000000000000000000000000000000'; encrypted_data := DBMS_CRYPTO.ENCRYPT src => data, cipher_type => DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); 14 Tibero tbpsm 참조안내서
3.4.3. HASH 사용자가명시한알고리즘을이용하여임의의길이의데이터를고정길이의해시값으로변환하는함수이 다. HASH 함수의세부내용은다음과같다. DBMS_CRYPTO.HASH src IN RAW, hash_type IN PLS_INTEGER) RETURN RAW src hash_type 원본데이터이다. 사용할해시알고리즘이다. 예외상황 예외상황 INVALID_ARGUMENT INVALID_NTH_ARGUMENT 중하나라도 NULL 인경우이다. hash_type 값이잘못설정된경우이다. DECLARE input varchar2100); hash_val raw20); input := 'DBMS_CRYPTO.HASH 테스트 '; hash_val := DBMS_CRYPTO.HASH src => utl_raw.cast_to_rawinput), hash_type => DBMS_CRYPTO.HASH_SH1); 제 3 장 DBMS_CRYPTO 15
제 4 장 DBMS_ERRLOG 본장에서는 DBMS_ERRLOG 패키지의기본개념과패키지내의프로시저와함수를사용하는방법을설 명한다. 4.1. 개요 DBMS_ERRLOG는에러로깅테이블 error logging table) 을생성하는하나의프로시저를제공한다. 일반적인 DML에서는에러가발생하면실패하고롤백이이루어진다. 하지만, DML문에 error_logging_clause 를명시하면에러를발생시키지않고에러의내용과데이터를에러로깅테이블에기록하고수행을계속하게된다. 4.2. 프로시저 4.2.1. CREATE_ERROR_LOG DML 의에러로깅에사용할테이블을만드는함수이다. CREATE_ERROR_LOG 함수의세부내용은다음과같다. DBMS_ERRLOG.DECRYPT dml_table_name IN VARCHAR2, err_log_table_name IN VARCHAR2 DEFAULT NULL, err_log_table_owner IN VARCHAR2 DEFAULT NULL, err_log_table_space IN VARCHAR2 DEFAULT NULL, skip_unsupported IN BOOLEAN DEFAULT FALSE) RETURN RAW dml_table_name err_log_table_name DML의대상테이블명이다. 에러로깅테이블명이다. 명시하지않으면 ERR$_ 를 dml_table_name 앞에붙여서사용한다. 제 4 장 DBMS_ERRLOG 17
err_log_table_owner err_log_table_space skip_unsupported 에러로깅테이블을생성할스키마명이다. 에러로깅테이블을생성할테이블스페이스명이다. 현재, TRUE 값을지원하지않는다. FALSE 값으로고정되어있다. SQL> create table p a number primary key); Table 'P' created. SQL> insert into p values 1); 1 row inserted. SQL> insert into p values 2); 1 row inserted. SQL> insert into p values 3); 1 row inserted. SQL> insert into p values 4); 1 row inserted. SQL> create table f a number references pa)); Table 'F' created. SQL> insert into f values 1); 1 row inserted. SQL> insert into f values 3); 1 row inserted. SQL> exec dbms_errlog.create_error_log'f'); PSM completed. SQL> commit; 18 Tibero tbpsm 참조안내서
Commit completed. SQL> insert into f select 1 from dual union all select 5 from dual) log errors reject limit 1; 1 row inserted. SQL> select * from f; A ---------- 1 3 1 3 rows selected. SQL> select * from err$_f; TIB_ERR_NUMBER$ --------------- TIB_ERR_MESG$ -------------------------------------------------------------------------------- TIB_ERR_ROWID$ TIB_ERR_OPTYP$ ------------------ -------------------- TIB_ERR_TAG$ -------------------------------------------------------------------------------- A -------------------------------------------------------------------------------- -10008 INTEGRITY constraint 'SYS'.'SYS_CON25700497') violated: primary key not found. I 5 1 row selected. 제 4 장 DBMS_ERRLOG 19
제 5 장 DBMS_FLASHBACK 본장에서는 DBMS_FLASHBACK 패키지의기본개념과패키지내의프로시저를사용하는방법을 한다. 5.1. 개요 DBMS_FLASHBACK 은현재 GET_SYSTEM_CHANGE_NUMBER 기능만구현되어있는패키지이다. 추후 FLASHBACK 모드를관리하는기능이추가될예정이다. 5.2. 프로시저와함수 본절에서는 DBMS_FLASHBACK 패키지에서제공하는프로시저와함수를알파벳순으로한다. 5.2.1. GET_SYSTEM_CHANGE_NUMBER 데이터베이스의현재 TSN 을반환한다. GET_SYSTEM_CHANGE_NUMBER 함수의세부내용은다음과같다. 프로시져 DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER DECLARE tsn NUMBER; tsn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER; / 제 5 장 DBMS_FLASHBACK 21
제 6 장 DBMS_JAVA 본장에서는 DBMS_JAVA 패키지의기본개념과패키지내의프로시저와함수를사용하는방법을 한다. 6.1. 개요 DBMS_JAVA 는데이터베이스에서사용하는 Java 객체에접근하기위한함수를제공하는패키지이다. 6.2. 프로시저 본절에서는 DBMS_JAVA 패키지에서제공하는프로시저를알파벳순으로한다. 6.2.1. SET_OUTPUT Java 객체의출력을화면으로보여주고, 입력값으로주어진크기만큼버퍼를사용하는프로시저이다. SET_OUTPUT 프로시저의세부내용은다음과같다. PROCEDURE SET_OUTPUT bufsize IN NUMBER DEFAULT 2000 ); bufsize 출력을저장할버퍼의크기이다. call DBMS_JAVA.SET_OUTPUT); call DBMS_JAVA.SET_OUTPUT5000); 제 6 장 DBMS_JAVA 23
6.3. 함수 본절에서는 DBMS_JAVA 패키지에서제공하는함수를알파벳순으로한다. 6.3.1. LONGNAME Java 객체의완전한이름을반환하는함수이다. LONGNAME 함수의세부내용은다음과같다. FUNCTION LONGNAME shortname IN VARCHAR2 ) RETURN VARCHAR2; shortname 짧게줄인 Java 객체의이름이다. SELECT dbms_java.longnameobject_name) FROM user_objects WHERE object_type='java CLASS' AND status='valid'; 6.3.2. SHORTNAME Java 객체의이름으로저장할수없는긴이름을짧은형식으로바꿔주는함수이다. SHORTNAME 함수의세부내용은다음과같다. FUNCTION SHORTNAME longname IN VARCHAR2 ) RETURN VARCHAR2; 24 Tibero tbpsm 참조안내서
longname Java 객체의원래이름이다. DECLARE short_java_object_name VARCHAR2128); long_laga_object_name VARCHAR2128) ;... short_java_object_name := dbms_java.shortnamelong_java_object_name); 제 6 장 DBMS_JAVA 25
제 7 장 DBMS_JOB 본장에서는 DBMS_JOB 패키지의기본개념과패키지내의프로시저를사용하는방법을한다. 7.1. 개요 Tibero에서는주기적으로데이터베이스에추가된 JOB을검사하여, 사용자가설정한시각이되면해당하는 JOB을실행한다. DBMS_JOB은 PSM에서사용가능한문장을 JOB으로등록하고, 이 JOB을실행할수있는연산을제공하는패키지이다. DBMS_JOB 패키지내의프로시저를이용하여, JOB을데이터베이스에추가하고바로실행하거나정해진시각에실행되도록설정할수있다. 다음은 DBMS_JOB 패키지의특징이다. DBMS_JOB 패키지의사용할때 DBA 권한은필요하지않으며, 추가된 JOB 은오직 JOB 의소유자만실 행하거나변경할수있다. 특정인스턴스 instance) 에서 JOB 을실행하도록지정하는기능은지원하지않는다. 따라서에 입력값으로 instance 와 force parameter 가입력될경우무시하게된다. JOB 을추가또는변경하는경우커밋을실행하지않아도자동으로커밋되며, JOB 내에서실행한작업 도자동으로커밋된다. 현재데이터베이스에추가된 JOB 은 DBA_JOBS, ALL_JOBS, USER_JOBS 뷰를통해확인할수있다. JOB 실행이실패한경우에는재실행되며, 16 번실패하게되면해당 JOB 은 broken 상태가된다. 실행중인 JOB 을정지할수있는기능은제공하지않는다. 제 7 장 DBMS_JOB 27
7.2. 프로시저 본절에서는 DBMS_JOB 패키지에서제공하는프로시저를알파벳순으로한다. 7.2.1. BROKEN 저장된 JOB 의상태를정상또는 broken 상태로설정하는프로시저이다. broken 되어있던 JOB 을정상상 태로만들경우, JOB 의다음실행시각을설정할수있다. BROKEN 프로시저의세부내용은다음과같다. DBMS_JOB.BROKEN job IN BINARY_INTEGER, broken IN BOOLEAN, next_date IN DATE DEFAULT SYSDATE ); job broken 실행할 JOB 의번호이다. JOB 이 broken 된경우 TRUE, 정상상태인경우 FALSE 이다. next_date broken 이 TRUE 인경우무시한다. broken 이 FALSE 인경우다음실행시각을설정한다. /* broken된 JOB을정상상태로변경하고, 한시간뒤실행하도록수정한다. */ DBMS_JOB.BROKEN100, false, sysdate + 1/24); / 28 Tibero tbpsm 참조안내서
7.2.2. CHANGE 저장된 JOB 의필드를변경하는프로시저이다. CHANGE 프로시저의세부내용은다음과같다. DBMS_JOB.CHANGE job IN BINARY_INTEGER, what IN VARCHAR2, next_date IN DATE, interval IN VARCHAR2, instance IN BINARY_INTEGER DEFAULT NULL, force IN BOOLEAN DEFAULT FALSE ); job what next_date interval 실행할 JOB의번호이다. 실행할 PL/SQL 프로시저혹은 PSM 문장의시퀀스이다. JOB을실행할다음시각이다. 다음 JOB이실행될시각을계산하기위한연산식이다. 자세한내용은 7.2.3. INTERVAL 을참조한다. instance force 지원되지않는기능이므로값을무시한다. 지원되지않는기능이므로값을무시한다. DBMS_JOB.CHANGE100, null, null, 'sysdate + 1'); / 제 7 장 DBMS_JOB 29
7.2.3. INTERVAL JOB 을얼마나자주실행할지정하는를변경하는프로시저이다. INTERVAL 프로시저의세부내용은다음과같다. DBMS_JOB.INTERVAL job IN BINARY_INTEGER, interval IN VARCHAR2 ); job interval 실행할 JOB 의번호이다. 다음에 JOB 을실행할시각인 next_date 를업데이트하기위한연산식이다. NULL 혹은날짜형으로 evaluate될수있는연산식의문자열이어야한다. 최소분단위까지가능 ) JOB을실행하기전에 evaluate된다. JOB이성공적으로실행되고, interval의계산값이 NULL이면해당 JOB은삭제된다. 다음은 interval 의사용예이다. interval 'sysdate + 1' 'next_daysysdate,''monday'')' 'null' 하루에한번씩실행한다. 매주월요일에실행한다. 한번만실행한다. /* 하루에한번씩실행한다. */ DBMS_JOB.INTERVAL100, 'sysdate + 1'); / 30 Tibero tbpsm 참조안내서
7.2.4. NEXT_DATE JOB 이스케줄되어자동으로실행될시각을변경하는프로시저이다. 실행된후에는 interval 값에의해업 데이트된다. NEXT_DATE 프로시저의세부내용은다음과같다. DBMS_JOB.NEXT_DATE job IN BINARY_INTEGER, next_date IN DATE ); job next_date 실행할 JOB 의번호이다. JOB 이스케줄되어실행될시각이다. /* 10분후에실행하도록변경한다. */ DBMS_JOB.NEXT_DATE100, sysdate + 10/24/60); / 7.2.5. REMOVE 데이터베이스에추가된 JOB 을삭제하는프로시저이다. REMOVE 프로시저의세부내용은다음과같다. DBMS_JOB.REMOVE job IN BINARY_INTEGER ); 제 7 장 DBMS_JOB 31
job 삭제할 JOB 의번호이다. DBMS_JOB.REMOVE100); / 7.2.6. RUN JOB 을현재세션에서즉시실행하는프로시저이다. JOB 이 broken 되어있어도실행하고, 실행에성공한 경우 JOB 을정상상태로변경한다. RUN 프로시저의세부내용은다음과같다. DBMS_JOB.RUN job IN BINARY_INTEGER, force IN BOOLEAN DEFAULT FALSE ); job force 실행할 JOB 의번호이다. 지원되지않는기능이므로값을무시한다. DBMS_JOB.RUN100); / 32 Tibero tbpsm 참조안내서
7.2.7. SUBMIT 데이터베이스에새로운 JOB 을추가하는프로시저이다. SUBMIT 프로시저의세부내용은다음과같다. DBMS_JOB.SUBMIT job OUT BINARY_INTEGER, what IN VARCHAR2, next_date IN DATE DEFAULT sysdate, interval IN VARCHAR2 DEFAULT 'null', no_parse IN BOOLEAN DEFAULT FALSE, instance IN BINARY_INTEGER DEFAULT NULL, force IN BOOLEAN DEFAULT FALSE ); job what next_date interval 실행할 JOB의번호이다. 실행할 PL/SQL 프로시저혹은 PSM 문장의시퀀스이다. JOB을다음에실행할시각이다. 다음 JOB이실행될시각을계산하기위한연산식이다. 자세한내용은 7.2.3. INTERVAL 을참조한다. no_parse TRUE: submit 을할때 JOB 을파싱하지않고, JOB 이실행될때파싱을하 게된다. 따라서파싱의실패여부가최초실행시점에보고된다. FALSE: JOB 에관련된프로시저를미리파싱한다. instance force 지원되지않는기능이므로값을무시한다. 지원되지않는기능이므로값을무시한다. DECLARE job_no number; DBMS_JOB.SUBMITjob_no,'dbms_output.put_line''ok'');', SYSDATE, 'SYSDATE + 1'); 제 7 장 DBMS_JOB 33
/ 7.2.8. WHAT JOB 이실행하는작업을변경하는프로시저이다. WHAT 프로시저의세부내용은다음과같다. DBMS_JOB.WHAT job IN BINARY_INTEGER, WHAT IN VARCHAR2 ); job what 실행할 JOB 의번호이다. 실행할 PL/SQL 프로시저혹은 PSM 문장의시퀀스이다. 항상세미콜론 ;) 으로끝나는문자열이와야한다. 예를들어다음과같은문자열이올수있다. psm_proc''abc'', 10); dbms_output.put_line''ok''); declare x number; begin x := x + 1;dbms_outout.put_linex); end; /* job번호가 100인 job을 psm_proc 프로시저호출로대체한다. */ DBMS_JOB.WHAT100, 'psm_proc''abc'', 10);'); / 34 Tibero tbpsm 참조안내서
제 8 장 DBMS_LOB 본장에서는 DBMS_LOB 패키지의기본개념과패키지내의프로시저와함수를사용하는방법을한 다. 8.1. 개요 DBMS_LOB은 BLOB 또는 CLOB 타입의컬럼데이터에여러가지연산을제공하는패키지이다. 또한, DBMS_LOB 패키지내의프로시저와함수를이용하여대용량객체형 Large OBject, 이하 LOB) 의전체또는일부에읽기, 쓰기등의작업을수행할수있다. 다음은 DBMS_LOB 패키지를사용할때유의해야할사항이다. 호출자권한 이패키지는호출자권한으로실행된다. 만약다른프로시저나함수에서호출되는경우, 해당프로시저나함수의실행자권한으로실행된다. 프로시저와함수의의길이 length) 와오프셋 offset) 단위 대상 destination) 데이터가 BLOB 타입이면바이트 byte), CLOB 타입이면문자 character) 단위이다. 함수의반환값도이와같다. 프로시저와함수의값을전달할때값의유효범위 LOB 데이터내의오프셋, 길이, 크기등을나타내는값은항상 1 이상이어야하며 LOBMAXSIZE 상 수의값보다크면안된다. LOBMAXSIZE 상수는 18446744073709551615 2^64 1) 의값을가진다. LOB 데이터내의오프셋, 길이, 크기등이 1 보다작거나 LOBMAXSIZE 보다큰값이면 IN VALID_ARGVAL 예외상황이발생한다. CLOB 타입의컬럼데이터 이타입은항상유니코드 UTF-16 문자집합의문자열이저장되며, 2byte 로하나의문자를나타낸다. 길이또는크기값은 LOBMAXSIZE 상수를 2 로나눈값보다작아야한다. 만약이값보다크면마찬가지로 INVALID_ARGVAL 예외상황이발생한다. 제 8 장 DBMS_LOB 35
APPEND, COPY, TRIM, WRITE LOB 데이터를갱신하려는프로시저와함수의로크기와오프셋값의합이최댓값 LOBMAX SIZE 상수값 ) 을초과하면안된다. 만약초과하면예외상황이발생한다. 그리고, LOB 데이터를갱신하려면먼저그데이터를포함하는로우에잠금 LOCK) 을설정해야한다. 왜냐하면프로시저나함수는자동으로잠금을설정해주지않기때문이다. READ, COMPARE, INSTR, SUBSTR 읽기전용의프로시저와함수는 LOB 데이터의마지막까지만읽기를수행한다. COMPARE, INSTR, SUBSTR 문자열패턴의작업을수행하는함수의로 LIKE 함수에서사용되는퍼센트 %) 와언더바 _) 와같은와일드카드 wild card) 문자를사용할수없다. LOB 데이터를수행할때에는먼저대상 LOB 데이터를 OPEN 프로시저를이용하여열고, 작업이끝나면 CLOSE 프로시저를이용하여닫는다. 이때 OPEN 프로시저로열린 LOB 데이터를닫으면데이터베이스에갱신된내용이반영된다. 반면에, OPEN 프로시저를실행하여열지않은 LOB 데이터에대해갱신연산을수행하면바로데이터베이스에반영된다. 대개의경우 LOB 데이터를갱신하면많은디스크작업이수반되므로, 여러번에걸쳐데이터베이스에반영하는것보다한번에모든갱신을데이터베이스에반영하는것이효율적이다. OPEN 프로시저를실행하여 LOB 데이터를연경우에는 COMMIT 문장을실행하기전에반드시 CLOSE 프로시저를실행하여닫아야한다. 만약열려있는 LOB 데이터가있는데 COMMIT을실행하면, 에러가발생한다. 열려있는 LOB 데이터가있을때 ROLLBACK을실행하면모든갱신은취소되고열려있는 LOB 데이터에대한정보도없어진다. 다음은 DBMS_LOB 패키지내에정의된상수이다. LOBMAXSIZE LOB 데이터의최대크기이다. LOBMAXSIZE CONSTANT BINARY_INTEGER := 18446744073709551615 데이터타입은 BINARY_INTEGER 이고 LOB 데이터의최대크기는 18446744073709551615 이다. LOB_READONLY LOB 데이터에대한읽기전용의사용여부를설정하는모드이다. LOB_READONLY CONSTANT BINARY_INTEGER := 0 데이터타입은 BINARY_INTEGER 이고값이 0 이면읽기전용으로설정된다. 36 Tibero tbpsm 참조안내서
LOB_READWRITE LOB 데이터의읽기및쓰기를설정하는모드이다. LOB_READWRITE CONSTANT BINARY_INTEGER := 1 데이터타입은 BINARY_INTEGER 이고값이 1 이면읽기및쓰기로설정된다. 8.2. 프로시저 본절에서는 DBMS_LOB 패키지에서제공하는프로시저를알파벳순으로한다. 8.2.1. APPEND 원본 LOB 데이터의전체를대상 LOB 데이터의끝에붙여넣는프로시저이다. APPEND 프로시저의세부내용은다음과같다. BLOB 타입인경우 DBMS_LOB.APPEND dest_lob IN OUT NOCOPY BLOB, src_lob IN BLOB ); CLOB 타입인경우 DBMS_LOB.APPEND dest_lob IN OUT NOCOPY CLOB, src_lob IN CLOB ); CLOB 데이터를전달하는경우 dest_lob, src_lob 의 LOB 데이터의문자집합 character set) 이같아야한다. dest_lob src_lob 대상 LOB locator 이다. 원본 LOB locator 이다. 제 8 장 DBMS_LOB 37
예외상황 예외상황 VALUE_ERROR 대상또는원본 LOB 데이터가 NULL 인경우이다. DECLARE dest_lob CLOB := 'All''s fair in '; src_lob CLOB := 'love and war'; DBMS_LOB.APPENDdest_lob, src_lob); DBMS_OUTPUT.PUT_LINE'Result = ' dest_lob); / Result = All's fair in love and war PSM completed SQL> 8.2.2. COPY 원본 LOB 데이터의전체또는일부를대상 LOB 데이터에복사하는프로시저이다. 이때복사할원본 LOB 데이터의오프셋과대상 LOB 데이터의오프셋을지정할수있다. 만약대상 LOB 데이터의오프셋이대상 LOB 데이터의길이보다짧으면오프셋위치에존재하는이전데이터는갱신된다. 이와는반대로대상 LOB 데이터오프셋이대상 LOB 데이터의길이보다길면중간에 0BLOB 데이터 ) 또는공백 CLOB 데이터 ) 으로채워진다. COPY 프로시저의세부내용은다음과같다. BLOB 타입인경우 DBMS_LOB.COPY dest_lob IN OUT NOCOPY BLOB, src_lob IN BLOB, amount IN INTEGER, dest_offset IN INTEGER := 1, src_offset IN INTEGER := 1 ); CLOB 타입인경우 38 Tibero tbpsm 참조안내서
DBMS_LOB.COPY dest_lob IN OUT NOCOPY CLOB, src_lob IN CLOB, amount IN INTEGER, dest_offset IN INTEGER := 1, src_offset IN INTEGER := 1 ); CLOB 데이터를전달하는경우 dest_lob, src_lob 의 LOB 데이터의문자집합이같아야한 다. dest_lob src_lob amount dest_offset 대상 LOB locator이다. 원본 LOB locator이다. 복사할 byteblob 데이터 ) 또는문자 CLOB 데이터 ) 의개수이다. 대상 LOB 데이터내의오프셋이다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 )) src_offset 원본 LOB 데이터내의오프셋이다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 )) 예외상황 예외상황 VALUE_ERROR INVALID_POS INVALID_LEN 입력중하나라도 NULL인경우이다. src_offset, dest_offset의값이 1보다작거나 LOBMAXSIZE보다큰경우이다. amount의값이 1보다작거나 LOBMAXSIZE보다큰경우이다. DECLARE dest_lob CLOB := 'It you would be loved, '; src_lob CLOB := 'be worthy to be loved'; DBMS_LOB.COPYdest_lob, src_lob, lengthsrc_lob), lengthdest_lob) + 1, 1); DBMS_OUTPUT.PUT_LINE'Result = ' dest_lob); 제 8 장 DBMS_LOB 39
/ Result = It you would be loved, be worthy to be loved PSM completed SQL> 8.2.3. CREATETEMPORARY 임시 CLOB 또는임시 BLOB 을생성하는프로시저이다. CREATETEMPORARY 프로시저의세부내용은다음과같다. BLOB 타입인경우 DBMS_LOB.CREATETEMPORARY lob IN OUT NOCOPY BLOB, cache IN BOOLEAN, dur IN PLS_INTEGER := 10 ); CLOB 타입인경우 DBMS_LOB.CREATETEMPORARY lob IN OUT NOCOPY CLOB, cache IN BOOLEAN, dur IN PLS_INTEGER := 10 ); lob cache dur 대상 LOB locator이다. LOB 데이터를읽을때버퍼캐시 buffer cache) 에저장할지여부이다. 현재이는 CREATETEMPORARY 프로시저의수명을조정하는기능을지원하지않는다. 단, 기본은세션이완료되면 CREATETEMPORARY 프로시저가자동으로삭제된다. 예외상황 40 Tibero tbpsm 참조안내서
예외상황 VALUE_ERROR 캐시가 NULL 인경우이다. DECLARE lob_1 CLOB; lob_2 CLOB := 'tibero'; DBMS_LOB.CREATETEMPORARYlob_1, false); DBMS_LOB.APPENDlob_1, lob_2); DBMS_OUTPUT.PUT_LINElob_1); / tibero PSM completed SQL> 8.2.4. ERASE LOB 데이터의일부또는전체를삭제하는프로시저이다. 삭제된영역은 0BLOB 데이터 ) 또는공백 CLOB 데이터 ) 으로채워진다. 대상 LOB 데이터의길이가오프셋과삭제할영역크기의합보다짧다면실제로삭제된영역의크기는삭제할영역으로입력한크기보다작을수있다. 실제로삭제된영역의크기는 amount 로출력된다. ERASE 프로시저의세부내용은다음과같다. BLOB 타입인경우 DBMS_LOB.ERASE lob IN OUT NOCOPY BLOB, amount IN OUT NOCOPY INTEGER, offset IN INTEGER := 1 ); CLOB 타입인경우 DBMS_LOB.ERASE lob IN OUT NOCOPY CLOB, 제 8 장 DBMS_LOB 41
); amount IN OUT NOCOPY INTEGER, offset IN INTEGER := 1 lob amount offset 대상 LOB locator이다. 삭제할 byte 또는문자개수이다. 삭제할오프셋이다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 )) 예외상황 예외상황 VALUE_ERROR INVALID_POS INVALID_LEN 입력가하나라도 NULL인경우이다. offset의값이 1보다작거나 LOBMAXSIZE보다큰경우이다. amount의값이 1보다작거나 LOBMAXSIZE보다큰경우이다. DECLARE lob CLOB := 'Tmaxsoft Tibero'; amount NUMBER := 7; DBMS_OUTPUT.PUT_LINE'Length of original LOB = ' lengthlob)); DBMS_LOB.ERASElob, amount, 9); DBMS_OUTPUT.PUT_LINE'Value of erased LOB = ' lob); DBMS_OUTPUT.PUT_LINE'Length of erased LOB = ' lengthlob)); / Length of original LOB = 15 Value of erased LOB = Tmaxsoft Length of erased LOB = 15 PSM completed SQL> 42 Tibero tbpsm 참조안내서
8.2.5. FREETEMPORARY 이미생성된임시 BLOB 또는임시 CLOB 을삭제하는프로시저이다. FREETEMPORARY 프로시저의세부내용은다음과같다. BLOB 타입인경우 DBMS_LOB.FREETEMPORARY lob IN OUT NOCOPY BLOB ); CLOB 타입인경우 DBMS_LOB.FREETEMPORARY lob IN OUT NOCOPY CLOB ); lob 대상 LOB locator 이다. 예외상황 예외상황 VALUE_ERROR 입력가 NULL 인경우이다. DECLARE lob CLOB; DBMS_LOB.CREATETEMPORARYlob, false); DBMS_LOB.FREETEMPORARYlob); / PSM completed SQL> 제 8 장 DBMS_LOB 43
8.2.6. READ 대상 LOB 데이터의일부또는전체를읽어출력의버퍼에저장하는프로시저이다. 만약읽기를시작하는오프셋과읽을크기의합이대상 LOB 데이터의크기보다커서 LOB 데이터의끝을지나가게되면, 실제읽은데이터의크기는로주어진읽을크기보다작을수있다. 이때실제로읽어온데이터의크기는입출력 amount에저장되어반환된다. 만약읽을오프셋의위치가대상 LOB 데이터의크기보다크다면 NO_DATA_FOUND 예외상황이발생한다. CLOB 데이터로부터읽은데이터를클라이언트에전송하는경우, 클라이언트의문자집합으로자동변환된다. 이경우실제로읽어온데이터와달라질수있다. READ 프로시저의세부내용은다음과같다. BLOB 타입인경우 DBMS_LOB.READ lob IN BLOB, amount IN OUT NOCOPY BINARY_INTEGER, offset IN INTEGER, buffer OUT RAW ); CLOB 타입인경우 DBMS_LOB.READ lob IN CLOB, amount IN OUT NOCOPY BINARY_INTEGER, offset IN INTEGER, buffer OUT VARCHAR2 ); lob amount 읽을대상 LOB locator 이다. 읽을크기를입력하고실제로읽어온크기를출력한다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 ) 개수 ) offset 읽을대상 LOB 데이터내의오프셋이다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 )) 44 Tibero tbpsm 참조안내서
buffer 읽을데이터를저장하는출력버퍼이다. 예외상황 예외상황 VALUE_ERROR INVALID_POS 입력중하나라도 NULL 인경우이다. offset 의값이 1 보다작거나 LOBMAXSIZE 보다큰경우이다. INVALID_LEN amount 의값이 1 보다작거나 MAXBUFSIZE 보다큰경우이다. amount 의값이버퍼의크기보다큰경우이다. NO_DATA_FOUND offset 이대상 LOB 데이터의크기보다큰경우이다. DECLARE lob CLOB := 'TIBERO fighting!!!'; buffer VARCHAR2256); amount BINARY_INTEGER := 8; DBMS_LOB.READlob, amount, 8, buffer); DBMS_OUTPUT.PUT_LINE'Value to be read = ' buffer); / Value to be read = fighting PSM completed SQL> 8.2.7. TRIM 대상 LOB 데이터의길이를지정된길이로설정하는함수이다. BLOB 데이터의경우 byte 단위로, CLOB 데이터의경우문자단위로길이를지정한다. 지정된길이를넘는데이터는소멸된다. 만약이프로시저를길이가 0인 LOB 데이터로실행하면아무런값이반환되지않는다. TRIM 프로시저의세부내용은다음과같다. BLOB 타입인경우 제 8 장 DBMS_LOB 45
DBMS_LOB.TRIM lob IN OUT NOCOPY BLOB, newlen IN INTEGER ); CLOB 타입인경우 DBMS_LOB.TRIM lob IN OUT NOCOPY CLOB, newlen IN INTEGER ); lob newlen 대상 LOB locator 이다. 새롭게지정된 LOB 데이터의길이이다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 )) 예외상황 예외상황 VALUE_ERROR INVALID_LEN 입력중하나라도 NULL 인경우이다. newlen 값이 0 보다작거나 LOBMAXSIZE 보다큰경우이다. DECLARE lob CLOB := 'A pity beyond all telling is in the heart of love'; DBMS_LOB.TRIMlob, 25); DBMS_OUTPUT.PUT_LINE'Value = ' lob); DBMS_OUTPUT.PUT_LINE'Length = ' lengthlob)); / Value = A pity beyond all telling Length = 25 PSM completed SQL> 46 Tibero tbpsm 참조안내서
8.2.8. WRITE 대상 LOB 데이터의지정된오프셋위치에주어진데이터를지정된크기만큼저장하는프로시저이다. 새로운데이터가저장되는위치에존재하는이전데이터는소멸된다. BLOB 데이터에대한오프셋및크기는 byte 단위이며, CLOB 데이터에대해서는문자단위이다. 주어진데이터의실제크기보다지정된크기가큰경우에는에러가발생하며, 지정된크기가작은경우에는지정된크기만큼만저장된다. 지정된오프셋이대상 LOB 데이터의크기보다큰경우에는중간에 0BLOB 데이터 ) 또는공백 CLOB 데이터 ) 으로채워진다. 이프로시저를 CLOB 데이터에대하여실행할때 CLOB 데이터의문자집합과저장할데이터의문자집합은같아야한다. 이프로시저를클라이언트쪽에서호출하는경우, 저장할데이터가클라이언트쪽의문자집합으로부터 CLOB 데이터문자집합으로변환된후에저장된다. WRITE 프로시저의세부내용은다음과같다. BLOB 타입인경우 DBMS_LOB.WRITE lob IN OUT NOCOPY BLOB, amount IN BINARY_INTEGER, offset IN INTEGER, buffer IN RAW ); CLOB 타입인경우 DBMS_LOB.WRITE lob IN OUT NOCOPY CLOB, amount IN BINARY_INTEGER, offset IN INTEGER, buffer IN VARCHAR ); lob amount 대상 LOB locator 이다. 저장할데이터의크기이다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 )) 제 8 장 DBMS_LOB 47
offset 데이터를저장할오프셋이다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 )) buffer 저장할데이터이다. 예외상황 예외상황 VALUE_ERROR INVALID_POS INVALID_LEN 중하나라도 NULL인경우이다. offset의값이 1보다작거나 LOBMAXSIZE보다큰경우이다. amount의값이 1보다작거나 MAXBUFSIZE보다큰경우이다. DECLARE lob CLOB; buffer VARCHAR2100); DBMS_LOB.CREATETEMPORARYlob, false); buffer := 'Love is friendship set on fire'; DBMS_LOB.WRITElob, lengthbuffer), 1, buffer); DBMS_OUTPUT.PUT_LINElob); / Love is friendship set on fire PSM completed SQL> 8.2.9. WRITEAPPEND 대상 LOB 데이터의끝에주어진데이터를지정된크기만큼저장하는프로시저이다. 이프로시저는 WRITE 프로시저의오프셋을대상 LOB 데이터의길이로설정한것과같다. BLOB 데이터의크기는 byte 단위이며, CLOB 데이터는문자단위이다. 주어진데이터의실제크기보다지정된크기가큰경우에는에러가발생하며, 지정된크기가작은경우에는지정된크기만큼만저장된다. 이프로시저를 CLOB 데이터에대하여실행할때에 CLOB 데이터의문자집합과저장할데이터의문자집합은같아야한다. 이프로시저를클라이언트쪽에서호출하는경우, 저장할데이터가클라이언트쪽의문자집합에서 CLOB 데이터문자집합으로변환된후에저장된다. 48 Tibero tbpsm 참조안내서
WRITEAPPEND 프로시저의세부내용은다음과같다. BLOB 타입인경우 DBMS_LOB.WRITEAPPEND lob IN OUT NOCOPY BLOB, amount IN BINARY_INTEGER, buffer IN RAW ); CLOB 타입인경우 DBMS_LOB.WRITEAPPEND lob IN OUT NOCOPY CLOB, amount IN BINARY_INTEGER, buffer IN VARCHAR2 ); lob amount 대상 LOB locator 이다. 저장할데이터의크기이다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 ) 개수 ) buffer 저장할데이터이다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 )) 예외상황 예외상황 VALUE_ERROR INVALID_LEN 중하나라도 NULL 인경우이다. amount 값이 1 보다작거나 MAXBUFSIZE 보다큰경우이다. DECLARE lob CLOB := 'Parting is such '; 제 8 장 DBMS_LOB 49
buffer VARCHAR2100) := 'sweet sorrow'; DBMS_LOB.WRITEAPPENDlob, lengthbuffer), buffer); DBMS_OUTPUT.PUT_LINE'Result = ' lob); / Result = Parting is such sweet sorrow PSM completed SQL> 8.3. 함수 본절에서는 DBMS_LOB 패키지에서제공하는함수를알파벳순으로한다. 8.3.1. COMPARE 두개의 LOB 데이터의전체또는일부를비교하는함수이다. 같은타입의 LOB 데이터간에만비교가가 능하다. COMPARE 함수의세부내용은다음과같다. BLOB 타입인경우 DBMS_LOB.COMPARE lob_1 IN BLOB, lob_2 IN BLOB, amount IN INTEGER := 4294967295, offset_1 IN INTEGER := 1, offset_2 IN INTEGER := 1 ) RETURN INTEGER; CLOB 타입인경우 DBMS_LOB.COMPARE lob_1 IN CLOB, lob_2 IN CLOB, amount IN INTEGER := 4294967295, offset_1 IN INTEGER := 1, 50 Tibero tbpsm 참조안내서
offset_2 IN INTEGER := 1 ) RETURN INTEGER; CLOB 데이터를전달하는경우 lob_1, lob_2 의 LOB 데이터의문자집합이같아야한다. lob_1 lob_2 amount offset_1 비교대상인첫번째 LOB locator이다. 비교대상인두번째 LOB locator이다. 비교할 byte의크기 BLOB 데이터 ) 또는문자 CLOB 데이터 ) 개수이다. 비교를시작할첫번째 LOB 데이터오프셋이다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 )) offset_2 비교를시작할두번째 LOB 데이터오프셋이다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 )) 반환값 반환값 0 N < 0 or N > 0 lob_1, lob_2 의 LOB 데이터가동일한경우에반환한다. lob_1, lob_2 의 LOB 데이터가동일하지않은경우에반환한다. NULL amount가 1보다작은경우에반환한다. amount가 LOBMAXSIZE보다큰경우에반환한다. offset_1 또는 offset_2가 1보다작은경우에반환한다. offset_1 또는 offset_2가 LOBMAXSIZE보다큰경우에반환한다. DECLARE lob_1 CLOB := 'abcdefgh'; lob_2 CLOB := 'abcdefgg'; IF DBMS_LOB.COMPARElob_1, lob_2) = 0 then DBMS_OUTPUT.PUT_LINE'LOB_1 equals LOB_2'); ELSE DBMS_OUTPUT.PUT_LINE'LOB_1 does not equals LOB_2'); 제 8 장 DBMS_LOB 51
END IF; / LOB_1 does not equals LOB_2 PSM completed SQL> 8.3.2. GETLENGTH 대상 LOB 데이터의길이를반환하는함수이다. 이때길이는입력 LOB 데이터의타입에따라 byte 또는 문자단위의값으로반환된다. GETLENGTH 함수의세부내용은다음과같다. BLOB 타입인경우 DBMS_LOB.GETLENGTH lob IN BLOB ) RETURN INTEGER; CLOB 타입인경우 DBMS_LOB.GETLENGTH lob IN CLOB ) RETURN INTEGER; lob 대상 LOB locator 이다. 반환값 반환값 0 NULL 빈 LOB 데이터인경우에반환한다. 입력 LOB 데이터의가 NULL 인경우에반환한다. 52 Tibero tbpsm 참조안내서
COPY, ERASE, WRITE 등의프로시저에의해채워진 0BLOB 데이터 ) 또는공백 CLOB 데이터 ) 문자 도대상 LOB 데이터의길이에포함된다. DECLARE lob CLOB := 'architecture'; DBMS_OUTPUT.PUT_LINEDBMS_LOB.GETLENGTHlob)); / 12 PSM completed SQL> 8.3.3. INSTR 대상 LOB 데이터내에서주어진패턴이 n 번째로나타나는오프셋을반환하는함수이다. 패턴을탐색하는위치는대상 LOB 데이터의처음일수도있고입력로지정된위치일수도있다. 이때탐색할대상패턴은 LIKE 연산자에서사용되는퍼센트 %) 또는언더바 _) 와같은와일드카드문자등을포함할수없다. INSTR 함수의세부내용은다음과같다. BLOB 타입인경우 DBMS_LOB.INSTR lob IN BLOB, pattern IN RAW, offset IN INTEGER := 1, nth IN INTEGER := 1 ) RETURN INTEGER; CLOB 타입인경우 DBMS_LOB.INSTR lob IN CLOB, pattern IN VARCHAR, offset IN INTEGER := 1, 제 8 장 DBMS_LOB 53
) RETURN INTEGER; nth IN INTEGER := 1 lob pattern offset 패턴을탐색할대상 LOB locator이다. 탐색할패턴이다. LOB 데이터내의탐색을시작할오프셋이다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 )) nth 탐색할패턴의개수이다. 1 이상의값을가지며, 1 이면첫번째패턴의오프셋을반환한다. 반환값 반환값 INTEGER 패턴과일치하는부분을찾은경우해당패턴이시작되는오프셋을반환한다. 만약찾지못한경우에는 0 을반환한다. NULL IN 중하나라도 NULL 인경우에반환한다. offset 이 1 보다작거나 LOBMAXSIZE 보다큰경우에반환한다. nth 가 1 보다작거나 LOBMAXSIZE 보다큰경우에반환한다. DECLARE lob CLOB := 'Corporate floor'; result NUMBER; result := DBMS_LOB.INSTRlob, 'or', 3, 2); DBMS_OUTPUT.PUT_LINE'Result offset = ' result); / Result offset = 14 PSM completed SQL> 54 Tibero tbpsm 참조안내서
8.3.4. ISTEMPORARY 주어진 LOB 이임시 LOB 인지아닌지의여부를확인하는함수이다. ISTEMPORARY 함수의세부내용은다음과같다. BLOB 타입인경우 DBMS_LOB.ISTEMPORARY lob IN BLOB ) RETURN INTEGER; CLOB 타입인경우 DBMS_LOB.ISTEMPORARY lob IN CLOB ) RETURN INTEGER; lob 대상 LOB locator 이다. 반환값 반환값 1 0 임시 LOB 인경우에반환한다. 임시 LOB 이아닌경우에반환한다. DECLARE lob CLOB; DBMS_LOB.CREATETEMPORARYlob, false); IF DBMS_LOB.ISTEMPORARYlob) = 1THEN DBMS_OUTPUT.PUT_LINE'TRUE'); ELSE 제 8 장 DBMS_LOB 55
DBMS_OUTPUT.PUT_LINE'FALSE'); END IF; / TRUE PSM completed SQL> 8.3.5. SUBSTR 대상 LOB 데이터의지정된오프셋의위치로부터지정된크기만큼의데이터를반환하는함수이다. 반환될최대크기는 32767byte이며, CLOB 데이터의경우반환될최대문자개수는 32767을 2로나눈값이다. CLOB 데이터에대하여이함수를호출하면같은문자집합의문자열이반환된다. 이함수는하나의라도 NULL이넘겨지거나, amount 또는 offset의값이 1보다작거나 LOBMAXSIZE보다큰경우에 NULL을반환한다. 이함수를 CLOB 데이터에대해클라이언트쪽에서호출한경우, 만약클라이언트쪽에설정된문자집합가 CLOB 데이터문자집합과다르다면데이터전송중에자동적으로문자집합의변환이일어난다. SUBSTR 함수의세부내용은다음과같다. BLOB 타입인경우 DBMS_LOB.SUBSTR lob IN BLOB, amount IN INTEGER := 32767, offset IN INTEGER := 1 ) RETURN RAW; CLOB 타입인경우 DBMS_LOB.SUBSTR lob IN CLOB, amount IN INTEGER := 32767, offset IN INTEGER := 1 ) RETURN VARCHAR2; 56 Tibero tbpsm 참조안내서
lob amount 대상 LOB 데이터이다. 읽을데이터의크기이다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 ) 개수 ) offset 데이터를읽을 LOB 데이터내의오프셋이다. 단위 : byteblob 데이터 ) 또는문자 CLOB 데이터 )) 반환값 반환값 RAW/VARCHAR2 데이터 SUBSTR 함수가성공적으로종료된경우에반환한다. NULL 입력가하나라도 NULL 인경우에반환한다. amount 가 1 보다작거나 32767byte 보다큰경우에반환한다. offset 이 1 보다작거나 LOBMAXSIZE 보다큰경우에반환한다. DECLARE lob CLOB := 'Your friend is too young'; buffer VARCHAR2100); buffer := DBMS_LOB.SUBSTRlob, 6, 6); DBMS_OUTPUT.PUT_LINE'My favorite word is ' UPPERbuffer)); / My favorite word is FRIEND PSM completed SQL> 제 8 장 DBMS_LOB 57
제 9 장 DBMS_LOCK 본장에서는 DBMS_LOCK 패키지의기본개념과패키지내의프로시저를사용하는방법을한다. 9.1. 개요 DBMS_LOCK 은현재 SLEEP 기능만구현되어있는패키지이다. 추후락을관리하는기능이추가될예정 이다. 9.2. 프로시저 본절에서는 DBMS_DBMS_LOCK 패키지에서제공하는프로시저를알파벳순으로한다. 9.2.1. SLEEP 현재세션을일정시간만큼대기시킨다. SLEEP 프로시저의세부내용은다음과같다. DBMS_LOCK.SLEEPseconds IN NUMBER) seconds 대기시간 초 ) 이다. DECLARE second NUMBER; second := 0.11; DBMS_LOCK.SLEEPsecond); / 제 9 장 DBMS_LOCK 59
제 10 장 DBMS_MVIEW 본장에서는 DBMS_MVIEW 패키지의기본개념과패키지내의프로시저를사용하는방법을한다. 10.1. 개요 DBMS_MVIEW 는실체화뷰와관련된정보를제공하고이정보를최근의것으로변경할수있는 REFRESH 기능을사용하기위한프로시저를제공하는패키지이다. 10.2. 프로시저 본절에서는 DBMS_MVIEW 패키지에서제공하는프로시저를알파벳순으로한다. 10.2.1. EXPLAIN_REWRITE SQL의질의다시쓰기 Query Rewrite) 정보를하는프로시저이다. 이프로시저는왜 SQL 질의가재작성에실패했는지혹은어떤실체화뷰를사용해서재작성되었는지, 재작성된 SQL 질의는무엇인지를해준다. 이러한정보를밑바탕으로사용자는 SQL 질의가재작성될수있도록처리할수있다. query 로전달받은 SQL 질의문은실제로수행되지않으며, 결과는현재스키마의 REWRITE_TABLE 테이블에저장된다. 단, 이프로시저를호출하기전에 $TB_HOME/scripts/rewrite_table.sql 스크립트를실행하여 REWRITE_TABLE 테이블을미리생성해야한다. EXPLAIN_REWRITE 프로시저의세부내용은다음과같다. DBMS_MVIEW.EXPLAIN_REWRITE query IN VARCHAR2, statement_id IN VARCHAR2 ); query statement_id SQL 질의문이다. SQL 질의문의결과를구별하기위해사용자가정한고유식별자이다. 제 10 장 DBMS_MVIEW 61
이식별자는 REWRITE_TABLE 테이블의 STATEMENT_ID 컬럼에저장된다. SQL> create table base as select modlevel, 100) a, level*10 b from dual connect by level<=100); SQL> create materialized view mv enable query rewrite as select suma+b) s, countb+a) c from base; SQL> @rewrite_table.sql SQL> exec dbms_mview.explain_rewrite'select avga+b) from base') SQL> select MV_OWNER, MV_NAME, QUERY, REWRITTEN_TXT, MESSAGE from rewrite_table; MV_OWNER MV_NAME QUERY REWRITTEN_TXT MESSAGE -------- ------- --------------- ------------------------ ------------------------ SYS MV SELECT AVGA+B) SELECT "MV"."S" 010: query was rewritten FROM BASE / "MV"."C") "AVGA+B)" with materialized view FROM "SYS"."MV" select avga+b) SELECT "MV"."S" 000: whole query was from base / "MV"."C") "AVGA+B)" written FROM "SYS"."MV" 10.2.2. REFRESH 실체화뷰를 Refresh하는프로시저이다. REFRESH 프로시저의세부내용은다음과같다. DBMS_MVIEW.REFRESH mview IN VARCHAR2, refresh_method IN VARCHAR2 ); mview refresh_method Refresh 할실체화뷰이다. Refresh 에사용될방법이다. 62 Tibero tbpsm 참조안내서
C 또는 c: 완전 Refresh를사용한다. F 또는 f: 빠른 Refresh를사용한다.?: 빠른 Refresh가가능한경우빠른 Refresh를사용하고, 그렇지않으면완전 Refresh를사용한다. 기본값 ) call dbms_mview.refresh'myuser.mv_t','f'); call dbms_mview.refresh'mv_t','c'); 제 10 장 DBMS_MVIEW 63
제 11 장 DBMS_OBFUSCATION_TOOLKIT 본장에서는 DBMS_OBFUSCATION_TOOLKIT 패키지의기본개념과패키지내의프로시저와함수를 사용하는방법을한다. 11.1. 개요 DBMS_OBFUSCATION_TOOLKIT은데이터를암호화 encryption) 하고복호화 decryption) 하는패키지이다. 이패키지에서는데이터의암호화및복호화를위해 DESData Encryption Standard) 또는 3DESTriple DES) 알고리즘을이용한다. DES와 3DES 알고리즘은대칭키 symmetric key) 를사용하는알고리즘이다. 알고리즘 DES 56 bit 의키를사용하는알고리즘이다. 그동안널리사용되어왔으나최근에는보 안성이보장되지않아점차사용빈도가줄어들고있다. 대칭키를사용하는알고리즘이다. 3DES 하나의데이터에 DES 알고리즘을두번내지세번반복하여적용하는알고리즘 이다. 각각 11256 * 2) bit 와 16856 * 3) bit 키를사용한다. DES 알고리즘과마찬 가지로대칭키를사용하는알고리즘이다. 다른대칭키를사용하는알고리즘에비해암호화및복호화를하는시간이많이 필요하다는단점이있다. 이러한대칭키를사용하는암호화알고리즘에서는키를안전하게관리하는것이무엇보다중요하다. 암호화알고리즘에서키를관리하는방법은다음과같다. 데이터베이스에키를저장하는방법특정테이블의컬럼에키를저장하는방법이다. 이때키를저장하는테이블은암호화된데이터컬럼과같은테이블일수도있고, 다른테이블일수도있다. 같은테이블에키를저장하는경우에는해당테이블전체에대한액세스특권을부여하는대신뷰또는 tbpsm 프로그램등을통하여해당테이블에액세스해야한다. 운영체제파일에저장하는방법 제 11 장 DBMS_OBFUSCATION_TOOLKIT 65
키를파일에저장하고, 데이터베이스내에서 tbpsm 프로그램등을통하여운영체제파일로부터키를읽어데이터를암호화하거나복호화하는방법이다. 이때키를저장하는운영체제파일은패스워드파일과같이다른사람이직접액세스할수없도록보안을유지해야한다. 사용자가키를직접입력하는방법사용자또는애플리케이션프로그램내에서필요할때마다키를데이터베이스로전송하여암호화및복호화를수행하는방법이다. 이방법은사용자가키를항상암기하고있거나애플리케이션프로그램의소스내에키가포함되어있어야한다. 또한, 키는네트워크를통하여데이터베이스서버로전달되므로, 네트워크보안에도유의해야한다. 11.2. 프로시저와함수 본절에서는 DBMS_OBFUSCATION_TOOLKIT 패키지에서제공하는프로시저와함수를알파벳순으로 한다. 11.2.1. DES3DECRYPT 3DES 알고리즘을이용하여암호화된데이터를복호화하는프로시저와함수이다. 주어진암호화된데이터에대하여두번또는세번의 DES 복호화를수행할수있다. 복호화를위해주어진키에대해복호화를두번수행한다면 16byte128bit), 세번을수행한다면 24byte192bit) 이어야하며, 그렇지않으면예외상황이발생한다. 디폴트는두번의 DES 복호화를수행한다. 암호화된데이터와같은횟수만큼 DES 알고리즘을수행해야한다. DES3DECRYPT 프로시저와함수의세부내용은다음과같다. 프로시저 DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT input IN RAW, key IN RAW, decrypted_data OUT RAW, which IN PLS_INTEGER DEFAULT 0, iv IN RAW DEFAULT NULL ); 66 Tibero tbpsm 참조안내서