CUBRID
  • 매뉴얼 소개
    • 매뉴얼 구성
    • 용어 정리
    • 매뉴얼 규약
    • 버전명 및 버전 문자열 규약
  • CUBRID 소개
    • 시스템 구조
      • 프로세스 구조
      • 데이터베이스 볼륨 구조
        • 영구적 볼륨(Permanent Volume)
        • 일시적 볼륨(Temporary Volume)
        • 백업 볼륨
      • 데이터베이스 서버
      • 브로커
      • 인터페이스 모듈
    • CUBRID의 특징
  • 설치 및 업그레이드
    • 설치와 실행
      • 지원 플랫폼 및 설치 권장 사양
      • 버전 호환성
      • Linux에서의 설치와 실행
      • Windows에서의 설치와 실행
      • 압축 파일로 설치하기
        • Linux에서 tar.gz 파일로 CUBRID 설치
        • Windows에서 zip 파일로 CUBRID 설치
    • 환경 변수 설정
      • CUBRID 환경 변수
      • OS 환경 변수
      • 환경 변수 설정
      • 언어 및 문자셋 설정
    • 포트 설정
      • CUBRID 기본 사용 포트
      • CUBRID HA 사용 포트
      • CUBRID 매니저 서버 사용 포트
      • CUBRID 프로시저 언어 서버 사용 포트
    • 업그레이드
      • 업그레이드 시 주의 사항
      • CUBRID 9.2/9.3/10.0/10.1/10.2/11.0/11.2/11.3 에서 CUBRID 11.4 로 업그레이드하기
        • DB 마이그레이션
        • 파라미터 설정
      • CUBRID 9.1에서 CUBRID 11.4로 업그레이드하기
        • DB 마이그레이션
        • 파라미터 설정
      • CUBRID 2008 R4.1/R4.3/R4.4에서 CUBRID 11.4로 업그레이드하기
        • DB 마이그레이션
        • 파라미터 설정
      • CUBRID 2008 R4.0 이하 버전에서 CUBRID 11.4로 업그레이드하기
        • DB 마이그레이션
        • 파라미터 설정
    • HA 환경에서 DB 마이그레이션
      • CUBRID 2008 R2.2 이상 버전에서 CUBRID 11.4로 HA 마이그레이션
      • CUBRID 2008 R2.0 또는 R2.1에서 CUBRID 11.4로 HA 마이그레이션
    • CUBRID 제거
      • Linux에서 CUBRID 제거
      • Windows에서 CUBRID 제거
  • 시작하기
    • CUBRID 서비스 시작
      • 셸 명령어
      • CUBRIDService 또는 CUBRID Service Tray
      • 데이터베이스 생성
      • 데이터베이스 시작
    • 질의 도구
      • CSQL 인터프리터
    • 관리 도구
      • CUBRID 매니저로 SQL 실행하기
      • CUBRID 마이그레이션 툴킷으로 스키마/데이터 이전하기
    • 드라이버
  • CSQL 인터프리터
    • CSQL 인터프리터 소개
    • CSQL 실행
      • CSQL 실행 모드
      • CSQL 사용 방법
      • CSQL 시작 옵션
    • 세션 명령어
  • CUBRID SQL
    • 작성 규칙
      • 식별자
        • 식별자 작성 원칙
        • 허용되는 식별자
        • 허용되지 않는 식별자
        • 식별자 이름의 최대 길이
      • 예약어
      • 주석
      • 리터럴
        • 숫자
        • 날짜/시간
        • 비트열
        • 문자열
        • 컬렉션
        • NULL
    • 데이터 타입
      • 데이터 타입
        • 수치형 데이터 타입
          • INT, INTEGER
          • SHORT, SMALLINT
          • BIGINT
          • NUMERIC, DECIMAL
          • FLOAT, REAL
          • DOUBLE, DOUBLE PRECISION
        • 날짜/시간 데이터 타입
          • DATE
          • TIME
          • TIMESTAMP
          • DATETIME
          • 문자열을 날짜/시간 타입으로 CAST
        • 타임존이 있는 날짜/시간 데이터 타입
          • 타임존 설정
          • 타임존 함수
          • 타임존 타입을 사용하는 함수
          • 타임존 타입에 대한 변환 함수
          • IANA 타임존
        • 비트 문자열 데이터 타입
          • BIT(n)
          • BIT VARYING(n)
        • 문자열 데이터 타입
          • CHAR(n)
          • VARCHAR(n) 또는 CHAR VARYING(n)
          • STRING
          • 특수 문자 이스케이프
          • 비교 규칙
        • ENUM 데이터 타입
          • ENUM 타입 비교
          • ENUM 타입 정렬
          • 참고 사항
        • BLOB/CLOB 데이터 타입
          • BLOB
          • CLOB
          • 정의 및 변경
          • 저장 및 변경
          • 조회
          • 연산자와 함수
          • 저장소 생성 및 관리
          • 트랜잭션 지원 및 복구
        • 컬렉션 데이터 타입
          • SET
          • MULTISET
          • LIST 또는 SEQUENCE
        • JSON 데이터 타입
          • JSON 데이터 생성
          • JSON 유효성 검사
          • JSON 데이터의 타입
          • JSON 데이터 변환
          • JSON 경로
          • JSON 포인터
        • 묵시적 타입 변환
          • 변환 규칙
    • 데이터 정의문
      • 테이블 정의문
        • CREATE TABLE
          • 테이블 정의
          • 칼럼 정의
          • ON UPDATE
          • 제약 조건 정의
          • 칼럼 옵션
          • 테이블 옵션
          • CREATE TABLE LIKE
          • CREATE TABLE AS SELECT
        • ALTER TABLE
          • ADD COLUMN 절
          • ADD CONSTRAINT 절
          • ADD INDEX 절
          • ALTER COLUMN … SET DEFAULT 절
          • AUTO_INCREMENT 절
          • CHANGE/MODIFY 절
          • 칼럼의 커멘트
          • RENAME COLUMN 절
          • DROP COLUMN 절
          • DROP CONSTRAINT 절
          • DROP INDEX 절
          • DROP PRIMARY KEY 절
          • DROP FOREIGN KEY 절
        • DROP TABLE
        • RENAME TABLE
      • 인덱스 정의문
        • CREATE INDEX
          • 인덱스의 커멘트
          • 온라인 인덱스 생성
          • 다른 트랜잭션에서 온라인 인덱스 출력
          • 다른 트랜잭션이 고유키 위반을 유발하는 삽입을 실행하는 도중의 온라인 인덱스
          • DEDUPLICATE
        • ALTER INDEX
        • DROP INDEX
      • 뷰 정의문
        • CREATE VIEW
          • 업데이트 가능한 VIEW의 생성 조건
          • 뷰의 커멘트
        • ALTER VIEW
          • ADD QUERY 절
          • AS SELECT 절
          • CHANGE QUERY 절
          • DROP QUERY 절
          • COMMENT 절
        • DROP VIEW
        • RENAME VIEW
      • 시리얼 정의문
        • CREATE SERIAL
          • 시리얼의 커멘트
        • ALTER SERIAL
        • DROP SERIAL
        • 시리얼 사용
          • 의사 칼럼
          • 함수
      • 동의어 정의문
        • CREATE SYNONYM
          • 1. 전용(Private) 동의어
          • 2. 동의어 정보
          • 3. 동의어 이름
          • 4. 동의어에 대한 동의어
          • 5. 스키마 지정 동의어 생성
        • ALTER SYNONYM
          • 대상 객체 변경
          • 커멘트 변경
        • DROP SYNONYM
        • RENAME SYNONYM
          • 1. 스키마를 변경할 수 없음
          • 2. 이미 사용 중인 이름
        • 동의어 사용
          • 1. 다른 스키마의 동의어 사용
          • 2. 동의어를 사용할 수 없는 구문
      • 서버 정의문
        • CREATE SERVER
          • 서버 정의
        • RENAME SERVER
        • DROP SERVER
        • ALTER SERVER
          • OWNER TO 절
          • CHANGE 절
      • 저장 프로시저/함수 정의문
        • CREATE PROCEDURE
          • 저장 프로시저의 커멘트
          • 등록된 저장 프로시저의 정보 확인
        • CREATE FUNCTION
          • 저장 함수의 커멘트
          • 등록된 저장 함수의 정보 확인
          • CREATE FUNCTION DETERMINISTIC
        • ALTER PROCEDURE
        • ALTER FUNCTION
        • DROP PROCEDURE
        • DROP FUNCTION
    • 연산자와 함수
      • 논리 연산자
      • 비교 연산자
      • 산술 연산자
        • 수치형 데이터 타입의 산술 연산과 타입 변환
        • 날짜/시간 데이터 타입의 산술 연산과 타입 변환
          • 타임존 파라미터들과 관련된 동작
      • 집합 산술 연산자
        • SET, MULTISET, LIST
          • 변수에 컬렉션 값 할당
      • 문장 집합 연산자
        • UNION, DIFFERENCE, INTERSECTION
      • 포함 연산자
        • SETEQ
        • SETNEQ
        • SUPERSET
        • SUPERSETEQ
        • SUBSET
        • SUBSETEQ
      • 비트 함수와 연산자
        • 비트 연산자
        • BIT_AND
          • BIT_AND()
        • BIT_OR
          • BIT_OR()
        • BIT_XOR
          • BIT_XOR()
        • BIT_COUNT
          • BIT_COUNT()
      • 문자열 함수와 연산자
        • 병합 연산자
        • ASCII
          • ASCII()
        • BIN
          • BIN()
        • BIT_LENGTH
          • BIT_LENGTH()
        • CHAR_LENGTH, CHARACTER_LENGTH, LENGTHB, LENGTH
          • CHAR_LENGTH()
          • CHARACTER_LENGTH()
          • LENGTHB()
          • LENGTH()
        • CHR
          • CHR()
        • CONCAT
          • CONCAT()
        • CONCAT_WS
          • CONCAT_WS()
        • ELT
          • ELT()
        • FIELD
          • FIELD()
        • FIND_IN_SET
          • FIND_IN_SET()
        • FROM_BASE64
          • FROM_BASE64()
        • INSERT
          • INSERT()
        • INSTR
          • INSTR()
        • LCASE, LOWER
          • LCASE()
          • LOWER()
        • LEFT
          • LEFT()
        • LOCATE
          • LOCATE()
        • LPAD
          • LPAD()
        • LTRIM
          • LTRIM()
        • MID
          • MID()
        • OCTET_LENGTH
          • OCTET_LENGTH()
        • POSITION
          • POSITION()
        • REPEAT
          • REPEAT()
        • REPLACE
          • REPLACE()
        • REVERSE
          • REVERSE()
        • RIGHT
          • RIGHT()
        • RPAD
          • RPAD()
        • RTRIM
          • RTRIM()
        • SPACE
          • SPACE()
        • STRCMP
          • STRCMP()
        • SUBSTR
          • SUBSTR()
        • SUBSTRING
          • SUBSTRING()
        • SUBSTRING_INDEX
          • SUBSTRING_INDEX()
        • TO_BASE64
          • TO_BASE64()
        • TRANSLATE
          • TRANSLATE()
        • TRIM
          • TRIM()
        • UCASE, UPPER
          • UCASE()
          • UPPER()
      • 정규 표현식 함수와 연산자
        • 정규 표현식 문법
          • 특수 패턴 문자
          • 수량자
          • 그룹
          • 어서션
          • 구분자
          • 문자 클래스
        • REGEXP, RLIKE
        • REGEXP_COUNT
          • REGEXP_COUNT()
        • REGEXP_INSTR
          • REGEXP_INSTR()
        • REGEXP_LIKE
          • REGEXP_LIKE()
        • REGEXP_REPLACE
          • REGEXP_REPLACE()
        • REGEXP_SUBSTR
          • REGEXP_SUBSTR()
      • 수치 연산 함수
        • ABS
          • ABS()
        • ACOS
          • ACOS()
        • ASIN
          • ASIN()
        • ATAN
          • ATAN()
        • ATAN2
          • ATAN2()
        • CEIL
          • CEIL()
        • CONV
          • CONV()
        • COS
          • COS()
        • COT
          • COT()
        • CRC32
          • CRC32()
        • DEGREES
          • DEGREES()
        • DRANDOM, DRAND
          • DRANDOM()
          • DRAND()
        • EXP
          • EXP()
        • FLOOR
          • FLOOR()
        • HEX
          • HEX()
        • LN
          • LN()
        • LOG
          • LOG()
        • LOG2
          • LOG2()
        • LOG10
          • LOG10()
        • MOD
          • MOD()
        • PI
          • PI()
        • POW, POWER
          • POW()
          • POWER()
        • RADIANS
          • RADIANS()
        • RANDOM, RAND
          • RANDOM()
          • RAND()
        • ROUND
          • ROUND()
        • SIGN
          • SIGN()
        • SIN
          • SIN()
        • SQRT
          • SQRT()
        • TAN
          • TAN()
        • TRUNC, TRUNCATE
          • TRUNC()
          • TRUNCATE()
        • WIDTH_BUCKET
          • WIDTH_BUCKET()
      • 날짜/시간 함수와 연산자
        • ADDDATE, DATE_ADD
          • ADDDATE()
          • DATE_ADD()
        • ADDTIME
          • ADDTIME()
        • ADD_MONTHS
          • ADD_MONTHS()
        • CURDATE, CURRENT_DATE
          • CURDATE()
          • CURRENT_DATE()
        • CURRENT_DATETIME, NOW
          • CURRENT_DATETIME()
          • NOW()
        • CURTIME, CURRENT_TIME
          • CURTIME()
          • CURRENT_TIME()
        • CURRENT_TIMESTAMP, LOCALTIME, LOCALTIMESTAMP
          • CURRENT_TIMESTAMP()
          • LOCALTIME()
          • LOCALTIMESTAMP()
        • DATE
          • DATE()
        • DATEDIFF
          • DATEDIFF()
        • DATE_SUB, SUBDATE
          • DATE_SUB()
          • SUBDATE()
        • DAY, DAYOFMONTH
          • DAY()
          • DAYOFMONTH()
        • DAYOFWEEK
          • DAYOFWEEK()
        • DAYOFYEAR
          • DAYOFYEAR()
        • EXTRACT
          • EXTRACT()
        • FROM_DAYS
          • FROM_DAYS()
        • FROM_TZ
          • FROM_TZ()
        • FROM_UNIXTIME
          • FROM_UNIXTIME()
        • HOUR
          • HOUR()
        • LAST_DAY
          • LAST_DAY()
        • MAKEDATE
          • MAKEDATE()
        • MAKETIME
          • MAKETIME()
        • MINUTE
          • MINUTE()
        • MONTH
          • MONTH()
        • MONTHS_BETWEEN
        • NEW_TIME
          • NEW_TIME()
        • QUARTER
          • QUARTER()
        • ROUND
        • SEC_TO_TIME
          • SEC_TO_TIME()
        • SECOND
          • SECOND()
        • SYS_DATE, SYSDATE
        • SYS_DATETIME, SYSDATETIME
        • SYS_TIME, SYSTIME
        • SYS_TIMESTAMP, SYSTIMESTAMP
        • TIME
          • TIME()
        • TIME_TO_SEC
          • TIME_TO_SEC()
        • TIMEDIFF
          • TIMEDIFF()
        • TIMESTAMP
          • TIMESTAMP()
        • TO_DAYS
          • TO_DAYS()
        • TRUNC
        • TZ_OFFSET
          • TZ_OFFSET()
        • UNIX_TIMESTAMP
          • UNIX_TIMESTAMP()
        • UTC_DATE
          • UTC_DATE()
        • UTC_TIME
          • UTC_TIME()
        • WEEK
          • WEEK()
        • WEEKDAY
          • WEEKDAY()
        • YEAR
          • YEAR()
      • JSON 함수
        • JSON 함수 소개
        • JSON_ARRAY
          • JSON_ARRAY()
        • JSON_OBJECT
          • JSON_OBJECT()
        • JSON_KEYS
          • JSON_KEYS()
        • JSON_DEPTH
          • JSON_DEPTH()
        • JSON_LENGTH
          • JSON_LENGTH()
        • JSON_VALID
          • JSON_VALID()
        • JSON_TYPE
          • JSON_TYPE()
        • JSON_QUOTE
          • JSON_QUOTE()
        • JSON_UNQUOTE
          • JSON_UNQUOTE()
        • JSON_PRETTY
          • JSON_PRETTY()
        • JSON_SEARCH
          • JSON_SEARCH()
        • JSON_EXTRACT
          • JSON_EXTRACT()
        • ->
        • ->>
        • JSON_CONTAINS_PATH
          • JSON_CONTAINS_PATH()
        • JSON_CONTAINS
          • JSON_CONTAINS()
        • JSON_MERGE_PATCH
          • JSON_MERGE_PATCH()
        • JSON_MERGE_PRESERVE
          • JSON_MERGE_PRESERVE()
        • JSON_MERGE
          • JSON_MERGE()
        • JSON_ARRAY_APPEND
          • JSON_ARRAY_APPEND()
        • JSON_ARRAY_INSERT
          • JSON_ARRAY_INSERT()
        • JSON_INSERT
          • JSON_INSERT()
        • JSON_SET
          • JSON_SET()
        • JSON_REPLACE
          • JSON_REPLACE()
        • JSON_REMOVE
          • JSON_REMOVE()
        • JSON_TABLE
      • LOB 함수
        • BIT_TO_BLOB
          • BIT_TO_BLOB()
        • BLOB_FROM_FILE
          • BLOB_FROM_FILE()
        • BLOB_LENGTH
          • BLOB_LENGTH()
        • BLOB_TO_BIT
          • BLOB_TO_BIT()
        • CHAR_TO_BLOB
          • CHAR_TO_BLOB()
        • CHAR_TO_CLOB
          • CHAR_TO_CLOB()
        • CLOB_FROM_FILE
          • CLOB_FROM_FILE()
        • CLOB_LENGTH
          • CLOB_LENGTH()
        • CLOB_TO_CHAR
          • CLOB_TO_CHAR()
      • 데이터 타입 변환 함수와 연산자
        • CAST
          • CAST()
        • DATE_FORMAT
          • DATE_FORMAT()
        • FORMAT
          • FORMAT()
        • STR_TO_DATE
          • STR_TO_DATE()
        • TIME_FORMAT
          • TIME_FORMAT()
        • TO_CHAR(date_time)
          • TO_CHAR()
        • TO_CHAR(number)
        • TO_DATE
          • TO_DATE()
        • TO_DATETIME
          • TO_DATETIME()
        • TO_DATETIME_TZ
          • TO_DATETIME_TZ()
        • TO_NUMBER
          • TO_NUMBER()
        • TO_TIME
          • TO_TIME()
        • TO_TIMESTAMP
          • TO_TIMESTAMP()
        • TO_TIMESTAMP_TZ
          • TO_TIMESTAMP_TZ()
      • 집계/분석 함수
        • 개요
        • 집계 함수와 분석 함수 비교
        • OVER 함수 내에 “ORDER BY” 절을 명시해야 하는 분석 함수
        • AVG
          • AVG()
        • COUNT
          • COUNT()
        • CUME_DIST
          • CUME_DIST()
        • DENSE_RANK
          • DENSE_RANK()
        • FIRST_VALUE
          • FIRST_VALUE()
        • GROUP_CONCAT
          • GROUP_CONCAT()
        • LAG
          • LAG()
        • LAST_VALUE
          • LAST_VALUE()
        • LEAD
          • LEAD()
        • MAX
          • MAX()
        • MEDIAN
          • MEDIAN()
        • MIN
          • MIN()
        • NTH_VALUE
          • NTH_VALUE()
        • NTILE
          • NTILE()
        • PERCENT_RANK
          • PERCENT_RANK()
        • PERCENTILE_CONT
        • PERCENTILE_DISC
        • RANK
          • RANK()
        • ROW_NUMBER
          • ROW_NUMBER()
        • STDDEV, STDDEV_POP
          • STDDEV()
        • STDDEV_SAMP
          • STDDEV_SAMP()
        • SUM
          • SUM()
        • VARIANCE, VAR_POP
          • VARIANCE()
          • VAR_POP()
        • VAR_SAMP
          • VAR_SAMP()
        • JSON_ARRAYAGG
          • JSON_ARRAYAGG()
        • JSON_OBJECTAGG
          • JSON_OBJECTYAGG()
      • 클릭 카운터 함수
        • INCR, DECR
          • INCR()
          • DECR()
      • ROWNUM 함수
        • ROWNUM, INST_NUM
          • INST_NUM()
        • ORDERBY_NUM
          • ORDERBY_NUM()
        • GROUPBY_NUM
          • GROUPBY_NUM()
      • 정보 함수
        • CHARSET
          • CHARSET()
        • COERCIBILITY
          • COERCIBILITY()
        • COLLATION
          • COLLATION()
        • CURRENT_USER, USER
        • DATABASE, SCHEMA
          • DATABASE()
          • SCHEMA()
        • DBTIMEZONE
          • DBTIMEZONE()
        • DEFAULT
          • DEFAULT()
        • DISK_SIZE
          • DISK_SIZE()
        • INDEX_CARDINALITY
          • INDEX_CARDINALITY()
        • INET_ATON
          • INET_ATON()
        • INET_NTOA
          • INET_NTOA()
        • LAST_INSERT_ID
          • LAST_INSERT_ID()
        • LIST_DBS
          • LIST_DBS()
        • ROW_COUNT
          • ROW_COUNT()
        • SESSIONTIMEZONE
          • SESSIONTIMEZONE()
        • USER, SYSTEM_USER
          • USER()
          • SYSTEM_USER()
        • VERSION
          • VERSION()
      • 암호화 함수
        • MD5
          • MD5()
        • SHA1
          • SHA1()
        • SHA2
          • SHA2()
      • 비교 연산식
        • 단순 비교 조건식
        • ANY/SOME/ALL 수량어와 그룹 조건식
        • BETWEEN
        • EXISTS
        • IN
        • IS NULL
        • LIKE
        • CASE
      • 비교 함수
        • COALESCE
          • COALESCE()
        • DECODE
          • DECODE()
        • GREATEST
          • GREATEST()
        • IF
          • IF()
        • IFNULL, NVL
          • IFNULL()
          • NVL()
        • ISNULL
          • ISNULL()
        • LEAST
          • LEAST()
        • NULLIF
          • NULLIF()
        • NVL2
          • NVL2()
      • 기타 함수
        • SLEEP
          • SLEEP()
        • SYS_GUID
          • SYS_GUID()
    • 데이터 조작문
      • SELECT
        • FROM 절
          • 유도 테이블
          • 부질의 유도 테이블
          • 원격 테이블
          • DBLINK
        • WHERE 절
        • GROUP BY … HAVING 절
        • ORDER BY 절
        • LIMIT 절
        • 조인 질의
          • 내부 조인
          • 외부 조인
          • 교차 조인
          • 자연 조인
        • 부질의
          • 단일 행 부질의
          • 다중 행 부질의
        • VALUES
        • FOR UPDATE
      • 계층적 질의
        • START WITH 절
        • CONNECT BY 절
        • 계층 질의 실행
          • 조인 테이블에 대한 계층 질의
          • 계층 질의 결과
          • 계층 질의문에서의 데이터 정렬
        • 계층 질의 의사 칼럼
          • LEVEL
          • CONNECT_BY_ISLEAF
          • CONNECT_BY_ISCYCLE
        • 계층 질의 연산자
          • CONNECT_BY_ROOT
          • PRIOR
        • 계층 질의 함수
          • SYS_CONNECT_BY_PATH
        • 계층 질의문 예
        • 계층 질의문의 성능
          • 단일 테이블 계층 질의
          • 조인 테이블 계층 질의
      • INSERT
        • INSERT … SELECT 문
        • INSERT INTO <remote-table-spec>… SELECT 문
        • ON DUPLICATE KEY UPDATE 절
      • UPDATE
      • REPLACE
      • DELETE
        • 주의 사항
      • MERGE
      • TRUNCATE
      • PREPARED STATEMENT
        • PREPARE 문
        • EXECUTE 문
        • DEALLOCATE PREPARE 문, DROP PREPARE 문
      • DO
      • CTE
        • CTE 컬럼명
        • 재귀절
        • DML과 CREATE에서 CTE의 사용
      • CALL
    • 질의 최적화
      • 조인 방식
        • 중첩 반복(Nested Loop) 조인
        • 정렬 병합(Sort-Merge) 조인
        • 해시(Hash) 조인
      • 통계 정보 갱신
      • 통계 정보 확인
      • 질의 실행 계획 보기
      • 최적화기 원리
        • 선택도
        • 예측되는 행수
        • 순차 스캔 비용
        • 인덱스 스캔 비용
        • 조인 질의 비용
      • 질의 프로파일링
      • SQL 힌트
      • 인덱스 힌트
        • USING INDEX
        • USE, FORCE, IGNORE INDEX
        • 인덱스 힌트 사용 예
      • 특별한 인덱스
        • 필터링된 인덱스
        • 함수 기반 인덱스
      • 인덱스를 활용한 최적화
        • 커버링 인덱스
        • ORDER BY 절 최적화
        • 내림차순 인덱스 스캔
        • GROUP BY 절 최적화
        • 다중 키 범위 최적화
        • Index Skip Scan
        • Loose Index Scan
        • 인-메모리 정렬
        • SORT-LIMIT 최적화
      • 재작성을 활용한 최적화
        • 조인 변환 최적화
          • OUTER JOIN을 INNER JOIN으로 변환
          • INNER JOIN 제거
          • LEFT OUTER JOIN 제거
        • View Merging 최적화
        • Predicate Push
        • 부질의 중첩 제거
        • 조건절 이행
      • 쿼리 캐시
        • 서브 쿼리 캐시 (correlated)
    • 분할
      • 분할
        • 분할 키
        • 영역 분할
        • 해시 분할
        • 리스트 분할
          • 분할 커멘트
        • 분할 프루닝
        • 분할 관리
          • 분할 테이블을 일반 테이블로 변경
          • 분할 재구성
          • 분할 추가
          • 분할 제거
          • 해시 분할 재구성
          • 분할 승격
        • 분할 테이블의 인덱스
        • 분할에 관한 노트
          • 분할 테이블에 관한 통계
          • 분할된 테이블에 대한 제약들
          • 분할 키와 문자셋, 콜레이션
    • 다국어 지원
      • 다국어 개요
        • 문자 데이터
        • 관련 용어
        • 로캘 속성
        • 콜레이션 속성
        • 콜레이션 명명 규칙
          • CUBRID 콜레이션
        • 로캘 저장 위치
      • 로캘 설정
        • 1단계: 로캘 선택
        • 2단계: 로캘 컴파일하기
        • 3단계: 특정 로캘을 사용하기 위해 CUBRID 설정하기
          • 내장된 로캘과 라이브러리 로캘
          • ISO-8859-1 문자셋에서 한국어와 터키어의 월, 요일
        • 4단계: 선택한 로캘 설정으로 데이터베이스 생성하기
        • 5단계(선택 사항): 로캘 파일의 수동 검증
        • 6단계: CUBRID 관련 프로세스 시작
        • 데이터베이스 콜레이션을 시스템 콜레이션에 동기화
      • 콜레이션 설정
        • 칼럼의 문자셋과 콜레이션
          • 문자셋
          • 문자열 검사
          • 문자셋 변환
          • 콜레이션
          • CHARSET과 COLLATE 수정자
          • 콜레이션이 서로 다를 때 결정 방식
          • ENUM 타입 칼럼의 문자셋과 콜레이션
        • 테이블의 문자셋과 콜레이션
        • 문자열 리터럴의 문자셋과 콜레이션
          • SET NAMES 문
          • 문자셋 소개자
        • 표현식의 문자셋과 콜레이션
        • 시스템 데이터의 문자셋과 콜레이션
        • DB 생성 시 지정한 로캘의 영향
          • 식별자의 대소문자 구분
        • 문자열 리터럴의 입출력
          • CSQL을 위한 텍스트 변환
          • 유니코드 정규화
        • 콜레이션의 축약과 확장
          • 축약
          • 확장
        • 문자셋과 콜레이션을 필요로 하는 연산
          • 문자셋
          • 콜레이션
          • 문자셋 변환
        • 콜레이션 설정으로 인한 영향
          • LIKE 조건 최적화
          • 커버링 인덱스
          • 각 콜레이션에 대한 기능 요약
        • 콜레이션 정보 보기
      • JDBC에서 i18n 문자 사용
      • 타임존 설정
        • 타임존 라이브러리 컴파일
          • 윈도우즈
          • 리눅스
          • 타임존 라이브러리 및 데이터베이스 호환성
          • JDBC에서 타임존 데이터 타입 사용
      • 다국어 설정을 위한 고려 사항
        • 로캘
        • CHAR와 VARCHAR
        • 문자셋 선택
        • 콜레이션 선택
        • 정규화
        • CAST vs COLLATE
      • 주의 사항
      • 로캘과 콜레이션 추가 안내서
        • LDML 캘린더 정보
        • LDML 숫자 정보
        • LDML 알파벳
        • LDML 콘솔 변환
        • LDML 콜레이션
    • 트랜잭션과 잠금
      • 데이터베이스 트랜잭션
        • 트랜잭션 커밋
        • 트랜잭션 롤백
        • 세이브포인트와 부분 롤백
      • 커서 유지
      • 데이터베이스 동시성
      • 다중 버전 동시성 제어(Multiversion Concurrency Control)
        • 버전 관리, 가시성 및 스냅샷
        • VACUUM
          • VACUUM 병렬 수행
          • VACUUM 데이터
          • VACUUM 작업
          • 삭제된 파일 추적
      • 잠금 프로토콜
        • 잠금의 단위
        • 잠금 모드의 종류와 호환성
          • 잠금 사용 예제
        • unique 제약 조건을 보호하기 위한 잠금
        • 트랜잭션 교착 상태(deadlock)
        • 트랜잭션 잠금 타임아웃
      • 트랜잭션 격리 수준
        • 트랜잭션 격리 수준 설정
        • 트랜잭션 격리 수준 값 확인
        • READ COMMITTED 격리 수준
          • READ COMMITTED UPDATE RE-EVALUATION
        • REPEATABLE READ 격리 수준
        • SERIALIZABLE 격리 수준
        • CUBRID에서 더티 레코드를 다루는 방법
      • 트랜잭션 종료와 복구
        • 데이터베이스 재구동
    • 트리거
      • CREATE TRIGGER
        • 트리거 정의를 위한 가이드라인
        • 트리거 정의 구문
        • 이벤트 시점
        • 트리거 타입
        • 트리거 이벤트 타입
        • 트리거 이벤트 대상
        • 이벤트 타입과 대상 조합
        • 트리거 조건 영역
        • 상관명(correlation name)
        • 트리거 실행 영역
        • 트리거의 커멘트
      • ALTER TRIGGER
        • 트리거 커멘트
      • DROP TRIGGER
      • RENAME TRIGGER
      • 지연된 트리거
        • 지연된 영역 실행
        • 지연된 영역 취소
        • 트리거 권한 부여
      • REPLACE와 INSERT … ON DUPLICATE KEY UPDATE에서의 트리거
      • 트리거 디버깅
        • 트리거 실행 로그 보기
        • 중첩된 트리거 제한
      • 트리거를 이용한 응용
    • CUBRID DBLink
      • CUBRID DBLink 소개
      • CUBRID DBLink 구성도
        • 동일기종 간의 DBLink 구성도
        • 이기종 간의 DBLink 구성도
      • DBLink를 위한 게이트웨이
        • cub_cas_cgw
        • cub_gateway
        • 공유 메모리
        • 게이트웨이 구동
        • 게이트웨이 종료
        • 게이트웨이 재시작
        • 게이트웨이 상태 확인
        • CUBRID 서비스 시작시 게이트웨이 함께 시작
      • CUBRID DBLINK 설정
        • 동일기종 DBLink 설정
        • 이기종 DBLink 설정
        • 게이트웨이 설정 파일
        • 게이트웨이 파라메터
        • unixODBC 설치
        • ODBC Driver 정보 설정
      • DBLink를 위한 Oracle 설정
        • Oracle 환경설정
      • DBLink를 위한 MySQL 설정
        • MySQL 환경설정
      • DBLink를 위한 MariaDB 설정
        • MariaDB 환경설정
      • Cubrid DBLink 사용 방법
      • 유의 사항
      • 제약 사항
        • 공통 제약 사항
        • CUBRID 제약 사항
    • 클래스 상속
      • 클래스 속성과 클래스 메서드
      • 상속을 위한 순서 규칙
      • INHERIT 절
      • ADD SUPERCLASS 절
      • DROP SUPERCLASS 절
      • 클래스 충돌 해결
        • 해결 지시자
        • 수퍼클래스 충돌
          • 수퍼클래스 추가
          • 수퍼클래스 삭제
          • 호환되는 도메인
        • 서브클래스 충돌
          • 속성과 메서드의 추가
          • 속성과 메서드의 삭제
        • 스키마 불변성
          • 클래스 계층 불변성
          • 이름 불변성
          • 상속 불변성
          • 일치 불변성
        • 스키마 변경 규칙
          • 충돌 해결 규칙
          • 도메인 변경 규칙
          • 클래스 계층 규칙
    • 데이터베이스 관리
      • 사용자 관리
        • 데이터베이스 사용자
        • CREATE USER
          • 사용자의 커멘트
        • ALTER USER
          • 사용자의 커멘트 변경
        • DROP USER
        • GRANT
        • REVOKE
        • ALTER … OWNER
        • 사용자 권한 관리 메서드
      • SET
        • 시스템 파라미터
        • 사용자 변수
      • KILL
      • SHOW
        • DESC, DESCRIBE
        • EXPLAIN
        • SHOW TABLES
        • SHOW COLUMNS
        • SHOW INDEX
        • SHOW COLLATION
        • SHOW TIMEZONES
        • SHOW GRANTS
        • SHOW CREATE TABLE
        • SHOW CREATE VIEW
        • SHOW ACCESS STATUS
        • SHOW EXEC STATISTICS
        • 진단(Diagnostics)
          • SHOW VOLUME HEADER
          • SHOW LOG HEADER
          • SHOW ARCHIVE LOG HEADER
          • SHOW HEAP HEADER
          • SHOW HEAP CAPACITY
          • SHOW SLOTTED PAGE HEADER
          • SHOW SLOTTED PAGE SLOTS
          • SHOW INDEX HEADER
          • SHOW INDEX CAPACITY
          • SHOW CRITICAL SECTIONS
          • SHOW TRANSACTION TABLES
          • SHOW THREADS
          • SHOW JOB QUEUES
          • SHOW PAGE BUFFER STATUS
    • 사용자 스키마
    • 시스템 카탈로그
      • 시스템 카탈로그 클래스
        • _db_class
        • _db_attribute
        • _db_domain
        • _db_charset
        • _db_collation
        • _db_method
        • _db_meth_sig
        • _db_meth_arg
        • _db_meth_file
        • _db_query_spec
        • _db_index
        • _db_index_key
        • _db_auth
        • _db_data_type
        • _db_partition
        • _db_stored_procedure
        • _db_stored_procedure_args
        • _db_stored_procedure_code
        • _db_server
        • _db_synonym
        • db_user
        • db_authorization
        • db_serial
        • db_trigger
        • db_ha_apply_info
        • dual
      • 시스템 카탈로그 가상 클래스
        • DB_CLASS
        • DB_DIRECT_SUPER_CLASS
        • DB_VCLASS
        • DB_ATTRIBUTE
        • DB_ATTR_SETDOMAIN_ELM
        • DB_CHARSET
        • DB_COLLATION
        • DB_METHOD
        • DB_METH_ARG
        • DB_METH_ARG_SETDOMAIN_ELM
        • DB_METH_FILE
        • DB_INDEX
        • DB_INDEX_KEY
        • DB_AUTH
        • DB_TRIG
        • DB_PARTITION
        • DB_STORED_PROCEDURE
        • DB_STORED_PROCEDURE_ARGS
        • DB_SERVER
        • DB_SYNONYM
      • 카탈로그 클래스/가상 클래스 사용 권한
      • 카탈로그에 대한 질의
  • CUBRID 절차적 언어
    • 저장 프로시저의 생성
      • 스키마와 프로시저 이름 지정
      • 저장 프로시저의 인자 지정
      • 지원하는 인자와 결과 데이터 타입
      • 인자의 모드 지정
      • 기본값 인자 지정
      • 함수 오버로딩 미지원
      • 객체 의존성
      • 문자열 코드셋 인코딩 고려사항
    • 저장 프로시저의 호출
      • CALL 문
      • SQL 문에서 호출
      • 프로시저 호출 시 중첩 호출 제한사항
    • 저장 프로시저의 권한
      • 프로시저 호출 권한 부여
      • 소유자 권한과 호출자 권한의 차이
    • 트랜잭션 커밋과 롤백 지원
      • 조건 및 예외 처리와 트랜잭션 제어의 장점
      • 예제: 조건 및 예외 처리와 트랜잭션 제어
      • 주의사항
    • 성능 최적화
      • SQL 질의 최적화
      • 질의에서의 저장 함수 호출 최적화
      • 내장 함수 사용
      • 결정적 함수 사용
    • 시스템 패키지
      • DBMS_OUTPUT
        • DBMS_OUTPUT.ENABLE
          • DBMS_OUTPUT.ENABLE()
        • DBMS_OUTPUT.DISABLE
          • DBMS_OUTPUT.DISABLE()
        • DBMS_OUTPUT.PUT
          • DBMS_OUTPUT.PUT()
        • DBMS_OUTPUT.PUT_LINE
          • DBMS_OUTPUT.PUT_LINE()
        • DBMS_OUTPUT.NEW_LINE
          • DBMS_OUTPUT.NEW_LINE()
        • DBMS_OUTPUT.GET_LINE
          • DBMS_OUTPUT.GET_LINE()
        • DBMS_OUTPUT.GET_LINES
          • DBMS_OUTPUT.GET_LINES()
        • 활용 예시
    • PL/CSQL
      • 개요
        • 저장 프로시저/함수 생성
        • Static SQL
        • Dynamic SQL
        • 작성 규칙
        • 데이터 타입
        • %TYPE
        • %ROWTYPE
        • 정밀도와 스케일 지정 예외
        • 연산자와 함수
        • Exception
        • 시스템 설정 적용
      • 선언문
        • 변수 선언
        • 상수 선언
        • Exception 선언
        • 커서 선언
        • 내부 프로시저/함수 선언
      • 실행문
        • BLOCK
        • Static SQL
        • 커서 조작문
        • RAISE_APPLICATION_ERROR
        • EXECUTE IMMEDIATE
        • 대입문
        • CONTINUE, EXIT
        • NULL
        • RAISE
        • RETURN
        • 프로시저 호출문
        • IF
        • LOOP
        • CASE 실행문
      • 표현식
        • 리터럴
        • 식별자
        • Static SQL 결과 크기
        • 커서 속성
        • 이항 연산, 단항 연산, 괄호
        • 레코드 필드 참조
        • 함수 호출
        • CASE 표현식
        • SQLCODE, SQLERRM
    • 자바 저장 프로시저
      • 자바 저장 함수/프로시저 작성과 사용을 위한 확인
      • 자바 저장 함수/프로시저 작성과 로드
        • Java 소스 작성
        • Java 소스 컴파일
        • Java 클래스 로드
      • 저장 함수/프로시저 등록
        • Java Call Specification
      • Java 저장 함수/프로시저 호출
        • Java 저장 프로시저 예시
      • 서버 내부 JDBC 드라이버 사용
        • Connection 생성
        • 질의문 수행
          • 질의문 수행 예시
        • OUT, IN/OUT 정의
        • Set 타입의 IN/OUT 정의
        • Java 저장 함수/프로시저에서 OID 사용
        • 질의 결과셋 반환
        • 연결 중인 클라이언트 정보 획득
      • 다른 데이터베이스 연결
      • Java Native Interface (JNI) 지원
      • loadjava 유틸리티
        • Java 패키지 이름이 포함된 클래스 로드 예제
      • 주의 사항
        • 리턴 값 및 IN/OUT 파라미터에 대한 타입 자릿수 제한사항
      • 부록
        • 데이터 타입 매핑
        • JDBC API 지원표
          • java.sql.Connection
          • java.sql.Statement
          • java.sql.PreparedStatement
          • java.sql.CallableStatement
          • java.sql.ResultSet
          • java.sql.ResultSetMetaData
    • 메서드
      • 메서드 타입
      • 메서드 호출
  • CUBRID 운영
    • CUBRID 프로세스 제어
      • CUBRID 서비스 제어
      • 데이터베이스 서버 제어
      • 브로커 제어
      • 게이트웨이 제어
      • CUBRID 매니저 서버 제어
      • CUBRID HA 제어
      • CUBRID 프로시저 언어 (PL) 서버 제어
    • CUBRID 서비스
      • 서비스 등록
      • 서비스 구동
      • 서비스 종료
      • 서비스 재구동
      • 서비스 상태 관리
      • cubrid 유틸리티 로깅
    • 데이터베이스 서버
      • 데이터베이스 서버 구동
      • 데이터베이스 서버 종료
      • 데이터베이스 서버 재구동
      • 데이터베이스 상태 확인
      • 데이터베이스 서버 접속 제한
      • 데이터베이스 서버 로그
        • 에러 로그
        • 이벤트 로그
      • 데이터베이스 서버 에러
    • 브로커
      • 브로커 구동
      • 브로커 종료
      • 브로커 재시작
      • 브로커 상태 확인
      • 브로커 서버 접속 제한
      • 패킷 암호화
      • 특정 브로커 관리
      • 브로커 파라미터의 동적 변경
      • 브로커 설정 정보 확인
      • CUBRID SHARD ID 확인
      • 브로커와 DB 간 연결 테스트
      • 브로커 로그
        • 접속 로그 확인
        • 에러 로그 확인
        • SQL 로그 관리
          • broker_log_top
          • cubrid_replay
      • CAS 에러
    • 게이트웨이
      • 게이트웨이 구동
      • 게이트웨이 종료
      • 게이트웨이 재시작
      • 게이트웨이 상태 확인
    • CUBRID 매니저 서버
      • CUBRID 매니저 서버 구동
      • CUBRID 매니저 서버 종료
      • CUBRID 매니저 서버 로그
      • CUBRID 매니저 서버 환경 설정
      • CUBRID 매니저 사용자 관리 콘솔
    • CUBRID 프로시저 언어 서버
      • CUBRID 프로시저 언어 서버 구동
      • CUBRID 프로시저 언어 서버 재시작
      • CUBRID 프로시저 언어 서버 상태 확인
      • 프로시저 언어 서버 설정
        • 프로시저 언어 환경: 번들 JDK 사용
        • 프로시저 언어 서버 시스템 파라미터
      • CUBRID 프로시저 언어 서버 로그
        • 에러 로그
        • 예외 로그
      • CUBRID 프로시저 언어 에러
    • 데이터베이스 관리
      • 데이터베이스 사용자
      • databases.txt 파일
      • 데이터베이스 볼륨
    • cubrid 유틸리티
      • cubrid 유틸리티 로깅
      • createdb
      • addvoldb
      • deletedb
      • renamedb
      • alterdbhost
      • copydb
      • installdb
      • backupdb
        • 백업 정책 및 방식
        • 백업 파일 관리
        • 보관 로그 관리
      • restoredb
        • 복구 정책과 절차
        • 다른 서버로의 데이터베이스 복구
      • unloaddb
      • loaddb
        • 가져오기용 파일 작성 방법
          • 주석
          • 명령 라인
          • 데이터 라인
        • 데이터베이스 마이그레이션
      • spacedb
      • compactdb
      • optimizedb
      • plandump
      • statdump
      • lockdb
        • 출력 내용
      • tranlist
      • killtran
      • checkdb
      • diagdb
      • paramdump
      • tde
      • vacuumdb
      • flashback
      • memmon
      • HA 명령어
      • 로캘 명령어
      • 타임존 명령어
    • 시스템 설정
      • 데이터베이스 서버 설정
        • 데이터베이스 서버 설정이 미치는 범위
        • 데이터베이스 서버 설정값 변경
          • 환경 설정 파일 편집
          • SQL 문을 사용
          • CSQL 인터프리터의 세션 명령어 사용
        • cubrid.conf 설정 파일과 기본 제공 파라미터
          • 데이터베이스 서버 시스템 파라미터
          • 파라미터의 섹션별 분류
          • 기본 제공 파라미터
        • 접속 관련 파라미터
        • 메모리 관련 파라미터
        • 디스크 관련 파라미터
        • 오류 메시지 관련 파라미터
        • 동시성/잠금 파라미터
        • 로깅 관련 파라미터
        • 트랜잭션 처리 관련 파라미터
        • 구문/타입 관련 파라미터
        • 스레드 관련 파라미터
        • 타임존 파라미터
        • 질의 계획 캐시 관련 파라미터
        • 질의 캐쉬 관련 파라미터
        • 유틸리티 관련 파라미터
        • HA 관련 파라미터
        • 기타 파라미터
      • 브로커 설정
        • cubrid_broker.conf 설정 파일과 기본 제공 파라미터
          • 브로커 시스템 파라미터
          • 기본 제공 파라미터
          • 브로커 설정 파일 관련 환경 변수
        • 공통 적용 파라미터
          • 접속
          • 로그
          • 브로커 서버(cub_broker)
        • 브로커별 파라미터
          • 접속
          • 브로커 응용 서버(CAS)
          • 트랜잭션 및 질의
          • 로그
          • 샤드
          • 기타
      • HA 설정
      • SHARD 설정
    • SystemTap
      • 개요
      • SystemTap 설치하기
        • 설치 확인
        • 버전
      • 관련 용어
        • 마커(Marker)
        • 프로브(Probe)
        • 비동기 이벤트
      • CUBRID에서 SystemTap 사용하기
        • CUBRID 소스 빌드
        • SystemTap 스크립트 실행
        • 결과 출력
      • CUBRID 마커
        • 연결 마커
          • conn_start()
          • conn_end()
        • 질의 마커
          • query_exec_start()
          • query_exec_end()
        • 객체 연산 마커
          • obj_insert_start()
          • obj_insert_end()
          • obj_update_start()
          • obj_update_end()
          • obj_deleted_start()
          • obj_delete_end()
        • 인덱스 연산 마커
          • idx_insert_start()
          • idx_insert_end()
          • idx_update_start()
          • idx_update_end()
          • idx_delete_start()
          • idx_delete_end()
        • 잠금(locking) 마커
          • lock_acquire_start()
          • lock_acquire_end()
          • lock_release_start()
          • lock_release_end()
        • 트랜잭션 마커
          • tran_commit()
          • tran_abort()
          • tran_start()
          • tran_deadlock()
        • I/O 마커
          • pgbuf_hit()
          • pgbuf_miss()
          • io_write_start()
          • io_write_end()
          • io_read_start()
          • io_read_end()
        • 기타 마커
          • sort_start()
          • sort_end()
    • cubrid 스크립트
      • unloaddb.sh 스크립트
      • restore_to_newdb.sh 스크립트
    • 트러블슈팅
      • SQL 로그 확인
        • CAS의 SQL 로그
        • CAS 정보 출력 함수
        • 응용 프로그램 로그
        • 슬로우 쿼리
      • 서버 에러 로그
        • 오버플로우 키 또는 오버플로우 페이지 감지
        • 로그 회복 시간 감지
        • 교착 상태 감지
      • HA 상태 변경 감지
        • HA split-brain 감지
        • Fail-over, Fail-back 감지
      • HA 구동 실패
        • 대표적인 복구 불가능 장애
        • HA 구동 실패 시 대처 방법
    • DDL Audit Log
      • 개요
      • DDL Audit 로그 파일 이름 규칙
      • CAS의 DDL Audit 로그 파일 형식
      • CSQL의 DDL Audit 로그 파일 형식
      • LOADDB의 DDL Audit 로그 형식
  • CUBRID HA
    • CUBRID HA 기본 개념
      • 노드와 그룹
      • 프로세스
      • 서버
      • heartbeat 메시지
      • failover와 failback
      • 브로커 모드
    • CUBRID HA 기능
      • 서버 이중화
      • 브로커 이중화
      • 로그 다중화
    • 빠른 시작
      • 준비
      • 데이터베이스 생성 및 서버 설정
      • CUBRID HA 시작 및 확인
      • 브로커 설정, 시작 및 확인
    • 환경 설정
      • cubrid.conf
        • HA 여부
        • 로깅
        • 접속
      • cubrid_ha.conf
        • 노드
        • 접속
        • 복제
        • SQL 로깅
      • cubrid_broker.conf
        • 접속 대상
        • 접속 순서
        • 접속 제한
        • 재접속
      • databases.txt
      • JDBC 설정
      • CCI 설정
      • PHP 설정
    • 브로커와 DB 연결
      • 접속 절차
      • 파라미터 설정에 따른 동작의 예
    • 구동 및 모니터링
      • cubrid heartbeat 유틸리티
        • start
        • stop
        • copylogdb
        • applylogdb
        • reload
        • replication(또는 repl) start
        • replication(또는 repl) stop
        • status
      • cubrid service에 HA 등록
      • applyinfo
      • cubrid changemode
      • CUBRID 매니저 HA 모니터링
    • HA 구성 형태
      • HA 기본 구성
      • 다중 슬레이브 노드 구성
      • 부하 분산 구성
      • 다중 스탠바이 서버 구성
    • HA 제약 사항
    • 운영 시나리오
      • 읽기 쓰기 서비스 중 운영 시나리오
      • 읽기 서비스 중 운영 시나리오
      • 서비스 정지 후 운영 시나리오
      • 레플리카 복제 지연 설정 시나리오
    • 복제 구축
      • restoreslave
      • 복제 구축 시나리오 예제
      • 서비스 정지 후 슬레이브 추가
      • 서비스 운영 중 슬레이브 하나 더 추가
      • 서비스 운영 중 슬레이브 제거
      • 서비스 운영 중 레플리카 추가
      • 서비스 운영 중 슬레이브 재구축
    • 복제 불일치 감지
      • 복제 불일치 감지 방법
      • checksumdb
      • HA 오류 메시지
        • CAS 프로세스(cub_cas)
        • 복제 로그 복사 프로세스(copylogdb)
        • 복제 로그 반영 프로세스(applylogdb)
    • Fail-over 원인 분석
      • 마스터 노드의 고립
      • 마스터 노드의 기능 상실
      • 복수의 마스터 노드 탐지 (split-brain)
    • 복제 재구축 스크립트
      • ha_make_slavedb.sh 스크립트
  • CUBRID 보안
    • 패킷 암호화
      • 패킷 암호화 필요성
      • 패킷 암호화 방법
      • 패킷 암호화를 위한 서버 설정
      • 지원하는 드라이버
    • 서버 접근제어
    • 권한 관리
    • TDE (Transparent Data Encryption)
      • CUBRID TDE 개념
      • 키 관리
        • 2 계층 키 관리
        • 파일 기반의 마스터 키 관리
      • 암호화 대상
        • 영구 데이터 암호화
        • 임시 데이터 암호화
        • 로그 데이터 암호화
        • DWB 암호화
        • 백업 볼륨 암호화
      • 암호화 알고리즘
      • 암호화 테이블 확인
        • SHOW CREATE TABLE 구문 이용
        • db_class 시스템 카탈로그에 질의
        • cubrid diagdb 유틸리티를 통한 확인
      • HA 환경에서의 TDE
      • TDE 기능을 사용할 수 없을 때의 동작
      • 제약 사항
  • CUBRID SHARD
    • Database Sharding
    • CUBRID SHARD 기본 용어
    • CUBRID SHARD 주요 기능
      • 미들웨어 구조
      • shard SQL 힌트를 이용한 shard DB 선택
      • 트랜잭션 지원
    • 빠른 시작
      • 구성 예
      • shard 설정 변경
      • 서비스 시작 및 모니터링
      • 응용 예제 프로그램 작성
    • 구성 및 설정
      • 구성
      • 설정
        • cubrid_broker.conf
        • shard 연결 파일(SHARD_CONNECTION_FILE)
        • shard key 파일(SHARD_KEY_FILE)
        • 사용자 정의 해시 함수
    • 구동 및 모니터링
    • 설정 테스트
    • CUBRID SHARD 로그
      • SHARD PROXY 로그
      • SHARD CAS 로그
    • 제약 사항
  • API 레퍼런스
    • JDBC 드라이버
      • JDBC 개요
      • JDBC 설치 및 설정
      • JDBC 프로그래밍
        • 연결 설정
        • DataSource 객체로 연결
        • SQL LOG 확인
        • 외래 키 정보 확인
        • OID와 컬렉션 사용
          • OID 사용
          • 컬렉션 사용
        • 자동 증가 특성의 칼럼 값 검색
        • BLOB/CLOB 사용
        • setBoolean
        • JDBC 에러 코드와 에러 메시지
      • JDBC 예제 프로그램
      • JDBC API
    • CCI 드라이버
      • CCI 개요
      • CCI 프로그래밍
        • CCI 응용 프로그램 작성
        • 라이브러리 적용
        • BLOB/CLOB 사용
        • CCI 에러 코드와 에러 메시지
      • CCI 예제 프로그램
      • CCI API 레퍼런스
        • cci_bind_param
        • cci_bind_param_array
        • cci_bind_param_array_size
        • cci_bind_param_ex
        • cci_blob_free
        • cci_blob_new
        • cci_blob_read
        • cci_blob_size
        • cci_blob_write
        • cci_cancel
        • cci_clob_free
        • cci_clob_new
        • cci_clob_read
        • cci_clob_size
        • cci_clob_write
        • cci_close_query_result
        • cci_close_req_handle
        • cci_col_get
        • cci_col_seq_drop
        • cci_col_seq_insert
        • cci_col_seq_put
        • cci_col_set_add
        • cci_col_set_drop
        • cci_col_size
        • cci_connect
        • cci_connect_ex
        • cci_connect_with_url
        • cci_connect_with_url_ex
        • cci_cursor
        • cci_cursor_update
        • cci_datasource_borrow
        • cci_datasource_change_property
        • cci_datasource_create
        • cci_datasource_destroy
        • cci_datasource_release
        • cci_disconnect
        • cci_end_tran
        • cci_escape_string
        • cci_execute
        • cci_execute_array
        • cci_execute_batch
        • cci_execute_result
        • cci_fetch
        • cci_fetch_buffer_clear
        • cci_fetch_sensitive
        • cci_fetch_size
        • cci_get_autocommit
        • cci_get_bind_num
        • cci_get_cas_info
        • cci_get_class_num_objs
        • CCI_GET_COLLECTION_DOMAIN
        • cci_get_cur_oid
        • cci_get_data
        • cci_get_db_parameter
        • cci_get_db_version
        • cci_get_err_msg
        • cci_get_error_msg
        • cci_get_holdability
        • cci_get_last_insert_id
        • cci_get_login_timeout
        • cci_get_query_plan
        • cci_query_info_free
        • cci_get_query_timeout
        • cci_get_result_info
        • CCI_GET_RESULT_INFO_ATTR_NAME
        • CCI_GET_RESULT_INFO_CLASS_NAME
        • CCI_GET_RESULT_INFO_IS_NON_NULL
        • CCI_GET_RESULT_INFO_NAME
        • CCI_GET_RESULT_INFO_PRECISION
        • CCI_GET_RESULT_INFO_SCALE
        • CCI_GET_RESULT_INFO_TYPE
        • CCI_IS_SET_TYPE
        • CCI_IS_MULTISET_TYPE
        • CCI_IS_SEQUENCE_TYPE
        • CCI_IS_COLLECTION_TYPE
        • cci_get_version
        • cci_init
        • cci_is_holdable
        • cci_is_updatable
        • cci_next_result
        • cci_oid
        • cci_oid_get
        • cci_oid_get_class_name
        • cci_oid_put
        • cci_oid_put2
        • cci_prepare
        • cci_prepare_and_execute
        • cci_property_create
        • cci_property_destroy
        • cci_property_get
        • cci_property_set
        • cci_query_result_free
        • CCI_QUERY_RESULT_ERR_NO
        • CCI_QUERY_RESULT_ERR_MSG
        • CCI_QUERY_RESULT_RESULT
        • CCI_QUERY_RESULT_STMT_TYPE
        • cci_register_out_param
        • cci_row_count
        • cci_savepoint
        • cci_schema_info
        • cci_set_allocators
        • cci_set_autocommit
        • cci_set_db_parameter
        • cci_set_element_type
        • cci_set_free
        • cci_set_get
        • cci_set_holdability
        • cci_set_isolation_level
        • cci_set_lock_timeout
        • cci_set_login_timeout
        • cci_set_make
        • cci_set_max_row
        • cci_set_query_timeout
        • cci_set_size
    • PHP 드라이버
      • PHP 설치 및 설정
        • Linux
        • Windows
      • PHP 드라이버 빌드
        • Linux
        • Windows
      • PHP 프로그래밍
        • 데이터베이스 연결
        • 트랜잭션과 자동 커밋
        • 질의 처리
      • PHP API
    • PDO 드라이버
      • PDO 설치 및 설정
        • Linux
        • Windows
      • PHP 드라이버 빌드
      • PDO 프로그래밍
        • 데이터 원본 이름(DSN)
        • 미리 정의된 상수
      • PDO 예제 프로그램
        • CUBRID PDO 드라이버 확인
        • CUBRID 연결
        • SELECT 실행
        • UPDATE 실행
        • prepare와 bind
        • PDO::getAttribute() 사용
        • CUBRID PDO 확장
      • PDO API
    • ODBC 드라이버
      • ODBC 설치 및 설정
      • ODBC 프로그래밍
        • 연결 문자열(connection string) 구성
      • ASP 예제 프로그램
      • ODBC API
    • ADO.NET 드라이버
      • ADO.NET 설치 및 설정
      • ADO.NET 프로그래밍
        • 단순 질의/조회
        • batch 명령어
        • 연결 문자열
        • CUBRID 컬렉션
        • BLOB/CLOB 사용
        • CUBRID 메타데이터 지원
        • DataTable 지원
        • 트랜잭션
        • 파라미터 사용
        • 오류 코드 및 메시지
      • ADO.NET API
    • Perl 드라이버
      • Perl 설치 및 설정
      • Perl API
    • Python 드라이버
      • Python 설치 및 설정
        • Linux/Unix
        • Windows
      • Python 프로그래밍
      • Python 예제 프로그램
      • Python API
    • Ruby 드라이버
      • Ruby 설치 및 설정
      • Ruby 예제 프로그램
      • Ruby API
    • Node.js 드라이버
      • Node.js 설치
      • CUBRID Node.js API
  • 릴리스 노트
    • 11.4 릴리스 노트
      • 릴리스 노트 정보
      • 릴리스 개요
        • 드라이버 호환성
      • 11.4 변경사항
        • 기능 개선
        • 스펙변경
        • 개선 사항 (성능 개선 포함)
        • 오류수정
      • 주의사항
        • 신규 주의 사항
        • 기존 주의 사항
    • 공통 정보
      • 개정 내역
      • 버그 리포트 및 사용자 피드백 제공 방법
      • 라이선스
      • 추가 정보
      • 드라이버 관련 주의 사항
