콘텐츠로 이동

5.Shard Packages

5.Altibase Sharding 패키지#

Altibase Sharding 패키지를 구성하는 프로시저와 함수에 대해 설명한다.

DBMS_SHARD#

DBMS_SHARD 패키지는 Altibase Sharding의 샤드 설정과 관리에 사용한다.

아래의 표와 같이 DBMS_SHARD 패키지를 구성하는 프로시저와 함수를 제공한다.

프로시저 및 함수 설명
CREATE_META 샤드 노드에서 샤드 메타 테이블을 생성한다.
RESET_META_NODE_ID 현재 접속 노드 식별자를 변경한다.
EXECUTE_IMMEDIATE 샤드 노드로 ad-hoc 쿼리를 수행한다.
SET_NODE 샤드 노드를 등록한다.
RESET_NODE_EXTERNAL 샤드 라이브러리 또는 외부 응용프로그램에서 연결할 샤드 노드 접속 정보를 변경한다.
RESET_NODE_INTERNAL 코디네이터가 연결할 샤드 노드 접속 정보를 변경한다.
SET_SHARD_TABLE 샤드 테이블을 등록한다.
SET_SHARD_TABLE_COMPOSITE 복합 샤드 키를 갖는 샤드 테이블을 등록한다.
SET_SHARD_PROCEDURE 샤드 프로시저를 등록한다.
SET_SHARD_PROCEDURE_COMPOSITE 복합 샤드 키를 갖는 샤드 프로시저를 등록한다.
SET_SHARD_HASH HASH 방식의 분산정보를 등록한다.
SET_SHARD_RANGE RANGE 방식의 분산정보를 등록한다.
SET_SHARD_LIST LIST 방식의 분산정보를 등록한다.
SET_SHARD_CLONE CLONE 방식의 분산정보를 등록한다.
SET_SHARD_SOLO SOLO 방식의 분산정보를 등록한다.
SET_SHARD_COMPOSITE 복합 샤드 키 방식의 분산정보를 등록한다.
RESET_SHARD_RESIDENT_NODE 등록된 분산 정보의 샤드 노드를 변경한다.
CHECK_DATA 샤드 키와 데이터의 유효성을 확인한다.
REBUILD_DATA 변경된 샤드 키 분산방식에 따라 모든 샤드 노드의 데이터를 재분배한다.
REBUILD_DATA_NODE 변경된 샤드 키 분산방식에 따라 특정 샤드 노드의 데이터를 재분배한다.
UNSET_NODE 샤드 노드를 해제한다.
UNSET_SHARD_TABLE 샤드 테이블을 해제한다.
UNSET_SHARD_TABLE_BY_ID shard_id로 샤드 테이블을 해제한다.
UNSET_SHARD_PROCEDURE 샤드 프로시저를 해제한다.
UNSET_SHARD_PROCEDURE_BY_ID shard_id로 샤드 프로시저를 해제한다.

CREATE_META#

구문#
CREATE_META(meta_node_id in integer)
파라미터#
이름 입출력 데이터 타입 설명
meta_node_id IN INTEGER 샤드 메타 식별자
설명#

현재 접속 노드에서 샤드 메타 테이블을 생성한다.

create_meta를 수행하면 SYS_SHARD 계정이 생성되고 샤드에 메타를 저장할 테이블과 인덱스, 시퀀스가 생성된다. 이후부터 Altibase Sharding 기능을 사용할 수 있다.

meta_node_id 파라미터는 샤드 메타 식별자이며 DBMS_SHARD.RESET_META_NODE_ID 를 통해서 변경 가능하다.

meta_node_id는 전체 샤딩 시스템에서 유일한 값이어야 한다.

예제#
iSQL> EXEC dbms_shard.create_meta(1);
Execute success.
주의 사항#
  • 메타 테이블을 삭제하면 샤딩을 사용할 수 없으므로 주의해야 한다.
  • meta_node_id 값 범위: 0\~65535

RESET_META_NODE_ID#

구문#
RESET_META_NODE_ID(meta_node_id in integer)
파라미터#
이름 입출력 데이터 타입 설명
meta_node_id IN INTEGER 샤드 메타 식별자
설명#

샤드 메타 식별자를 변경한다.

예제#
iSQL> EXEC dbms_shard.reset_meta_node_id(1);
Execute success.
주의 사항#
  • meta_node_id는 Altibase Sharding 시스템 내에서 구별 가능한 유일값이어야 한다.
  • meta_node_id 값 범위: 0\~65535

EXECUTE_IMMEDIATE#

