Oracle/Admin2010. 12. 15. 16:53





Q : 현재 db block size가 16kbytes로 설정된 db가 있다. 이 db의 데이터를 export/import를 이용하여
     8kbyte의 db block size를 갖는 db로 마이그레이션을 하려고 한다. 
     정상적으로 migration이 될까?
      반대로 8 kbytes -> 16 kbytes 도 될까?



1. 16 kbytes -> 8 kbytes migration


서버 1 ( db block size = 16kbytes) export

1. 버전 확인


SQL> select * from v$version where rownum <= 1;
BANNER
--------------------------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod



2. db block size 확인

SQL> show parameter db_block_size
NAME         TYPE      VALUE
------------------------------------ ---------------------- ------------------------------
db_block_size        integer      16384



3. 유저 생성 / 권한 부여

SQL> create user test identified by test;
User created.
SQL> grant resource, connect to test;
Grant succeeded.



4. 테이블 생성 / 데이터 입력

SQL> create table t1 (col1 number, col2 varchar2(20));
Table created.
SQL> insert into t1
  2  select level, '16k to 8k test'
  3  from dual
  4  connect by level <= 100;
100 rows created.
SQL> commit;
Commit complete.

SQL> select count(*) from t1;
  COUNT(*)
----------
       100
SQL> select * from t1 where rownum <= 10;
      COL1 COL2
---------- ----------------------------------------
  1 16k to 8k test
  2 16k to 8k test
  3 16k to 8k test
  4 16k to 8k test
  5 16k to 8k test
  6 16k to 8k test
  7 16k to 8k test
  8 16k to 8k test
  9 16k to 8k test
 10 16k to 8k test
10 rows selected.




5. 데이터 export(유저)

$ exp test/test file=16k_to_8k.dmp log=16k_to_8k_exp.log

$ ls -lrt 16*
-rw-r--r--  1 oracle oinstall  1241 12월 16 14:57 16k_to_8k_exp.log
-rw-r--r--  1 oracle oinstall 16384 12월 16 14:57 16k_to_8k.dmp




서버 2 ( db block size = 8kybytes) import

1. 버전 확인


SQL> select * from v$version where rownum <= 1;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod



2. db block size 확인


SQL> show parameter db_block_size
NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
db_block_size        integer  8192



3. 유저 생성


SQL> create user test identified by test;
User created.
SQL> grant resource, connect to test;
Grant succeeded.



4. 데이터 import

$ imp test/test file=16k_to_8k.dmp log=16k_to_8k_imp.log



5. 데이터 확인

SQL> show user
USER is "TEST"
SQL> select count(*) from t1;
  COUNT(*)
----------
       100
SQL> select * from t1 where rownum <= 10;
      COL1 COL2
---------- --------------------
  1 16k to 8k test
  2 16k to 8k test
  3 16k to 8k test
  4 16k to 8k test
  5 16k to 8k test
  6 16k to 8k test
  7 16k to 8k test
  8 16k to 8k test
  9 16k to 8k test
 10 16k to 8k test
10 rows selected.




2. 8 kbytes -> 16 kbytes migration


서버 1 ( db block size = 8kbytes) export

1 ~ 3은 생략
1. 버전 확인
2. db block size 확인
3. 유저 생성 / 권한 부여

4. 테이블 생성 / 데이터 입력

SQL> drop table t1 purge;
Table dropped.
SQL> create table t1 (col1 number, col2 varchar2(20));
Table created.
SQL> insert into t1
  2  select level, '8k to 16k test'
  3  from dual
  4  connect by level <= 150;
150 rows created.
SQL> commit;
Commit complete.
SQL> select count(*) from t1;
  COUNT(*)
----------
       150
SQL> select * from t1 where rownum <= 10;
      COL1 COL2
---------- --------------------
  1 8k to 16k test
  2 8k to 16k test
  3 8k to 16k test
  4 8k to 16k test
  5 8k to 16k test
  6 8k to 16k test
  7 8k to 16k test
  8 8k to 16k test
  9 8k to 16k test
 10 8k to 16k test
10 rows selected.



5. 데이터 export

$ exp test/test file=8k_to_16k.dmp log=8k_to_16k_exp.log



서버 2 ( db block size = 16kbytes) import

1 ~ 3은 생략
1. 버전 확인
2. db block size 확인
3. 유저 생성 / 권한 부여



4. 데이터 import

-- 이미 생성되어 있는 테이블을 삭제
SQL> drop table t1 purge;
Table dropped.

$ imp test/test file=8k_to_16k.dmp log=8k_to_16k_imp.log





5. 데이터 확인

SQL> show user
USER is "TEST"
SQL> select count(*) from t1;
  COUNT(*)
----------
       150
SQL> select * from t1 where rownum <= 10;
      COL1 COL2
---------- ----------------------------------------
  1 8k to 16k test
  2 8k to 16k test
  3 8k to 16k test
  4 8k to 16k test
  5 8k to 16k test
  6 8k to 16k test
  7 8k to 16k test
  8 8k to 16k test
  9 8k to 16k test
 10 8k to 16k test
10 rows selected.



A
테스트의 범위가 조금 협소하긴 하지만 16kbytes -> 8kbytes, 8kbytes -> 16kbytes의 마이그레이션은 잘 되는 것으로 판단됨.

Posted by 자수성가한 부자