CUBRID
  • CUBRID SQL
  • CUBRID DBLink
  • View page source

CUBRID DBLink¶

CUBRID DBLink 소개¶

데이터베이스에서 정보를 조회하다 보면 종종 외부 데이터베이스의 정보 조회가 필요한 경우가 있다. 이렇게 외부 데이터베이스의 정보를 조회하기 위해서 CUBRID DBLink를 이용하면 타 데이터베이스의 정보를 조회할 수 있다.

CUBRID DBLink는 동일 기종인 CUBRID와 이기종인 Oracle, MySQL, MariaDB의 데이터베이스의 정보를 조회할 수 있도록 기능을 제공하고 있다. 외부 데이터베이스의 정보를 마치 하나의 데이터베이스에서 조회하는 것과 같은 효과를 발휘한다. 단 외부 데이터베이스를 여러 개 설정은 가능 하나, 정보를 조회할 때는 한 개의 타 데이터베이스의 정보만 조회할 수 있다.

CUBRID DBLink는 SELECT의 FROM절에 연결될 서버와 실행될 질의를 명시한 DBLINK 구문 형식과 원격 테이블 (테이블 확장명) 형식으로 사용 가능하며, INSERT/REPLACE/UPDATE/DELETE/MERGE구문은 원격 테이블 형식만 사용할 수 있다.

