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.