구문#
EXECUTE_IMMEDIATE(
 query     in varchar(65534),
 node_name in varchar(40) default NULL)
파라미터#
이름 입출력 데이터 타입 설명
query IN VARCHAR(65534) 샤드 쿼리
node_name IN VARCHAR(40) 샤드 노드
설명#

샤드 노드에서 임의의 샤드 노드에 특정(ad-hoc) 쿼리를 수행한다. node_name을 지정하지 않으면, 모든 샤드 노드에 수행한다.

예제#
iSQL> EXEC dbms_shard.execute_immediate(‘TRUNCATE TABLE s1’,’node1’);
Execute success.

SET_NODE#

구문#
SET_NODE(
 node_name         in varchar(40),
 host_ip           in varchar(16),
 port_no           in integer,
 alternate_host_ip in varchar(16) default NULL,
 alternate_port_no in integer default NULL
 conn_type         in integer default NULL)
파라미터#
이름 입출력 데이터 타입 설명
node_name IN VARCHAR(40) 샤드 노드 이름
host_ip IN VARCHAR(16) 샤드 노드의 IP
port_no IN INTEGER 샤드 노드의 PORT 번호
alternate_host_ip IN VARCHAR(16) 샤드 노드의 Alternate IP
alternate_port_no IN INTEGER 샤드 노드의 Alternate PORT 번호
conn_type IN INTEGER 내부적으로 사용되는 코디네이터 연결 방식으로 지원 타입은 Altibase Sharding 통신 방법 의 코디네이터 커넥션을 참고한다.
설명#

샤드 노드에서 샤드 노드의 이름과 IP 및 PORT 정보와 Alternate IP 및 Alternate Port를 설정한다.

예제#
iSQL> EXEC dbms_shard.set_node('node1','192.168.1.11',20300);
Execute success.
iSQL> EXEC dbms_shard.set_node('node2','192.168.1.12',20300);
Execute success.
iSQL> EXEC dbms_shard.set_node('node3','192.168.1.13',20300);
Execute success.
iSQL> EXEC dbms_shard.set_node('NODE3','192.168.1.23',11094,'192.168.1.24',11094);
Execute success.
iSQL> EXEC dbms_shard.set_node('node4', '192.168.1.30', 20300, '192.168.1.31', 20400, 1);
Execute success.

RESET_NODE_EXTERNAL#

구문#
RESET_NODE_EXTERNAL(node_name in varchar(40),
                    host_ip   in varchar(16),
                    port_no   in integer,
                    alternate_host_ip in varchar(16),
                    alternate_port_no in integer)
파라미터#
이름 입출력 데이터 타입 설명
node_name IN VARCHAR(40) 샤드 노드 이름
host_ip IN VARCHAR(16) 샤드 노드의 Alternate IP
port_no IN INTEGER 샤드 노드의 PORT 번호
alternate_host_ip IN VARCHAR(16) 샤드 노드의 Alternate IP
alternate_port_no IN INTEGER 샤드 노드의 Alternate PORT 번호
설명#

샤드 메타에 설정한 외부(샤드 라이브러리 연결) 연결 접속 정보를 변경한다.

RESET_NODE_EXTERNAL 프로시저를 이용하여 샤드라이브러리와 샤드 노드 간 접속 정보를 변경 할 수 있으며,
내부적으로 사용되는 코디네이터연결 접속 정보 변경을 위해서는 RESET_NODE_INTERNAL 프로시저를 사용해야 한다.

예제#
iSQL> EXEC dbms_shard.reset_node_external('node1', '192.168.100.1', 20300,
'192.168.100.2', 20300 );
Execute success.

RESET_NODE_INTERNAL#

구문#
RESET_NODE_INTERNAL(node_name         in varchar(40),
                    host_ip           in varchar(16),
                    port_no           in integer,
                    alternate_host_ip in varchar(16),
                    alternate_port_no in integer,
                    conn_type         in integer)
파라미터#
이름 입출력 데이터 타입 설명
node_name IN VARCHAR(40) 샤드 노드 이름
host_ip IN VARCHAR(16) 샤드 노드의 IP
port_no IN INTEGER 샤드 노드의 PORT 번호
alternate_host_ip IN VARCHAR(16) 샤드 노드의 Alternate IP
alternate_port_no IN INTEGER 샤드 노드의 Alternate PORT 번호
conn_type IN INTEGER 코디네이터 연결 방식으로 지원 타입은 Altibase Sharding 통신 방법 의 코디네이터 커넥션을 참고한다.
설명#

샤드 메타에 설정한 내부(코디네이터 연결) 연결 접속 정보를 변경한다.