CUBRID DBLink 구성도¶

CUBRID DBLink는 동일기종 간에 DBLink와 이기종 간의 DBLink를 지원한다.

동일기종 간의 DBLink 구성도¶

동일기종의 외부 데이터베이스의 정보를 조회하기 위한 구성도를 보면 Database Server에서 CCI를 이용하여 동일기종의 Brokers에 접속하여 외부 데이터베이스의 정보를 조회할 수 있다.

../_images/dblink_homo.png

이기종 간의 DBLink 구성도¶

이기종 데이터베이스의 정보를 조회하기 위한 구성도를 보면 게이트웨이를 통해서 이기종 데이터베이스의 정보를 조회할 수 있다. 게이트웨이는 연결하는 데이터베이스의 ODBC(Open DataBase Connectivity) 드라이버를 이용하고 있다.

../_images/dblink_heter.png

DBLink를 위한 게이트웨이¶

게이트웨이는 CUBRID 데이터베이스와 이기종 데이터베이스 간의 중개하는 미들웨어로 브로커(Broker)와 유사하다. 게이트웨이는 이기종 데이터베이스 서버 (Oracle/MySQL/MariaDB 등)에 연결하고 데이터를 조회하여 CUBRID 데이터베이스 서버에 전달하는 역할을 한다.

