>  기사  >  데이터 베이스  >  MySQL을 KingbaseESV8R2로 마이그레이션하는 방법

MySQL을 KingbaseESV8R2로 마이그레이션하는 방법

WBOY
WBOY앞으로
2023-05-31 14:54:371714검색

    1. Oracle 전송 사용

    KingbaseESV8R2는 Oracle에서 마이그레이션만 지원하므로 먼저 MySQL을 Oracle로 마이그레이션하세요.

    Oracle로 마이그레이션할 때 발생하는 문제:
    1. Oracle에는 테이블 이름에 최대 30자리 제한이 있습니다.
    2. 잘못된 16진수, 잘못된 16진수
    3. 테이블 데이터가 비어 있으며 보고서는
    에 NULL을 삽입할 수 없습니다. 4. 인덱스 이름이 너무 깁니다

    MySQL을 Oracle로 마이그레이션할 때 문제가 많고 조정이 매우 크고 번거롭습니다. Oracle이 Kingbase로 마이그레이션할 때 테이블 마이그레이션이 성공하지 못할 수도 있지만 이후에는 성공할 수 있습니다. 여러 번의 시도.

    2. KingbaseESV8R3을 사용하여 전송

    Jincang 기술진에게 문의한 결과 현재 새로운 버전의 V8R3이 있지만 프로덕션 환경에서는 사용할 수 없지만 테스트용으로 사용할 수 있으며 다음으로 MySQL 직접 마이그레이션을 지원합니다. V8R3.

    따라서 가상 머신을 다시 설치해야 하며, 설치 과정에서 R2와 R3을 동시에 설치할 수 없으며, 데이터 마이그레이션을 위해 R3 마이그레이션 도구를 사용할 수 있습니다. 뷰, 인덱스, 외래키, 기본값 등의 설정을 마이그레이션하려면 원본 데이터베이스 마이그레이션 시 모두 선택을 선택하세요.

    MySQL을 KingbaseESV8R2로 마이그레이션하는 방법

    V8R3으로 마이그레이션 시 문제:
    1.tinyint(1)은 마이그레이션 후 부울로 매핑됩니다. 마이그레이션 도구에서 매핑되었더라도 여전히 동일합니다.
    그래서 마이그레이션 후에는 테이블 필드 유형을 변경해야 하며, 기본값이 있으면 기본값도 변경해야 합니다.

    MySQL을 KingbaseESV8R2로 마이그레이션하는 방법

    마이그레이션 과정에서 댓글을 선택했지만 해당 필드의 댓글은 여전히 기본 개체 관리자를 사용하여 표시할 수 없습니다. 테이블 이름 위에 마우스를 올리면 해당 테이블에 대한 설명을 볼 수 있습니다. 아직은 볼 수 있는 방법이 없습니다.

    tinyint(1) 문제를 수정한 후 논리적 백업을 위해 R3의 객체 관리자에서 데이터베이스를 선택할 수 있습니다.
    그런 다음 R2의 개체 관리자를 사용하여 논리적 복원을 수행합니다.

    3. 기타 질문

    1. 자동 증가

    MySQL 자동 증가는 Kingbase 자동 증가와 다릅니다. Kingbase 자동 증가는 둘 다 시퀀스를 정의하여 구현됩니다.

    현재 전송을 위해 kingbaseV8R3을 사용하는 경우 mysql을 r3으로 마이그레이션하면 시퀀스를 생성하고 필드의 기본값을 채워 자동 증가를 달성하는 데 도움이 됩니다.

    자동 증가를 수동으로 사용하는 방법은 다음과 같습니다.

    먼저 SEQUENCE를 만들고 이름을 test_id_SEQ로 지정합니다. 여기서 시작 값을 101

    CREATE SEQUENCE test_id_SEQ START 101;

    로 설정한 다음 자동이 필요한 필드의 기본값에

    NEXTVAL('test_id_SEQ'::REGCLASS)

    를 추가합니다. -increment 후 insert 문을 사용하세요. 테스트 테이블의 필드 ID는 101

    INSERT INTO test (name) values('1');

    부터 증가하기 시작합니다. 시퀀스를 삭제하기 전에 해당 필드의 기본값을 삭제해야 시퀀스를 삭제할 수 있습니다

    DROP SEQUENCE test_id_SEQ

    2.uuid

    kingbase에는 uuid 기능이 없고 실행 중 오류가 보고됩니다

    select replace(uuid(), '-', '') as id from dual

    당분간은

    select SYS_GUID_NAME() as id from dual;

    를 사용하세요. 결국 mysql과 kingbase의 uuid 생성 규칙이 다릅니다

    4.

    1. `구별 키워드

    를 사용할 수 없습니다. 2. IFNULL 함수가 NVL

    3.group으로 변경됩니다.

    4.sql에 모든 필드가 표시되어야 합니다. !='' 오류는 보고되지 않지만 실행 결과는 null입니다. Kingbase에서는 빈 문자열과 null이 동일합니다. !='' ,不会报错,但是执行结果null,在Kingbase中空字符串和null等价

    5.函数IF改成NVL2,Kingbase中只能判断是否为null

    6.字段类型字符串但是存时间,又想格式化时间。需要先将时间转为时间戳,再格式化为字符串

    SELECT to_char(to_timestamp('2020-02-20 15:35:44', 'YYYY-MM-DD HH24:MI:SS'),'MM-DD')

    7.不能使用双引号"",用单引号''代替

    8.不能使用count('')

    9.时间格式化,加减

    limit_time = limit_time + (now() - apply_time)

    MySQL:

    limit_time = date_add( limit_time, INTERVAL ( SELECT TimeStampDiff( DAY, now(), apply_time ) ) + 1 DAY )

    Kingbase:麻烦在于时间和字符串的转换,先将时间戳格式化为字符串,再转回时间才能进行加减

    limit_time = limit_time + (to_date(to_char(now(),'YYYY-MM-DD'),'YYYY-MM-DD') - to_date(to_char(apply_time,'YYYY-MM-DD'),'YYYY-MM-DD') + integer '1')

    10.表名和系统视图可能重名,要加模式名.表名

    5. 함수 IF NVL2로 변경되면 Kingbase는 null

    6인지 여부만 확인할 수 있습니다. 시간이 저장되어 있는데 시간 형식을 지정하고 싶습니다. 먼저 시간을 타임스탬프로 변환한 다음 문자열🎜rrreee🎜7로 형식을 지정해야 합니다. 큰따옴표 ""는 사용할 수 없습니다. 작은따옴표 ''를 사용하세요. 대신🎜🎜8 .count('')를 사용할 수 없습니다🎜🎜9. 시간 형식 지정, 덧셈 및 뺄셈🎜🎜limit_time =limit_time + (now() - apply_time)🎜🎜MySQL: 🎜rrreee🎜Kingbase : 문제는 시간과 문자열 변환인데, 먼저 타임스탬프를 문자열로 포맷한 후 다시 시간을 변환하여 덧셈과 뺄셈을 하게 됩니다. 🎜rrreee🎜10 테이블 이름과 시스템 뷰의 이름이 같을 수 있으니 를 추가하세요. 스키마 이름.테이블 이름Distinguish 🎜🎜11.is_delete = false가 is_delete = 0으로 변경되고 필드 값이 0이며 false로 필터링할 수 없습니다.

    위 내용은 MySQL을 KingbaseESV8R2로 마이그레이션하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제