RESET_NODE_INTERNAL 프로시저를 이용하여 코디네이터와 샤드 노드 간 접속 정보를 변경 할 수 있으며,
샤드라이브러리에서 사용하는 외부 응용프로그램과 샤드 노드 간 접속 정보 변경을 위해서는 RESET_NODE_EXTERNAL 프로시저를 사용해야 한다.

예제#
iSQL> EXEC dbms_shard.reset_node_external ('node1', '192.168.100.1', 20300,
'192.168.100.2', 20300, 1);
Execute success.

SET_SHARD_TABLE#

구문#
SET_SHARD_TABLE(
 user_name         in varchar(128),
 table_name        in varchar(128),
 split_method      in varchar(1),
 key_column_name   in varchar(128) default NULL,
 default_node_name in varchar(40) default NULL)
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 테이블 소유자의 이름
table_name IN VARCHAR(128) 테이블 이름
split_method IN VARCHAR(1) 분산 방식 H: 해시 분산 방식 R: 범위 분산 방식 L: 리스트 분산 방식 C: 복제 분산 방식 S: 독립 분산 방식
key_column_name IN VARCHAR(128) 샤드 키 컬럼 이름
default_node_name IN VARCHAR(40) 기본 샤드 노드

설명

샤드 노드에 샤드 테이블 정보를 설정한다.

기본 샤드 노드란 샤드 키 분산 객체에 한해 분산 정보가 정의되지 않은 경우에 선택되는 샤드 노드를 의미하며, 지정하지 않을 수도 있다. 기본 샤드 노드를 지정하지 않을 경우, 샤드 키 분산 정보에 맞지 않는 샤드 키 값이 입력되면, 처리할 수 없으므로 에러가 발생한다.

예제#
iSQL> EXEC dbms_shard.set_shard_table('sys','t1','H','i1','node3');
Execute success.
iSQL> EXEC dbms_shard.set_shard_table('sys','t2','R','i1', 'node3');
Execute success.
iSQL> EXEC dbms_shard.set_shard_table('sys','t3','L','i1', 'node3');
Execute success.
iSQL> EXEC dbms_shard.set_shard_table('sys','t4','C');
Execute success.
iSQL> EXEC dbms_shard.set_shard_table('sys','t5','S');
Execute success.
주의사항#
  • 샤드 테이블을 설정하기 위해서는 반드시 샤드 노드에 동일한 테이블 스키마가 생성되어야 한다.
  • 테이블을 제거(drop)하더라도 샤드 테이블 정보는 삭제되지 않는다.

SET_SHARD_TABLE_COMPOSITE#

구문#
SET_SHARD_TABLE_COMPOSITE(
 user_name  in varchar(128),
 table_name in varchar(128),
 split_method in varchar(1),
 key_column_name in varchar(128),
 sub_split_method in varchar(1),
 sub_key_column_name in varchar(128),
 default_node_name in varchar(40) default NULL)
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 테이블 소유자의 이름
table_name IN VARCHAR(128) 테이블 이름
split_method IN VARCHAR(1) 샤드 키 분산 방식 H: 해시 분산 방식 R: 범위 분산 방식 L: 리스트 분산 방식
key_column_name IN VARCHAR(128) 샤드 키 컬럼 이름
sub_split_method IN VARCHAR(1) 서브 샤드 키 분산 방식 H: 해시 분산 방식 R: 범위 분산 방식 L: 리스트 분산 방식
sub_key_column_name IN VARCHAR(128) 서브 샤드 키 컬럼 이름
default_node_name IN VARCHAR(40) 기본 샤드 노드(default node)

설명

샤드 노드에서 복합 샤드 키를 적용하는 샤드 테이블의 정보를 설정한다.

예제#
iSQL> EXEC dbms_shard.set_shard_table_composite(‘sys’,’t6’,’L’,’i1’,'L','i2',’node3’);
Execute success.
주의사항#
  • 복합 샤드키를 적용한 샤드 테이블 역시 샤드 노드에 동일한 테이블 스키마가 생성되어야 한다.
  • 테이블을 제거(drop)하더라도 샤드 테이블 정보는 삭제되지 않는다.

SET_SHARD_PROCEDURE#