게이트웨이를 포함하는 큐브리드 시스템은 아래 그림과 같이 cub_gateway, cub_cas_cgw를 포함한 다중 계층 구조를 가진다.

../_images/gateway.png

cub_cas_cgw¶

cub_cas_cgw(CAS Gateway)는 CUBRID Database Server에서 외부의 Database의 연결을 요청하는 공용 서버 역할을 한다. 또한, cub_cas_cgw는 데이터베이스 서버의 클라이언트로 동작하여 CUBRID Database Server의 요청에 의해 외부 데이터베이스 서버와 연결을 제공한다. 서비스 풀(service pool) 내에서 구동되는 cub_cas_cgw의 개수는 cubrid_gateway.conf 설정 파일에 지정할 수 있으며, cub_gateway에 의해 동적으로 조정된다.

cub_gateway¶

cub_gateway는 CUBRID Database Server와 cub_cas_cgw 사이의 연결을 중개하는 기능을 수행한다. 즉, CUBRID Database Server가 접근을 요청하면, cub_gateway는 공유 메모리(shared memory)를 통해 cub_cas_cgw의 상태를 파악하여 할당 가능한 cub_cas_cgw에게 요청을 전달하고, 해당 cub_cas_cgw로부터 전달받은 요청에 대한 처리 결과를 CUBRID Database Server에게 반환한다.

