작동중인 Oracle 데이터베이스 (11gR2)에 일부 레거시 데이터를로드해야합니다. 데이터베이스는 jsp/spring/hibernate (3.2.5.ga) 응용 프로그램에서 사용 중입니다. 시퀀스는 모든 테이블에서 고유 키를 생성하는 데 사용됩니다. 시퀀스 정의는 다음과 같습니다 :jsp/spring/hibernate 어플리케이션에서 사용되는 ETL을 오라클 데이터베이스로 변환
이CREATE SEQUENCE "TEST"."HIBERNATE_SEQUENCE" MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 1000 CACHE 20 NOORDER NOCYCLE
데이터로드에 대한 아이디어/ETL이 올 것입니다 wtih의 시작 부분에
select HIBERNATE_SEQUENCE.NEXTVAL from dual
을 실행하여 최대 시퀀스 값로 시작하는 스크립트 스크립트 생성 프로세스 - 데이터를 채울 필요가있는 SQL Insert 문을 생성했습니다. 스크립트를 통해 적용된 적용되는 데이터 정리, 비즈니스 규칙 등을 처리하는 데 관련된 일부 논리가 있으며 생성 된 SQL Insert 문은 한 배치에서 실행되어야하며 모든 기존 데이터를 가져올 수 있어야합니다.
INSERT INTO USER_STATUS(ID, CREATE_DATE, UPDATE_DATE, STATUS_ID, USER_ID)
VALUES (**1001**, CURRENT_DATE, CURRENT_DATE, 20, 445);
INSERT INTO USER_ACTIVITY_LOG(ID, CREATE_DATE, UPDATE_DATE, DETAILS, LAST_USER_STATUS_ID)
VALUES (**1002**, CURRENT_DATE, CURRENT_DATE, 'USER ACTIVITY 1', **1001**);
INSERT INTO USER_STATUS(ID, CREATE_DATE, UPDATE_DATE, STATUS_ID, USER_ID)
VALUES (**1003**, CURRENT_DATE, CURRENT_DATE, 10, 445);
INSERT INTO USER_ACTIVITY_LOG(ID, CREATE_DATE, UPDATE_DATE, DETAILS, LAST_USER_STATUS_ID)
VALUES (**1004**, CURRENT_DATE, CURRENT_DATE, 'USER ACTIVITY 3', **1003**);
는 좀 모의 SQL을 생성 한 다음 스크립트가 변수만큼이 사용하고 단위가 필요하며, 출력 SQL 인서트가 아래와 같은 것 - 최대 시퀀스 값이 1000이라고 가정
출력 INSERT가 어떻게 될지 아이디어를 보여줍니다. 삽입 작업에 더 많은 테이블이 포함될 것입니다. 백엔드에서 데이터를 변경해야 할 때마다 HIBERNATE_SEQUENCE.NEXTVAL을 사용하여 다음 고유 키 값을 얻습니다. 하지만 SQL 생성 스크립트는 연결이 끊긴 모드에서 실행되므로 HIBERNATE_SEQUENCE.NEXTVAL은 사용하지 않고 대신 로컬 변수를 증가시킵니다.
우리가
- 응용 프로그램이 스크립트를 실행하는 동안
- 에는 데이터베이스 활동이없는 유지 보수를 위해 아래로 촬영 한이 스크립트는 생성 (실행) 할 수있는에 대해 발생하는 가정 및 최대 순서 값으로 시작하십시오.
- SQL
SQL - commit을 실행하십시오.
스크립트 생성 과정에서 스크립트가 실행되고 데이터가로드 된 후 최대 시퀀스 값이 1000에서 5000으로 증가한다고 가정하면 HIBERNATE_SEQUENCE를 삭제/생성하여 5001에서 시작해야합니다.
응용 프로그램을 다시 가져 오십시오.
모든 의견을 환영합니다.
감사합니다.
이러한 제안에 감사드립니다. 예, 스크립트에서 키가 증가함에 따라 삽입 과정의 수를 알 수 있습니다. – user12002221