구문#
SET_SHARD_PROCEDURE(
 user_name in varchar(128),
 proc_name in varchar(128),
 split_method in varchar(1),
 key_param_name in varchar(128) default NULL,
 default_node_name in varchar(40) default NULL)
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 프로시저 소유자의 이름
proc_name IN VARCHAR(128) 프로시저 이름
split_method IN VARCHAR(1) 분산 방식 H: 해시 분산 방식 R: 범위 분산 방식 L: 리스트 분산 방식 C: 복제 분산 방식 S: 독립 분산 방식
key_param_name IN VARCHAR(128) 샤드 키 파라미터 이름
default_node_name IN VARCHAR(40) 기본 샤드 노드
설명#

샤드 노드에 샤드 프로시저의 정보를 설정한다.

Altibase Sharding 에서 지원하는 분산 방법의 종류는 샤드 테이블과 동일하다.

예제#
iSQL> EXEC dbms_shard.set_shard_procedure('sys','proc1','H','p1','node3');
Execute success.
iSQL> EXEC dbms_shard.set_shard_procedure('sys','proc2','R','p1','node3');
Execute success.
iSQL> EXEC dbms_shard.set_shard_procedure('sys','proc3','L','p1','node3');
Execute success.
iSQL> EXEC dbms_shard.set_shard_procedure('SYS','proc4','C');
Execute success.
iSQL> EXEC dbms_shard.set_shard_procedure('SYS','proc5','S');
Execute success.
주의사항#
  • 샤드 프로시저를 설정하기 위해서는 반드시 샤드 노드에 동일한 프로시저가 생성되어야 한다.
  • 프로시저를 제거(drop)하더라도 샤드 프로시저 정보는 삭제되지 않는다.

SET_SHARD_PROCEDURE_COMPOSITE#

구문#
SET_SHARD_PROCEDURE_COMPOSITE(
 user_name in varchar(128),
 proc_name in varchar(128),
 split_method in varchar(1),
 key_param_name in varchar(128) default NULL,
 sub_split_method in varchar(1),
 sub_key_param_name in varchar(128) default NULL,
 default_node_name in varchar(40) default NULL)
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 프로시저 소유자의 이름
proc_name IN VARCHAR(128) 프로시저 이름
split_method IN VARCHAR(1) 샤드 키 파라미터 분산 방식 H: 해시 분산 방식 R: 범위 분산 방식 L: 리스트 분산 방식
key_param_name IN VARCHAR(128) 샤드 키 파라미터 이름
sub_split_method IN VARCHAR(1) 서브 샤드 키 파라미터 분산 방식 H: 해시 분산 방식 R: 범위 분산 방식 L: 리스트 분산 방식
sub_key_param_name IN VARCHAR(128) 서브 샤드 키 파라미터 이름
default_node_name IN VARCHAR(40) 기본 샤드 노드(default node)
설명#

샤드 노드에 복합 샤드 키를 적용하는 샤드 프로시저의 정보를 설정한다.

Altibase Sharding에서 지원하는 분산 방법의 종류는 샤드 테이블과 동일하다.

예제#
iSQL> EXEC dbms_shard.set_shard_procedure_composite('sys','proc6','L','p1', 'L','p2','node3');
Execute success.
주의사항#
  • 복합 샤드 키 프로시저를 설정하기 위해서는 반드시 샤드 노드에 동일한 프로시저가 생성되어야 한다.
  • 프로시저를 제거(drop)하더라도 샤드 프로시저 정보는 삭제되지 않는다.

SET_SHARD_HASH#

구문#
SET_SHARD_HASH(    user_name in varchar(128),
                   object_name in varchar(128),
                   hash_max in integer,
                   node_name in varchar(40))
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 객체 소유자의 이름
object_name IN VARCHAR(128) 객체 이름
hash_max IN INTEGER 해시 분산의 상한값 [1-1000] (non-inclusive)
node_name IN VARCHAR(40) 기본 샤드노드
설명#

샤드 노드에 해시 방식으로 분산되는 샤드 객체의 정보를 설정한다. 지정 가능한 해시 상한값은 [ 1 \~ 1000 ]으로 정의한다.

실제 샤드 키에 대한 해시 값은 [ 0 \~ 999 ]이다.

구간별로 샤드 노드를 적절하게 지정해야 하며, 만약 지정하지 않을 경우 기본 샤드 노드로 데이터가 분산된다.

예제#

\<질의> sys.t1 테이블에 샤드 키의 hash 값에 따라 데이터가 다음과 같이 분산된다.

  • 0 \~ 499는 node1으로 분산
  • 500 \~ 799는 node2로 분산
  • 나머지 hash 값(800 \~ 999)은 기본 샤드 노드로 분산
iSQL> EXEC dbms_shard.set_shard_table('sys','t1','H','i1','node3');
Execute success.
iSQL> EXEC dbms_shard.set_shard_hash('sys','t1',500,'node1');
Execute success.
iSQL> EXEC dbms_shard.set_shard_hash('sys','t1',800,'node2');
Execute success