또한, cub_gateway는 서비스 풀 내의 cub_cas_cgw 개수를 조정하여 서버 부하를 관리하고, cub_cas_cgw의 구동 상태를 모니터링 및 관리한다. 만약, CUBRID Database Server의 요청을 cub_cas_cgw 1에게 전달하였는데, 비정상적인 종료로 인해 cub_cas_cgw 1과의 연결이 실패하면, cub_gateway는 CUBRID Database Server에게 연결 실패에 관한 에러 메시지를 전송하고 cub_cas_cgw 1을 재구동한다. 새롭게 구동된 cub_cas_cgw 1은 정상적인 대기 상태가 되어, 새로운 응용 클라이언트의 요청에 의해 재연결된다.

공유 메모리¶

공유 메모리에는 cub_cas_cgw의 상태 정보가 저장되며, cub_gateway는 공유 메모리에 저장된 cub_cas_cgw의 상태 정보를 참조하여 CUBRID Database Server와의 연결을 중개한다. 공유 메모리에 저장된 cub_cas_cgw의 상태 정보를 통해 시스템 관리자는 어떤 cub_cas_cgw가 현재 작업을 수행 중인지 확인할 수 있다.

게이트웨이 구동¶

게이트웨이를 구동하기 위하여 다음과 같이 입력한다.

$ cubrid gateway start

이미 게이트웨이가 구동 중이라면 다음과 같은 메시지가 출력된다.

$ cubrid gateway start
@cubrid gateway is running.

게이트웨이 종료¶

게이트웨이를 종료하기 위하여 다음과 같이 입력한다.

$ cubrid gateway stop

이미 게이트웨이가 종료되었다면 다음과 같은 메시지가 출력된다.

$ cubrid gateway stop
@ cubrid gateway stop
++ cubrid gateway is not running.

게이트웨이 재시작¶

게이트웨이를 재시작하기 위하여 다음과 같이 입력한다.

$ cubrid gateway restart

게이트웨이 상태 확인¶

cubrid gateway status 는 다양한 옵션을 제공하며, 각 게이트웨이의 처리 완료된 작업 수, 처리 대기중인 작업 수를 포함한 게이트웨이 상태 정보를 확인할 수 있도록 한다.

게이트웨이 상태 정보는 브로커와 동일하므로 브로커 상태 확인을 참조 한다.

cubrid gateway status [options] [expr]

CUBRID 서비스 시작시 게이트웨이 함께 시작¶

CUBRID 서비스 시작(cubrid service start) 시 게이트웨이 를 같이 시작되게 하려면, cubrid.conf 파일의 service 파라메터에 gateway 를 설정한다.

# cubrid.conf

[service]

service=server,broker,gateway,manager

...

CUBRID DBLINK 설정¶

CUBRID DBLink를 사용하기 위한 설정은 동일기종 DBLink와 이기종 DBLink의 설정이 다르다.

동일기종 DBLink 설정¶

위의 동일기종 구성도를 보면 원격지 데이터베이스의 Broker에 연결을 해야 하므로 원격지 데이터베이스의 Broker 설정이 필요 하다. 이 설정은 일반적인 Broker 설정과 동일하다.

이기종 DBLink 설정¶

이기종 데이터베이스(Oracle/MySQL/MariaDB)와 연결하기 위해서는 cubrid_gateway.conf 와 unixODBC 설치, ODBC Driver 정보 설정이 필요 하다.

게이트웨이 설정 파일¶

CUBRID 설치 시 생성되는 기본 게이트웨이 설정 파일인 cubrid_gateway.conf 에서 사용되는 파라메터는 브로커 파라메터와 거의 동일 하며, 추가로 반드시 변경해야 할 일부 파라메터가 포함된다. 기본으로 포함되지 않는 파라메터의 값은 직접 추가/편집해서 사용하면 된다. 다음은 설치 시 기본으로 제공되는 cubrid_gateway.conf 파일 내용이다.

[gateway]
MASTER_SHM_ID           =50001
ADMIN_LOG_FILE          =log/gateway/cubrid_gateway.log

[%oracle_gateway]
SERVICE                 =OFF
SSL                     =OFF
APPL_SERVER             =CAS_CGW
BROKER_PORT             =53000
MIN_NUM_APPL_SERVER     =5
MAX_NUM_APPL_SERVER     =40
APPL_SERVER_SHM_ID      =53000
LOG_DIR                 =log/gateway/sql_log
ERROR_LOG_DIR           =log/gateway/error_log
SQL_LOG                 =ON
TIME_TO_KILL            =120
SESSION_TIMEOUT         =300
KEEP_CONNECTION         =AUTO
CCI_DEFAULT_AUTOCOMMIT  =ON
APPL_SERVER_MAX_SIZE    =256
CGW_LINK_SERVER         =ORACLE
CGW_LINK_SERVER_IP      =localhost
CGW_LINK_SERVER_PORT    =1521
CGW_LINK_ODBC_DRIVER_NAME   =Oracle_ODBC_Driver
CGW_LINK_CONNECT_URL_PROPERTY       =


[%mysql_gateway]
SERVICE                 =OFF
SSL                     =OFF
APPL_SERVER             =CAS_CGW
BROKER_PORT             =56000
MIN_NUM_APPL_SERVER     =5
MAX_NUM_APPL_SERVER     =40
APPL_SERVER_SHM_ID      =56000
LOG_DIR                 =log/gateway/sql_log
ERROR_LOG_DIR           =log/gateway/error_log
SQL_LOG                 =ON
TIME_TO_KILL            =120
SESSION_TIMEOUT         =300
KEEP_CONNECTION         =AUTO
CCI_DEFAULT_AUTOCOMMIT  =ON
APPL_SERVER_MAX_SIZE    =256
CGW_LINK_SERVER         =MYSQL
CGW_LINK_SERVER_IP      =localhost
CGW_LINK_SERVER_PORT    =3306
CGW_LINK_ODBC_DRIVER_NAME   =MySQL_ODBC_Driver
CGW_LINK_CONNECT_URL_PROPERTY       ="charset=utf8;PREFETCH=100;NO_CACHE=1"

[%mariadb_gateway]
SERVICE                 =OFF
SSL                     =OFF
APPL_SERVER             =CAS_CGW
BROKER_PORT             =59000
MIN_NUM_APPL_SERVER     =5
MAX_NUM_APPL_SERVER     =40
APPL_SERVER_SHM_ID      =59000
LOG_DIR                 =log/gateway/sql_log
ERROR_LOG_DIR           =log/gateway/error_log
SQL_LOG                 =ON
TIME_TO_KILL            =120
SESSION_TIMEOUT         =300
KEEP_CONNECTION         =AUTO
CCI_DEFAULT_AUTOCOMMIT  =ON
APPL_SERVER_MAX_SIZE    =256
CGW_LINK_SERVER         =MARIADB
CGW_LINK_SERVER_IP      =localhost
CGW_LINK_SERVER_PORT    =3306
CGW_LINK_ODBC_DRIVER_NAME   =MariaDB_ODBC_Driver
CGW_LINK_CONNECT_URL_PROPERTY       =

게이트웨이 파라메터¶

이기종 데이터 베이스와 DBLink를 사용하기 위해서 설정하는 파라메터이다.

각각의 파라메터 의미는 이기종 데이터베이스 별로 약간 차이가 있다.

Parameter Name

Type

Value

APPL_SERVER

string

CGW_LINK_SERVER

string

CGW_LINK_SERVER_IP

string

CGW_LINK_SERVER_PORT

int

CGW_LINK_ODBC_DRIVER_NAME

string

CGW_LINK_CONNECT_URL_PROPERTY

string

APPL_SERVER

APPL_SERVER 는 게이트웨이의 응용 서버 이름을 설정하는 부분으로 반드시 CAS_CGW 로 설정해야 한다.

CGW_LINK_SERVER

CGW_LINK_SERVER 는 CAS_CGW로 연결하여 사용할 이기종 데이터베이스의 이름을 설정해야 한다. 현재 지원하는 데이터베이스는 Oracle, MySQL, MariaDB이다.

CGW_LINK_SERVER_IP

CGW_LINK_SERVER_IP 는 CAS_CGW와 연결할 이기종 데이터베이스의 IP 주소를 설정해야 한다.

Note

  • Oracle인 경우, tnsnames.ora의 net_service_name을 이용하므로 해당 파라메터는 사용하지 않는다.

  • 자세한 내용은 Oracle Database에 연결을 위한 연결정보 설정을 참고한다.

CGW_LINK_SERVER_PORT

CGW_LINK_SERVER_PORT 는 CAS_CGW와 연결할 이기종 데이터베이스의 Port 번호를 설정해야 한다.

Note

  • Oracle인 경우, tnsnames.ora의 net_service_name을 이용하므로 해당 파라메터는 사용하지 않는다.

  • 자세한 내용은 Oracle Database에 연결을 위한 연결정보 설정을 참고한다.

CGW_LINK_ODBC_DRIVER_NAME

CGW_LINK_ODBC_DRIVER_NAME 는 CAS_CGW와 연결할 때 이기종 데이터베이스에서 제공하는 ODBC Driver 이름을 설정해야 한다.

Note

  • Windows에서는 해당 이기종 데이터베이스의 ODBC Driver가 설치된 경우, ODBC 데이터 원본 관리자를 통해 Driver 이름을 확인할 수 있다.

  • Linux는 odbcinit.ini에 직접 Driver 이름을 명시해야 한다.

  • 자세한 내용은 ODBC Driver 정보 설정을 참고한다.

CGW_LINK_CONNECT_URL_PROPERTY

CGW_LINK_CONNECT_URL_PROPERTY 는 이기종 데이터베이스 연결을 위한 연결 문자열(Connection String)에 사용되는 연결 속성(property)을 작성한다.

Note

  • 연결 속성(property)는 데이터베이스별로 각각 다르므로 아래의 사이트를 참조한다.

  • Oracle : https://docs.oracle.com/cd/B19306_01/server.102/b15658/app_odbc.htm#UNXAR418

  • MySQL : https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html#codbc-dsn-option-flags

  • MariaDB : https://mariadb.com/kb/en/about-mariadb-connector-odbc/#general-connection-parameters

unixODBC 설치¶

unixODBC 드라이버 관리자는 Linux 및 UNIX 운영 체제에서 ODBC 드라이버 와 함께 사용할 수 있는 오픈 소스 ODBC 드라이버 관리자이다. 게이트웨이에서는 ODBC를 사용하기 위해서 unixODBC를 반드시 설치해야 한다.

Note

Windows에서는 기본으로 설치된 Microsoft® ODBC 데이터 원본 관리자 를 사용하면 된다.

unixODBC 설치 방법

$ wget https://www.unixodbc.org/unixODBC-2.3.9.tar.gz
$ tar xvf unixODBC-2.3.9.tar.gz
$ cd unixODBC-2.3.9
$ ./configure
$ make
$ make install

Note

unixODBC 드라이버 관리자 설치 방법은 아래의 url를 참고 바란다.

unixODBC 홈페이지 : https://www.unixodbc.org/

ODBC Driver 정보 설정¶

unixODBC가 설치한 후, 연결할 데이터베이스의 ODBC Driver 정보를 등록해야 한다.

ODBC Driver 정보는 odbcinst.ini를 직접 수정해서 등록한다.

아래의 내용은 MySQL, Oracle, MariaDB ODBC Driver 정보를 설정한 예제이다.

[MySQL ODBC 8.0 Unicode Driver]
Description = MySQL ODBC driver v8.0
Driver=/usr/lib64/libmyodbc8w.so