SET_SHARD_RANGE#

구문#
SET_SHARD_RANGE(     user_name    in  varchar(128),
                     object_name  in  varchar(128),
                     value_max    in  varchar(100),
                     node_name    in  varchar(40))
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 객체 소유자의 이름
object_name IN VARCHAR(128) 객체 이름
value_max IN VARCHAR(100) 범위 분산 샤드 키의 상한값(non-inclusive)
node_name IN VARCHAR(40) 기본 샤드 노드
설명#

샤드 노드에 범위 분산 방식으로 샤드 객체의 분산 정보를 설정한다.

예제#

\<질의> sys.t2 테이블에 샤드 키 값에 따라 데이터가 다음과 같이 분산된다.

  • 0 \~ 299는 node1으로 분산
  • 300 \~ 599는 node2로 분산
  • 나머지 값은 기본 샤드 노드로 분산
iSQL> EXEC dbms_shard.set_shard_table('sys','t2','R','i1','node3');
Execute success.
iSQL> EXEC dbms_shard.set_shard_range('sys','t2',300,'node1');
Execute success.
iSQL> EXEC dbms_shard.set_shard_range('sys','t2',600,'node2');
Execute success. 

SET_SHARD_LIST#

구문#
SET_SHARD_LIST(    user_name    in  varchar(128),
                   object_name  in  varchar(128),
                   value        in  varchar(100),
                   node_name    in  varchar(40))
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 객체 소유자의 이름
object_name IN VARCHAR(128) 객체 이름
value IN VARCHAR(100) 리스트 분산의 샤드 키의 최대값
node_name IN VARCHAR(40) 기본 샤드 노드
설명#

샤드 노드에 리스트 분산 방식의 샤드 객체에 대한 분산 정보를 설정한다.

예제#
iSQL> EXEC dbms_shard.set_shard_list('sys','t3','1a','node1');
Execute success.
iSQL> EXEC dbms_shard.set_shard_list('sys','t3','2a','node2');
Execute success.
iSQL> EXEC dbms_shard.set_shard_list('sys','t3','3a','node3');
Execute success.

SET_SHARD_COMPOSITE#

구문#
SET_SHARD_COMPOSITE(
 user_name    in  varchar(128),
 object_name  in  varchar(128),
 value        in  varchar(100),
 sub_value    in  varchar(100),
 node_name    in  varchar(40))
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 객체 소유자의 이름
object_name IN VARCHAR(128) 객체 이름
value IN VARCHAR(100) 샤드 키의 최대값
sub_value IN VARCHAR(100) 서브 샤드 키의 최대값
node_name IN VARCHAR(40) 기본 샤드 노드
설명#

샤드 노드에 복합 샤드 키를 적용한 샤드 객체의 분산 정보를 설정한다.

예제#
iSQL> EXEC dbms_shard.set_shard_composite('sys','t6','서울','강남구','node1');
Execute success.
iSQL> EXEC dbms_shard.set_shard_composite('sys','t6','서울','강북구','node2');
Execute success.
iSQL> EXEC dbms_shard.set_shard_composite('sys','t6','서울','강서구','node3');
Execute success.

iSQL> EXEC dbms_shard.set_shard_composite('sys','proc6','서울','강남구','node1');
Execute success.
iSQL> EXEC dbms_shard.set_shard_composite('sys','proc6','서울','강북구','node2');
Execute success.
iSQL> EXEC dbms_shard.set_shard_composite('sys','proc6','서울','강서구','node3');
Execute success

SET_SHARD_CLONE#

구문#
SET_SHARD_CLONE(user_name    in  varchar(128),
                object_name  in  varchar(128),
                node_name    in  varchar(40))
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 객체 소유자의 이름
object_name IN VARCHAR(128) 객체 이름
node_name IN VARCHAR(40) 샤드 노드
설명#

샤드 노드에 복제 분산 방식으로 샤드 객체의 분산 정보를 설정한다.

예제#
iSQL> EXEC dbms_shard.set_shard_clone('sys','t4','node1');
Execute success.
iSQL> EXEC dbms_shard.set_shard_clone('sys','t4','node2');
Execute success.
iSQL> EXEC dbms_shard.set_shard_clone('sys','t4','node3');

SET_SHARD_SOLO#

구문#
SET_SHARD_SOLO(user_name    in  varchar(128),
               object_name  in  varchar(128),
               node_name    in  varchar(40))
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 객체 소유자의 이름
object_name IN VARCHAR(128) 객체 이름
node_name IN VARCHAR(40) 샤드 노드
설명#