[Oracle 11g ODBC driver]
Description = Oracle ODBC driver v11g
Driver = /home/user/oracle/instantclient/libsqora.so.19.1

[mariadb odbc 3.1.13 driver]
Description= mariadb odbc driver 3.1.13
Driver=/home/user/mariadb-odbc-3.1.13/lib64/mariadb/libmaodbc.so

Note

참고로, 위의 예제에서 드라이버 이름은 각각 “MySQL ODBC 8.0 Unicode Driver”, “Oracle 11g ODBC driver” 와 “mariadb odbc 3.1.13 driver” 이다.

DBLink를 위한 Oracle 설정¶

Oracle 환경설정¶

DBLink에서 Oracle을 사용하기 위해서는 Oracle Instant Client 설치 및 설정, 연결 정보 설정, Oracle Database 환경변수 설정 및 게이트웨이 설정을 반드시 해야 한다.

오라클 인스턴트 클라이언트 ODBC 설치

Oracle Instant Client 다운로드 사이트에서 ODBC Package와 Basic Package 다운받아 동일한 디렉터리에 압축을 풉니다.

unzip instantclient-basic-linux.x64-19.20.0.0.0dbru.zip
unzip instantclient-odbc-linux.x64-19.20.0.0.0dbru.zip

Oracle Instant Client 다운로드 사이트: https://www.oracle.com/database/technologies/instant-client/downloads.html

오라클 인스턴트 클라이언트 환경변수 설정

export ORACLE_INSTANT_CLIENT=/home/user/oracle/instantclient
export PATH=$ORACLE_INSTANT_CLIENT:$PATH
export LD_LIBRARY_PATH=$ORACLE_INSTANT_CLIENT:$LD_LIBRARY_PATH

Oracle Database에 연결을 위한 연결정보 설정

Oracle Database에 연결을 하기 위해서는 연결정보를 가지고 있는 tnsnames.ora 파일을 수정해야 한다. 아래의 기본 형식에 HOST, PORT, SERVICE_NAME 이 세 항목에 연결정보를 작성해야 한다. 연결정보를 작성한 tnsnames.ora 파일은 TNS_ADMIN 환경변수에서 디렉터리 경로를 설정해야 한다. TNS_ADMIN설정 방법은 TNS_ADMIN 환경변수 설정을 참고한다.

tnsnames.ora 파일의 기본 형식

net_service_name =
  (DESCRIPTION=
        (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521)
  )
  (CONNECT_DATA =
        (SERVICE_NAME=service_name)
  )
)
  • net_service_name: 데이터베이스 연결을 위한 네트 서비스 이름이며, connection url의 db_name에 사용하는 이름이다.

  • HOST: 데이터베이스에 연결하려는 IP 주소 또는 서버 이름이다.

  • PORT: 연결에 필요한 포트이다. 대부분의 경우 기본 포트는 1521이다.

  • SERVICE_NAME: 연결하려는 데이터베이스의 이름이다.

Note

참고로, net_service_name 이 중복으로 작성이 되어도 에러가 발생되지 않는다. 하지만 중복된 다른 서버에 연결될 수 있으므로, net_service_name 이 반드시 중복되지 않게 설정해야 한다.

Oracle Database 환경변수 설정

Oracle database server 에 아래의 환경변수를 설정해야 한다.

export ORACLE_SID=XE
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/xe
export PATH=$ORACLE_HOME/bin:$PATH
  • ORACLE_SID는 시스템 식별자이다.

  • ORACLE_BASE은 오라클 기본 디렉터리 구조이다.

  • ORACLE_HOME은 오라클 데이터베이스가 설치된 경로이다.

TNS_ADMIN 환경변수 설정

TNS_ADMIN는 tnsnames.ora 파일이 있는 디렉터리 경로를 가리킨다. 만약 /home/user/myconfigs 에 tnsnames.ora 파일이 있다면 아래와 같이 설정 할 수 있다.

export TNS_ADMIN=/home/user/myconfigs

Oracle을 위한 cubrid_gateway.conf 설정

게이트웨이에서 oracle에 연결하기 위해서는 아래와 같이 몇 가지 설정이 필요하다.

자세한 내용은 게이트웨이 설정 파일을 참고한다.

게이트웨이는 oracle에 연결하기 위해서 tnsnames.ora 의 정보를 이용하기 때문에 CGW_LINK_SERVER_IP, CGW_LINK_SERVER_PORT 는 작성하지 않아도 된다. 해당 정보를 작성한 경우에도 게이트웨이는 참조하지 않는다.

APPL_SERVER                     =CAS_CGW
                .
                .
                .
CGW_LINK_SERVER                 =ORACLE
CGW_LINK_ODBC_DRIVER_NAME   =Oracle 19c ODBC driver
CGW_LINK_CONNECT_URL_PROPERTY =

DBLink를 위한 MySQL 설정¶

MySQL 환경설정¶

MySQL ODBC Driver 설치

게이트웨이에서 MySQL 연결을 하기위해서는 MySQL Unicode ODBC Driver가 필요 하다. 아래의 내용은 MySQL ODBC Driver 설치 방법이다.