샤드 노드에 독립 분산 방식의 샤드 객체의 분산 정보를 설정한다.

예제#
iSQL> EXEC dbms_shard.set_shard_solo('sys','t5','node1');
Execute success.
iSQL> EXEC dbms_shard.set_shard_solo('sys','proc5','node1');
Execute success.

RESET_SHARD_RESIDENT_NODE#

구문#
RESET_SHARD_RESIDENT_NODE( user_name     in varchar(128),
                           object_name   in varchar(128),
                           old_node_name in varchar(40),
                           new_node_name in varchar(40),
                           value         in varchar(100) default NULL,
                           sub_value     in varchar(100) default NULL )
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 객체 소유자의 이름
object_name IN VARCHAR(128) 객체 이름
old_node_name IN VARCHAR(40) 현재 노드 이름
new_node_name IN VARCHAR(40) 변경할 노드 이름
value IN VARCHAR(100) 샤드 키의 최대값
sub_value IN VARCHAR(100) 서브 샤드 키의 최대값
설명#

등록된 분산 정보의 샤드 노드를 변경한다.

예제#
iSQL> EXEC dbms_shard.set_shard_table('sys','t1','H','i1');
Execute success.
iSQL> EXEC dbms_shard.set_shard_hash('sys','t1',500,'node1');
Execute success.
iSQL> EXEC dbms_shard.set_shard_hash('sys','t1',1000,'node3');
Execute success.
iSQL> EXEC dbms_shard.reset_shard_resident_node('sys','t1','node3','node2',1000);
Execute success.

CHECK_DATA#

구문#
CHECK_DATA(user_name            in  varchar(128),
           table_name           in  varchar(128),
           additional_node_list in varchar(1000) default null)
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 테이블 소유자의 이름
table_name IN VARCHAR(128) 테이블 이름
additional_node_list IN VARCHAR(1000) 샤드 노드의 이름 (기본값 : null)
설명#

샤드 테이블의 샤드 키와 데이터의 유효성을 확인한다.

additional_node_list는 테이블의 분산 정의에 등록되지 않은 샤드 노드의 정보를 확인한다. 샤드 노드의 이름은 쉼표(,)로 구분하여 나열한다.

예제#
iSQL> EXEC dbms_shard.check_data('sys','t1');
shard_key_column:I1
shard_information:{"SplitMethod":"H","RangeInfo":[{"Value":"500","Node":"NODE1"},{"Value":"1000","Node":"NODE2"}]}
node_name:NODE1, record_count:491, correct_count:491, incorrect_count:0
node_name:NODE2, record_count:509, correct_count:509, incorrect_count:0
total_record_count   :1000
total_incorrect_count:0
Execute success.

node1\~node4로 분산한 t1 테이블을 노드 node1\~node2로 재설정한 후 node3, node4를 포함한 정보까지 확인할 수 있는 예제이다.

iSQL> EXEC dbms_shard.check_data('sys','t1','node3, node4');
shard_key_column:I1
shard_information:{"SplitMethod":"H","RangeInfo":[{"Value":"500","Node":"NODE1"},{"Value":"1000","Node":"NODE2"}]}
node_name:NODE1, record_count:491, correct_count:491, incorrect_count:0
node_name:NODE2, record_count:509, correct_count:509, incorrect_count:0
node_name:NODE3, record_count:100, correct_count:0, incorrect_count:100
node_name:NODE4, record_count:100, correct_count:0, incorrect_count:100
total_record_count   :1000
total_incorrect_count:200
Execute success.
주의사항#

복합 샤드 키를 포함한 샤드 키 분산 테이블에 한해 적용된다.

REBUILD_DATA#

구문#
REBUILD_DATA(user_name            in  varchar(128),
             table_name           in  varchar(128),
             batch_count          in bigint default 0,
             additional_node_list in varchar(1000) default null)
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 테이블 소유자의 이름
table_name IN VARCHAR(128) 테이블 이름
batch_count IN BIGINT 일괄 처리 행의 단위 (기본값 : 전체 행)
additional_node_list IN VARCHAR(1000) 샤드 노드의 이름 (기본값 : null)
설명#

모든 샤드 노드의 데이터를 변경된 샤드 키 분산 방식으로 재분배한다.

additional_node_list는 테이블의 분산 정의에 등록되지 않은 샤드 노드를 포함하여 데이터를 재분배한다. 샤드 노드의 이름은 쉼표(,)로 구분하여 나열한다.

예제#

샤드 키 i1 으로 분산된 t1 테이블의 분산 정보를 재설정 한다고 가정한다.

  • hash (333:NODE1, 666:NODE2, 1000:NODE3) -> hash( 500:NODE1, 1000:NODE2)

기존 NODE3 에 분산되어 있는 데이터를 추가적으로 적용해야 하므로 additional_node_list 로 NODE3 를 포함하여 수행한다.

iSQL> EXEC dbms_shard.check_data('sys','t1');
shard_key_column:I1
shard_information:{"SplitMethod":"H","DefaultNode":"NODE1","RangeInfo":[{"Value":"1000","Node":"NODE3"},{"Value":"333","Node":"NODE1"},{"Value":"666","Node":"NODE2"}]}

node_name:NODE1, record_count:3314, correct_count:3314, incorrect_count:0
node_name:NODE2, record_count:3312, correct_count:3312, incorrect_count:0
node_name:NODE3, record_count:3373, correct_count:3373, incorrect_count:0

iSQL> AUTOCOMMIT OFF;
iSQL> EXEC dbms_shard.unset_shard_table('sys','t1');
iSQL> EXEC dbms_shard.set_shard_table('sys','t1','h','i1','node1');
iSQL> EXEC dbms_shard.set_shard_hash('sys','t1',500,'node1');
iSQL> EXEC dbms_shard.set_shard_hash('sys','t1',1000,'node2');
iSQL> COMMIT;
iSQL> ALTER SYSTEM RELOAD SHARD META NUMBER LOCAL;

iSQL> EXEC dbms_shard.rebuild_data('sys','t1',1000,'node3');
[12:09:16] target node(1/3): "NODE1"
[12:09:16] target node(2/3): "NODE2"
[12:09:16] 1000 moved
[12:09:16] 1663 moved
[12:09:16] target node(3/3): "NODE3"
[12:09:16] 1000 moved
[12:09:16] 2000 moved
[12:09:16] 3000 moved
[12:09:16] 3373 moved
[12:09:16] done.
Execute success.

iSQL> EXEC dbms_shard.check_data('sys','t1');
shard_key_column:I1
shard_information:{"SplitMethod":"H","DefaultNode":"NODE1","RangeInfo":[{"Value":"1000","Node":"NODE2"},{"Value":"500","Node":"NODE1"}]}

node_name:NODE1, record_count:4977, correct_count:4977, incorrect_count:0
node_name:NODE2, record_count:5022, correct_count:5022, incorrect_count:0

total_record_count   :9999
total_incorrect_count:0
Execute success.
iSQL> COMMIT;
주의사항#
  • 복합 샤드 키를 포함한 샤드 키 테이블에 한해 적용된다.
  • 기존의 샤드 분산 테이블을 해제하고 새로운 분산방식을 적용한 후, 이 프로시저를 수행해야 한다.
  • 데이터의 정합성 보장을 위해서는 사용자 어플리케이션을 정지한 이후 수행해야 한다.

REBUILD_DATA_NODE#

구문#
REBUILD_DATA_NODE(user_name   in  varchar(128),
                  table_name  in varchar(128),
                  node_name   in varchar(40),
                  batch_count in bigint default 0)
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 테이블 소유자의 이름
table_name IN VARCHAR(128) 테이블 이름
node_name IN VARCHAR(40) 샤드 노드 이름
batch_count IN BIGINT 일괄 처리 행의 단위 (기본값 : 0)
설명#

변경된 샤드 키 분산방식에 따라 특정 샤드 노드의 데이터를 재분배한다.

예제#
iSQL> AUTOCOMMIT OFF;
iSQL> EXEC dbms_shard.unset_shard_table('sys', 't1');
iSQL> EXEC dbms_shard.set_shard_table('sys','t1','R','i1','node3');
iSQL> EXEC dbms_shard.set_shard_range('sys','t1',330,'node1');
iSQL> EXEC dbms_shard.set_shard_range('sys','t1',500,'node2');
iSQL> COMMIT;
iSQL> ALTER SYSTEM RELOAD SHARD META NUMBER LOCAL;

iSQL> EXEC dbms_shard.check_data('sys','t1');
shard_key_column:I1
shard_information:{"SplitMethod":"R","DefaultNode":"NODE3","RangeInfo":[{"Value":"330","Node":"NODE1"},{"Value":"500","Node":"NODE2"}]}
node_name:NODE1, record_count:330, correct_count:330, incorrect_count:0
node_name:NODE2, record_count:330, correct_count:170, incorrect_count:160
node_name:NODE3, record_count:340, correct_count:340, incorrect_count:0
total_record_count   :1000
total_incorrect_count:160
Execute success.