MySQL Yum 저장소 를 사용하여 Connector/ODBC RPM 패키지를 제공합니다. 시스템의 리포지토리 목록에 MySQL Yum 저장소가 있어야 하며, 없는경우 MySQL Yum 저장소 다운로드 페이지( https://dev.mysql.com/downloads/repo/yum/ ) 에서 플랫폼에 대한 패키지를 선택하고 다운로드한다.

다운로드한 릴리스 패키지를 설치한다.

$ sudo yum install mysql80-community-release-el6-{version-number}.noarch.rpm

Yum을 사용하여 저장소를 업데이트한다.

$ sudo yum update mysql-community-release

아래의 명령으로 Connector/ODBC 를 설치한다.

$ sudo yum install mysql-connector-odbc

자세한 설치 방법은 https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-installation-binary-yum.html 을 참고한다.

MySQL을 위한 cubrid_gateway.conf 설정

게이트웨이에서 MySQL에 연결하기 위해서는 아래와 같이 몇 가지 설정이 필요하다.

자세한 내용은 게이트웨이 설정 파일을 참고한다.

APPL_SERVER                  =CAS_CGW
                .
                .
                .
CGW_LINK_SERVER                  =MYSQL
CGW_LINK_SERVER_IP           =localhost
CGW_LINK_SERVER_PORT         =3306
CGW_LINK_ODBC_DRIVER_NAME    =MySQL ODBC 8.0 Unicode Driver
CGW_LINK_CONNECT_URL_PROPERTY ="charset=utf8;PREFETCH=100;NO_CACHE=1"

DBLink를 위한 MariaDB 설정¶

MariaDB 환경설정¶

MariaDB ODBC Driver 설치

게이트웨이에서 MariaDB 연결을 하기위해서는 MariaDB ODBC Driver가 필요하다. 아래의 내용은 MariaDB ODBC Driver 설치 방법이다.

MariaDB Connector/ODBC 패키지는 아래의 페이지에서 버전을 선택하여 다운로드할 수 있다.

https://mariadb.com/downloads/connectors/

다운로드한 tarball 패키지에서 파일을 추출한다. 그리고 드라이버의 공유 라이브러리를 시스템의 적절한 위치에 설치 한다. 설치한 드라이버는 odbcinst.ini에 드라이버 정보를 설정해야 한다. 설정 방법은 ODBC Driver 정보 설정을 참고 한다.

$ mariadb-connector-odbc-3.1.13-centos7-amd64.tar.gz -C mariadb-odbc-3.1.13

자세한 설치 방법은 https://mariadb.com/kb/en/about-mariadb-connector-odbc/#installing-mariadb-connectorodbc-on-linux 을 참고한다.

MariaDB 위한 cubrid_gateway.conf 설정

게이트웨이에서 MariaDB에 연결하기 위해서는 아래와 같이 몇 가지 설정이 필요하다.

자세한 내용은 게이트웨이 설정 파일을 참고한다.

APPL_SERVER                  =CAS_CGW
                .
                .
                .
CGW_LINK_SERVER                  =MARIADB
CGW_LINK_SERVER_IP           =localhost
CGW_LINK_SERVER_PORT         =3306
CGW_LINK_ODBC_DRIVER_NAME    =mariadb odbc 3.1.13 driver

Cubrid DBLink 사용 방법¶

DBLink을 사용하기 위해 연결할 CUBRID의 broker들 정보 파악 또는 이기종 데이터베이스를 위한 게이트웨이 설정이 완료되었다면, DBLink을 이용한 Query문 작성 방법에 대해서 알아본다.

데이터 조회를 위한 DBLINK Query문 작성 방법은 두가지이다.

첫번째, FROM절에 DBLINK 구문을 작성하여 타 데이터베이스의 정보를 조회하는 방법

아래의 Query문은 IP 192.xxx.xxx.xxx의 타 데이터베이스의 remote_t 테이블 정보를 조회하는 Query문이다.

SELECT * FROM DBLINK ('192.xxx.xxx.xxx:53000:testdb:user:password:','SELECT col1, col2 FROM remote_t') AS t(col1 int, col2 varchar(32));

Note

Oracle의 경우 원격접속 정보 중 ip와 port는 게이트웨이 접속 정보이고, db_name 항목에는 tnsnames.ora의 net_service_name 을 넣어야 한다. 만약 net_service_name이 ora_test 이라면 아래와 같이 작성하면 된다.

SELECT * FROM DBLINK (‘192.xxx.xxx.xxx:53000:ora_test:user:password:’,’SELECT col1, col2 FROM remote_t’) AS t(col1 int, col2 varchar(32));

두번째, Query를 작성할 때 마다 매번 연결 정보를 작성해야 하는 번거로움과 사용자 정보(id, password)의 정보 보호를 위해 CREATE SERVER구문을 이용한다.CREATE SERVER 구문을 이용하는 경우 Query문이 간결해지고 사용자 정보 보호에 도움이 된다.

CREATE SERVER remote_srv ( HOST='192.xxx.xxx.xxx', PORT=53000, DBNAME=testdb, USER=user, PASSWORD='password');
SELECT * FROM DBLINK (remote_srv, 'SELECT col1 FROM remote_t') AS t(col1 int);

Note

DBLINK는 접속 URL에 추가 연결 속성(Properties)을 설정할 수 있다. 상세한 속성 내용은 CCI드라이버의 cci_connect_with_url 함수를 참조한다.

DBLINK 대상 데이터베이스가 HA 환경으로 구성된 경우 altHosts 속성을 이용해서 아래 예제처럼 설정을 할 수 있다.

192.168.0.1:53000:testdb:user:password::?altHosts=192.168.0.2:33000,192.168.0.3:33000

예제는 192.168.0.1 서버가 Active 데이터베이스이고 해당 서버에 연결할 수 없는 경우, 192.168.0.2 서버에 연결 요청하는 설정이다. 위의 예시처럼 여러개의 altHosts를 지정할 수 있으며, 나열한 순서대로 연결을 시도한다.

CREATE SERVER 구문의 PROPERTIES 항목에 연결 속성을 설정할 수 있다. 자세한 내용은 SELECT 와 서버 정의문 을 참고한다.

유의 사항¶

  • 동의어 생성 : 원격 테이블과 원격 동의어를 대상으로 로컬 동의어가 생성이 가능하다. 단, CUBRID가 아닌 타 DBMS의 경우, user명이나 db명을 병기해야 한다.

-- for CUBRID
create synonym synonym_1 for t1@srv1;
create synonym synonym_2 for remote_synonym@srv1;

-- for ORACLE
create synonym synonym_ora for user_ora.t1@srv_ora;

-- for MySQL and MariaDB
create synonym synonym_my for my_db.t1@srv_mysql;
create synonym synonym_maria for maria_db.t1@srv_maria;
  • 예약어 처리 : 원격DB의 예약어를 식별자로 사용하는 경우 예약어 처리 문자와 함께 반드시 대괄호 ([ ])로 감싸야 한다. CUBRID의 예약어 처리 문자는 큰따옴표(” “)문자이다.

SELECT ["COLUMN"],["ADD"],["ALTER"] FROM ["TABLE"]@srv1 ;
SELECT * FROM dblink(srv1, 'select "COLUMN","ADD","ALTER" from "TABLE" ') AS t(a varchar, b varchar, c varchar );
  • 오라클의 예약어 처리 문자는 큰따옴표(” “)문자이다.

SELECT ["COLUMN"],["ADD"],["ALTER"] FROM ["TABLE"]@srv1 ;
SELECT * FROM dblink(srv1, 'select "COLUMN","ADD","ALTER" from "TABLE" ') AS t(a varchar, b varchar, c varchar );
  • MySQL, MariaDB 예약어 처리 문자는 백쿼트(` `) 이다.

SELECT [`COLUMN`],[`ADD`],[`ALTER`] FROM [`TABLE`]@srv1 ;
SELECT * FROM dblink(srv1, 'select `COLUMN`,`ADD`,`ALTER` from `TABLE` ') AS t(a varchar, b varchar, c varchar );

제약 사항¶

공통 제약 사항¶

  • 원격 DB의 문자셋(charset)은 유니코드(utf-8) 문자셋만 지원한다.

  • 테이블 확장 형식 (object@server) 지원
    • 테이블, 뷰, 동의어만 지원

    • 시리얼, 내장함수, 저장함수는 미지원

      (예 : 원격서버(server1)의 sp_func() 저장 함수는 sp_func@server1(arg1, …) 형식으로 사용할 수 없음)

  • SELECT 질의의 모든 함수들(SYSDATE를 포함한 내장 함수, 저장 함수), serial 관련 함수 및 시스템 상수는 모두 로컬에서 실행된다. (원격DB에서 함수 또는 serial 수행이 필요한 경우에는 DBLINK 구문을 사용해야 한다.) 예를 들어 아래와 같이 원격 테이블 대상 select 질의에 대해 옵티마이저가 재작성한 질의를 보면 DBLINK() 안의 질의만 원격DB에서 실행된다.

SELECT A.*, rownum rn, '' empty, null null_col, SYSDATE
FROM t1@srv1 A ;

-- rewritten query
SELECT A.id, A.parentid, A.[text], rownum, '', null, SYS_DATE -- at local
FROM ( SELECT [_dbl].id, [_dbl].parentid, [_dbl].[text]
       FROM DBLINK( srv1 /* '192.168.1.125:33000:remotedb1:dba::' */,
                'SELECT * FROM tree A') AS [_dbl](id integer, parentid integer, [text] varchar(32)) -- at remote
     ) A (id, parentid, [text])
  • INSERT/UPDATE/DELETE/MERGE 질의에서 사용하는 모든 함수와, serial 관련 함수 및 시스템 상수는 모두 원격 서버에서 실행되므로 사용 시 주의가 필요하다. (즉, CUBRID의 내장함수가 원격 DBMS에서는 지원하지 않거나 사용법이 달라 오류 등의 오동작이 발생할 수 있으므로 주의 요망)

  • 트랜잭션 : 로컬DB와 원격DB의 트랜잭션(commit, rollback)은 하나의 트랜잭션으로 처리되지 않는다. 원격DB의 DML(INSERT/UPDATE/DELETE/MERGE 구문) 질의는 로컬 DB의 트랜잭션과 별개로 auto commit으로 동작한다. 아래 예시 처럼 트랜잭션을 수행하는 경우, 원격DB에는 insert 수행과 함께 커밋 처리되어 데이터가 입력되고, 로컬DB에는 명시적 롤백 질의에 의해 insert 수행했던 데이터가 롤백되어 입력되지 않는다.

-- local input
INSERT INTO t1(a, b) VALUES (1, 'local');

-- remote input
INSERT INTO t2@srv1(a, b) VALUES (1, 'remote');

rollback;

SELECT a, b FROM t1, t2@srv1 t2 WHERE t1.a = t2.a;
there’s no result
  • TRUNCATE 구문 미지원

  • CREATE TABLE … LIKE 테이블명@server명 구문 미지원 (참고로 CREATE TABLE … AS SELECT FROM 테이블명@server명 구문은 지원)

  • TRIGGER 구문에서 DBLINK() 혹은 원격 테이블(@server)을 사용한 질의는 오류가 발생한다.

  • predicate push 처리: 테이블 확장 형식(@server) 구문으로 작성된 SELECT 구문은 옵티마이저가 DBLINK()구문으로 재작성하는데, 성능 향상을 위해 원격 DB에서 처리 가능한 조건절을 함께 push 하여 재작성한다. 단, 조건절에서 사용한 내장함수와 사용자 정의함수는 push에서 제외되고, 로컬DB에서 실행된다.

  • 성능 유의 사항

    Note

    테이블 확장 형식(@server)의 SELECT 구문에서 connect by절, group by절, having절 및 limit절을 사용한 경우, where조건, group by절, having절 및 limit절이 원격DB에서 실행되지 않고, 전체 데이터를 로컬DB로 가져온 후 해당 조건 처리를 수행함으로 성능이 저하될 수 있다.

    아래는 count()를 처리하기 위해서 원격DB의 tree 테이블의 전체 데이터를 로컬DB로 가져온 후에 group by절을 처리하는 예시이다.

    -- original query
    SELECT A.parentid, count()
    FROM tree@srv1 A
    GROUP BY A.parentid ;
    
    -- rewritten query
    SELECT A.parentid, count()
    FROM ( SELECT [_dbl].parentid
           FROM DBLINK( srv1 /* '192.168.1.125:33000:remotedb1:dba::' */,
                        'SELECT parentid FROM tree A'
                      ) AS [_dbl](parentid integer)
         ) A (parentid)
    GROUP BY A.parentid
    
  • 테이블 확장 형식(@server)구문에서 사용하는 sysdate 함수는 로컬DB에서 수행되므로 서버간의 시간이 다른 경우 주의가 필요하다.

    -- original query
    SELECT * FROM tbl@srv1 WHERE col1 >= sysdate;
    
    -- rewritten query
    SELECT *
    FROM ( SELECT col1, col2
           FROM DBLINK( srv1 /* '192.168.1.125:33000:remotedb1:dba::' */,
                        'SELECT col1, col2 FROM tbl'
                      ) AS [_dbl](col1 date, col2 varchar)
         ) tbl (col1, col2)
    WHERE col1>= SYS_DATE
    
  • 테이블 확장 형식(@server)구문으로 co-related 조건의 스칼라 서브쿼리, 서브쿼리 및 EXIST 구문의 부질의 사용하는 경우, 반복되는 원격 질의 수행시 전체 데이터를 로컬 DB로 가지고 온 후 조인 조건에 맞는 데이터를 찾는 작업을 수행하게 되어 급격한 성능 저하가 발생할 수 있다. 아래 예시는 스칼라 서브 퀴리의 조건으로 T1.a를 사용하고 있어, T1.a < 4 만큼의 svr1의 tree table의 데이터를 로컬 DB로 가지고 와서 적합한 데이터를 찾는 작업을 하기 때문에 수행이 느려질 수 있다.

    -- original query
    SELECT T1.a,
           (SELECT A.text FROM tree@srv1 A WHERE A.id = T1.a ) remote_text
    FROM hangul_t1 T1
    WHERE T1.a < 4;
    
    -- rewritten query
    SELECT T1.a,
           (SELECT A.[text] from (select [_dbl].[text], [_dbl].id
            FROM DBLINK(srv1 /* '192.168.1.125:33000:remotedb1:dba::' */,
                        'SELECT [text], id FROM tree A'
                       ) AS [_dbl]([text] varchar(32), id integer)
            WHERE [_dbl].id=T1.a) A ([text], id))
    FROM hangul_t1 T1
    WHERE (T1.a< ?:0 )
    

CUBRID 제약 사항¶

  • SELECT 구문에서 ENUM, BLOB, CLOB, SET 타입 미지원

  • 로컬 DB와 원격 DB의 설정된 파라미터가 다른 경우 원하지 않는 결과가 발생할 수 있다.

이기종 DBMS 공통 제약 사항

  • 게이트웨이에서는 반드시 이기종 원격 데이터베이스(Oracle/MySQL/MariaDB)의 유니코드 전용 ODBC Driver를 사용해야 한다.

  • ODBC 타입 중 SQL_INTERVAL,SQL_GUID,SQL_BIT,SQL_BINARY,SQL_VARBINARY,SQL_LONGVARBINARY, SQL_LONGVARCHAR, SQL_WLONGVARCHAR 는 미지원 타입이다.

    ODBC SQL Type

    Oracle Data Type

    MySQL Data Type

    MariaDB Data Type

    SQL_LONGVARCHAR

    LONG, CLOB

    LONGTEXT

    LONGTEXT

    SQL_WLONGVARCHAR

    NCLOB

    SQL_BIT

    BIT

    BIT

    SQL_BINARY

    BINARY

    BINARY

    SQL_VARBINARY

    RAW

    VARBINARY

    VARBINARY

    SQL_LONGVARBINARY

    LONG RAW

    LONG VARBINARY

    LONG VARBINARY

    BLOB

    BLOB

    BLOB

    BFILE

    TINYBLOB

    TINYBLOB

    MEDIUMBLOB

    MEDIUMBLOB

    LONGBLOB

    LONGBLOB

    GEOMETRY

    GEOMETRY

    POINT

    POINT

    POLGON

    POLGON

    GEOMETRYCOLLECTION

    GEOMETRYCOLLECTION

    MULTILINESTRING

    MULTILINESTRING

    MULTIPOINT

    MULTIPOINT

    MULTIPOLYGON

    MULTIPOLYGON

    SQL_INTERVAL

    INTERVAL YEAR TO MONTH

    INTERVAL DAY TO SECOND

  • 1개 컬럼의 문자열 최대 길이는 16M이다. 아래의 표는 DBMS별 Data의 길이가 16M 이상인 Data Type 이다.

    DBMS Name

    Data Type

    Oracle

    LONG, NCLOB, CLOB

    MySQL

    LONGTEXT

    MariaDB

    LONGTEXT

  • INSERT, UPDATE, DELETE, MERGE 와 같은 DML 구문에서 CUBRID가 미지원하는 내장 함수 중 function(파라미터1, …, 파라미터N)의 형식이 아닌 경우에는 질의 오류가 발생한다.

    예시: MySQL, MariaDB의 convert 함수 : convert(‘binary’ using binary) – 오류 발생

Note

Oracle 제약 사항

  • SELECT 구문에서 LONG, INTERVAL DAY TO SECOND, INTERVAL YEAR TO MONTH, BLOB, CLOB 타입은 지원하지 않는다. 자세한 내용은 이기종 DBMS 공통 제약 사항의 미지원 타입을 참고한다.

  • INTERVAL DAY TO SECOND, INTERVAL YEAR TO MONTH 타입은 Oracle ODBC에서 지원하지 않는 타입이다. 자세한 내용은 “Using the Oracle ODBC Driver”(https://docs.oracle.com/en/database/oracle/oracle-database/19/adfns/odbc-driver.html#GUID-3FE69BEF-F8D2-4152-9B1A-877186C47028)를 참고한다.

  • Oracle ODBC는 타임존 데이터 조회시 timestamp 타입의 로컬 시간으로 변환하여 반환된다. (타임존 데이터 타입 미지원)

아래는 Oracle DB의 타임존 데이터를 ODBC로 조회시 로컬타임존으로 변환되는 예시이다. 입력한 타임존 “+02:00”이지만, DBLink을 통해 select 하는 경우 로컬타임존 “+09:00”로 변환하여 “PM 08시”로 출력된다.

-- oracle input
INSERT INTO tbl VALUES (to_timestamp_tz('2021-07-25 12:34:56 +02:00', 'yyyy-mm-dd hh24:mi:ss tzh:tzm'));

-- local
SELECT t_timestamp_timezone2 FROM tbl@server;
07:34:56.000 PM 07/25/2021
SELECT to_char(t_timestamp_timezone2, 'yyyy-mm-dd hh24:mi:ss.ff tzh:tzm') FROM tbl@server;
2021-07-25 19:34:56.000 +09:00
  • 미지원 구문인 REPLACE 구문은 사용시 오류 발생

  • CUBRID의 타입 범위를 벗어나는 오라클의 date, number 타입 데이터는 입력은 가능하나 조회 시에는 오류가 발생한다.

Note

MySQL/MariaDB제약 사항

  • MySQL에서 cache를 사용하는 경우 게이트웨이 프로세스(cub_cas_cgw)의 메모리 사용량이 증가하므로 PREFETCH, NO_CACHE=1 사용을 권장한다.

  • MySQL/MariaDB에서 repeat() 함수가 포함된 질의 수행 시 문자열의 일부가 잘리거나, 문자열을 읽어오지 못할 수 있다.

  • SELECT 구문에서 LONGTEXT, BIT, BLOB, LONGBLOB 타입은 지원하지 않는다. 자세한 내용은 이기종 DBMS 공통 제약 사항의 미지원 타입을 참고한다.

Previous Next

© Copyright 2016, CUBRID Corparation. Last updated on May 15, 2025.

Built with Sphinx using a theme provided by Read the Docs.