iSQL> EXEC dbms_shard.rebuild_data_node('sys','t1','node2',100);
[14:12:25] 100 moved
[14:12:25] 160 moved
Execute success.

iSQL> EXEC dbms_shard.check_data('sys','t1');
shard_key_column:I1
shard_information:{"SplitMethod":"R","DefaultNode":"NODE3","RangeInfo":[{"Value":"330","Node":"NODE1"},{"Value":"500","Node":"NODE2"}]}
node_name:NODE1, record_count:330, correct_count:330, incorrect_count:0
node_name:NODE2, record_count:170, correct_count:170, incorrect_count:0
node_name:NODE3, record_count:500, correct_count:500, incorrect_count:0
total_record_count   :1000
total_incorrect_count:0
Execute success.
iSQL> COMMIT;
주의사항#

REBUILD_DATA 와 동일한 다음의 주의사항을 가지고 있다.

  • 복합 샤드 키를 포함한 샤드 키 테이블에 한해 적용된다.
  • 기존의 샤드 분산 테이블을 해제하고 새로운 분산방식을 적용한 후, 이 프로시저를 수행해야 한다.
  • 데이터의 정합성 보장을 위해서는 사용자 어플리케이션을 정지한 이후 수행해야 한다.

UNSET_NODE#

구문#
UNSET_NODE(node_name in varchar(40))
파라미터#
이름 입출력 데이터 타입 설명
node_name IN VARCHAR(40) 샤드 노드
설명#

샤드 노드에서 이전에 설정한 샤드 노드 정보를 삭제한다.

예제#
iSQL> EXEC dbms_shard.unset_node('node1');
Execute success.

UNSET_SHARD_TABLE#

구문#
UNSET_SHARD_TABLE(     user_name  in varchar(128),
                       table_name in varchar(128))
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 테이블 소유자의 이름
table_name IN VARCHAR(128) 테이블 이름
설명#

샤드 노드에서 샤드 테이블의 정보를 삭제한다.

UNSET_SHARD_TABLE() 함수를 사용하여 샤드 테이블 정보를 삭제하면, 분산 정보도 모두 삭제된다.

예제#
iSQL> EXEC dbms_shard.unset_shard_table('sys','t5');
Execute success.

UNSET_SHARD_TABLE_BY_ID#

구문#
UNSET_SHARD_TABLE_BY_ID(shard_id in integer)
파라미터#
이름 입출력 데이터 타입 설명
shard_id IN INTEGER 샤드 객체 번호
설명#

샤드 메타에서 샤드 테이블의 정보를 삭제한다.

UNSET_SHARD_TABLE_BY_ID() 함수를 사용하여 샤드 테이블 정보를 삭제하면, 분산 정보도 모두 삭제된다.

삭제된 shard_id는 sys_shard.objects_에서 조회할 수 있다.

예제#
iSQL> EXEC dbms_shard.unset_shard_table_by_id(123);
Execute success.

UNSET_SHARD_PROCEDURE#

구문#
UNSET_SHARD_PROCEDURE(
  user_name in varchar(128),
  proc_name in varchar(128))
파라미터#
이름 입출력 데이터 타입 설명
user_name IN VARCHAR(128) 프로시저 소유자의 이름
proc_name IN VARCHAR(128) 프로시저 이름
설명#

샤드 노드에서 샤드 프로시저의 정보를 삭제한다.

UNSET_SHARD_PROCEDURE() 함수를 사용하여 샤드 프로시저 정보를 삭제하면, 분산 정보도 모두 삭제된다.

예제#
iSQL> EXEC dbms_shard.unset_shard_procedure('sys','proc1');
Execute success.

UNSET_SHARD_PROCEDURE_BY_ID#

구문#
UNSET_SHARD_PROCEDURE_BY_ID(
    shard_id in integer)
파라미터#
이름 입출력 데이터 타입 설명
shard_id IN INTEGER 샤드 객체 번호
설명#

샤드 노드에서 샤드 프로시저의 정보를 삭제한다.

UNSET_SHARD_PROCEDURE_BY_ID() 함수를 사용하여 샤드 테이블 정보를 삭제하면, 각 분산 방식 때 정의했던 분산 정보도 모두 삭제된다.

샤드 메타를 삭제할 shard_id 는 sys_shard.objects_에서 조회할 수 있다.

예제#
iSQL> EXEC dbms_shard.unset_shard_procedure_by_id(123);
Execute success.