--Migration

S SCOTT> select sum(blocks) from user_extents
  2  where segment_name='TM';

SUM(BLOCKS)
-----------
        512

S SCOTT> select count(*) from tm;

  COUNT(*)
----------
    200000

S SCOTT> update tm set data='123456789012345678901234567890';

200000 행이 갱신되었습니다.

S SCOTT> select sum(blocks) from user_extents
  2  where segment_name='TM';

SUM(BLOCKS)
-----------
       2048

 

 --Row Chaining

S SCOTT> analyze table tm compute statistics;

테이블이 분석되었습니다.

S SCOTT> select chain_cnt from user_tables where table_name='TM';

 CHAIN_CNT
----------
    162485

 

S SCOTT> alter table tm move;

테이블이 변경되었습니다.

S SCOTT> analyze table tm compute statistics;

테이블이 분석되었습니다.

 

원래 인덱스 오류가 있어야 하나 테스트 셋에서 인덱스 주석처리 해서 생기지 않은 경우..ㅡㅡ;; 오류 생기면.

alter index ~ rebuild  하고 다시 analyze 해줘야 함.

 

S SCOTT> select chain_cnt from user_tables where table_name='TM';

 CHAIN_CNT
----------
         0

 

 

 

---- 디비 전체 chaining 갯수 보기.

먼저 통계 수집을 실행.

S SYS> exec dbms_stats.gather_database_stats;

 

 S SYS> select owner,table_name,chain_cnt from dba_tables where chain_cnt > 0;

선택된 레코드가 없습니다.

 

 

begin
   dbms_stats.gather_database_stats;
end;
/
select owner,table_name,chain_cnt from dba_tables where chain_cnt > 0
/

 

sav chain

 

 

 

--Shrink

 S SYS> create tablespace ts1 datafile size 10M;

테이블스페이스가 생성되었습니다.

S SYS> alter table scott.tm move tablespace ts1;

테이블이 변경되었습니다.

 

-Full  만들기.

 

S SCOTT> exec tm_i(100000,'a')
BEGIN tm_i(100000,'a'); END;

*
1행에 오류:
ORA-01653: unable to extend table SCOTT.TM by 128 in tablespace TS1
ORA-06512: at "SCOTT.TM_I", line 4
ORA-06512: at line 1

-삭제후에도 용량 그대로

 S SYS> delete from scott.tm where mod(id,2)=0;

340615 행이 삭제되었습니다.

 

S SYS> @tsUsage

NAME                                   MB       USED
------------------------------ ---------- ----------
TS1                                    10          9

 

 -shrink

S SYS> alter table scott.tm shrink space;
alter table scott.tm shrink space
*
1행에 오류:
ORA-10636: ROW MOVEMENT is not enabled


S SYS> alter table scott.tm enable row movement;

테이블이 변경되었습니다.

S SYS> alter table scott.tm shrink space;

테이블이 변경되었습니다.

S SYS> @tsUsage

NAME                                   MB       USED
------------------------------ ---------- ----------
TS1                                    10      4.125

S SYS>

 

인덱스 재구성 필요 없음.

 

 

 

-- Segment Advisor 연습

실전에서는 주기적으로 Advisor를 실행.

연습에서는 segment 크기를 비 정상적으로 증가시킴.

 

S SYS> select segment_name,blocks, tablespace_name from dba_segments where owner='SCOTT' and segment_name='DEPT';

SEGMENT_NAME
---------------------------------------------------------------------------------------------------
----------
    BLOCKS TABLESPACE_NAME
---------- ------------------------------------------------------------
DEPT
         8 EXAMPLE

 

S SYS> alter table scott.dept allocate extent(size 20M);

테이블이 변경되었습니다.

S SYS> select segment_name,blocks, tablespace_name from dba_segments where owner='SCOTT' and segment
_name='DEPT';

SEGMENT_NAME
----------------------------------------------------------------------------------------------------
----------
    BLOCKS TABLESPACE_NAME
---------- ------------------------------------------------------------
DEPT
      3848 EXAMPLE

 

 -EM 실행 후 스크립트

Create task and objects script 
 DECLARE
taskname varchar2(100);
taskdesc varchar2(128);
task_id number;
object_id number;
timeLimit varchar2(25);
numDaysToRetain varchar2(25);
objectName varchar2(100);
objectType varchar2(100);

BEGIN
taskname := 'SEGMENTADV_426781';
taskdesc :='Get shrink advice based on object growth trend';
numDaysToRetain :='30';
dbms_advisor.create_task('Segment Advisor',?,taskname,taskdesc,NULL);
dbms_advisor.create_object(taskname, 'TABLESPACE', 'EXAMPLE', ' ', ' ', NULL, object_id);
dbms_advisor.set_task_parameter(taskname, 'RECOMMEND_ALL', 'TRUE');
dbms_advisor.set_task_parameter(taskname, 'DAYS_TO_EXPIRE', numDaysToRetain);
END;

 

Execute task script

DECLARE
taskname varchar2(100);
BEGIN
taskname := 'SEGMENTADV_426781';
dbms_advisor.reset_task(taskname);
dbms_advisor.execute_task(taskname);
END;

 

 

 

-Resumable

공간모자라도 error 안나고 멈추고 공각확보후 질의 성공.

 

Resumable 안쓸때

S SCOTT> create table emp2 tablespace ts1 as select * from emp;

테이블이 생성되었습니다.

 

S SCOTT> insert into emp2 select * from emp2;
insert into emp2 select * from emp2
*
1행에 오류:
ORA-01653: unable to extend table SCOTT.EMP2 by 128 in tablespace TS1

 

 

Resumable 사용

 

- user 가 resumable 가능하게 셋팅

S SYS> grant resumable to scott;

권한이 부여되었습니다.

 

 S SCOTT> alter session enable resumable;

세션이 변경되었습니다.

S SCOTT> insert into emp2 select * from emp2;

 

 

에러 안나고 suspend 됨

 

- 또 다른 scott의 session

S SCOTT> select name, sql_text from user_resumable;

NAME
------------------------------------------------------------
SQL_TEXT
------------------------------------------------------------
User SCOTT(115), Session 129, Instance 1
insert into emp2 select * from emp2

 

=> sys에게 공간 더 달라고 요청.

 

S SYS> select name, sql_text from dba_resumable;

NAME
-----------------------------------------------------------
SQL_TEXT
-----------------------------------------------------------
User SCOTT(115), Session 129, Instance 1
insert into emp2 select * from emp2


S SYS> alter tablespace ts1 add datafile size 20M;

테이블스페이스가 변경되었습니다.

S SYS>

 

 

S SCOTT> insert into emp2 select * from emp2;

98304 개의 행이 만들어졌습니다.

S SCOTT>

 

insert 성공이 됨.

 

 

-Traansporting Tablespace

 

 S SYS> alter tablespace ts1 read only;

테이블스페이스가 변경되었습니다.

 

[oracle@orcl ~]$ exp tablespaces=ts1 transport_tablespace=y file=ts1.dmp

Export: Release 10.2.0.1.0 - Production on Mon Jun 29 16:44:31 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Username: / as sysdba

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
server uses AL32UTF8 character set (possible charset conversion)
Note: table data (rows) will not be exported
About to export transportable tablespace metadata...
For tablespace TS1 ...
. exporting cluster definitions
. exporting table definitions
. . exporting table                           EMP2
. exporting referential integrity constraints
. exporting triggers
. end transportable tablespace metadata export
Export terminated successfully without warnings.
[oracle@orcl ~]$

 

다른 디비에서 datafile을 바로 인식할 수 잇도록  ddl에 해당하는 내용만 추출.

 dmp 파일 => ddl에 해당하는 내용만 들어 있음. 적은크기.

 

-전송 해야 하는 데이터는

[oracle@orcl ~]$ ls ts1.dmp
ts1.dmp
[oracle@orcl ~]$
ls /u01/app/oracle/oradata/ORCL/datafile/*ts1*
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_ts1_54jn5ol1_.dbf
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_ts1_54jv8b0q_.dbf
[oracle@orcl ~]$

 

 

 [oracle@orcl ~]$ mkdir to_send
[oracle@orcl ~]$
mv ts1.dmp to_send/
[oracle@orcl ~]$
cp /u01/app/oracle/oradata/ORCL/datafile/*ts1* to_send/
[oracle@orcl ~]$
tar -cvf to_send.tar to_send/
to_send/
to_send/o1_mf_ts1_54jn5ol1_.dbf
to_send/o1_mf_ts1_54jv8b0q_.dbf
to_send/ts1.dmp
[oracle@orcl ~]$
gzip to_send.tar
[oracle@orcl ~]$
ls to_send.tar.gz
to_send.tar.gz

 

S SYS> select platform_name from v$database;

PLATFORM_NAME
-------------------------------------------------------------------
----------
Linux IA (32-bit)

S SYS> select endian_format from v$transportable_platform
  2  where platform_name=(select platform_name from v$database);

ENDIAN_FORMAT
----------------------------
Little

 

-convert data file by using RMAN

RMAN> convert tablespace ts1 to platform 'Linux IA (32-bit)' format='/~~';

 

-ship

copy

-use data pump to import metadata

[oracle@orcl ~]$ imp tablespaces=ts1 transport_tablespace=y file=ts1.dmp datafiles=' ',' '

 

 


 

 

-------학원에서 exp 한 tablespace 집 linux에 imp 시키기.

ts1.dmp 파일 복사.

datafile 경로에 datafile 복사 후 작업.

[oracle@orcl ~]$  imp tablespaces=ts1 transport_tablespace=y file=ts1.dmp datafiles='/u01/app/oracle/oradata/ORCL/datafile/o1_mf_ts1_54jn5ol1_.dbf','/u01/app/oracle/oradata/ORCL/datafile/o1_mf_ts1_54jv8b0q_.dbf'

Import: Release 10.2.0.1.0 - Production on Mon Jun 29 22:22:21 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Username: / as sysdba

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

Export file created by EXPORT:V10.02.01 via conventional path
About to import transportable tablespace(s) metadata...
import done in US7ASCII character set and AL16UTF16 NCHAR character set
import server uses AL32UTF8 character set (possible charset conversion)
. importing SYS's objects into SYS
. importing SYS's objects into SYS
. importing SCOTT's objects into SCOTT
. . importing table                         "EMP2"
. importing SYS's objects into SYS
Import terminated successfully without warnings.
[oracle@orcl ~]$

 

---확인.

SYS> select name from v$tablespace;

NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
USERS
TEMP
EXAMPLE
TS1

7 rows selected.

SYS> select count(*) from scott.emp2;

  COUNT(*)
----------
    196608

SYS>

 

----집 window로 tablespace 옮기기
   -convert 

RMAN> convert datafile 'C:\oracle\product\10.2.0\oradata\orcl\o1_mf_ts1_54jn5ol1_.dbf',
2>
'C:\oracle\product\10.2.0\oradata\orcl\o1_mf_ts1_54jv8b0q_.dbf'
3>
to platform="Microsoft Windows IA (32-bit)"
4>
from platform="Linux IA (32-bit)"
5> db_file_name_convert="C:\oracle\product\10.2.0\oradata\orcl\","C:\oracle\product\10.2.0\oradata\orcl\";

backup을(를) 09/06/29에서 시작 중
채널 ORA_DISK_1 사용 중
ORA_DISK_1 채널: 데이터 파일 변환 시작 중
입력 파일명=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\O1_MF_TS1_54JV8B0Q_.DBF
변환된 데이터 파일=C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\DATA_D-ORCL_I-1214711225_TS-TS1_FNO-7_01KIR4N2
ORA_DISK_1 채널: 데이터 파일 변환 완료. 경과 시간: 00:00:04
ORA_DISK_1 채널: 데이터 파일 변환 시작 중
입력 파일명=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\O1_MF_TS1_54JN5OL1_.DBF
변환된 데이터 파일=C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\DATA_D-ORCL_I-1214711225_TS-TS1_FNO-6_02KIR4N6
ORA_DISK_1 채널: 데이터 파일 변환 완료. 경과 시간: 00:00:02
backup을(를) 09/06/29에서 완료

 

 

C:\WINDOWS>imp tablespaces=ts1 transport_tablespace=y file=ts1.dmp datafiles='C:\ORACLE\PRODUCT\10.2.0\ORADATA
\ORCL\O1_MF_TS1_54JV8B0Q_.DBF','C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\O1_MF_TS1_54JN5OL1_.DBF'

Import: Release 10.2.0.1.0 - Production on 월 6월 29 23:33:00 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

사용자 이름: / as sysdba

다음에 접속됨: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

엑스포트 파일은 규정 경로를 거쳐 EXPORT:V10.02.01 에 의해 생성되었습니다
이동 가능한 테이블스페이스(들) 메타데이터을 임포트하려고 합니다...
KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
US7ASCII 문자 집합을 사용해서 클라이언트를 엑스포트합니다 (문자집합 변환이 가능합니다)
. SYS 객체를 SYS(으)로 임포트하는 중입니다
. SYS 객체를 SYS(으)로 임포트하는 중입니다
IMP-00017: 다음 명령이 실패하고 ORACLE 29345 오류가 발생했습니다:
 "BEGIN   sys.dbms_plugts.beginImport ('10.2.0.1.0',873,'2000',10,'Linux IA ("
 "32-bit)',54483,185501,1,0,0,0); END;"
IMP-00003: ORACLE 오류 29345이(가) 발생했습니다.
ORA-29345: 호환되지 않는 문자 집합을 사용하여 테이블스페이스를 데이터베이스에 플러그할 수 없습니다.
ORA-06512: "SYS.DBMS_PLUGTS", 줄 2386에서
ORA-06512: "SYS.DBMS_PLUGTS", 줄 1946에서
ORA-06512: 줄 1에서
IMP-00000: 임포트가 실패로 끝났습니다
...

 

error.JPG 

 

 

원래 안됨..ㅡㅡ;;

load 사용 해야 함....ㅋㅋㅋㅋㅋㅋㅋㅋ

 


 

 

 다른 T/S 와 독립적이어야 함.

  1. index가 다른 t/s 에 있는 경우
  2. partitioned table/index
  3. 다른 테이블객체 reference 하는 경우. 

 

 S SYS> select segment_name, owner from dba_segments where segment_type='INDEX'

and tablespace_name='EXAMPLE';

 

S SYS> select table_name, table_owner from dba_indexes where(index_name,owner) in
          (select segment_name, owner from dba_segments where segment_type='INDEX' and tablespace_name='
            EXAMPLE')

선택된 레코드가 없습니다.

 

S SYS> select distinct tablespace_name from dba_tables where (table_name,owner) in
            (select table_name, table_owner from dba_indexes where(index_name,owner) in
            (select segment_name, owner from dba_segments where segment_type='INDEX' and tablespace_name='
             EXAMPLE'));

선택된 레코드가 없습니다.

Index가 다른 테이블 스페이스에 있는 경우. 결과가 나옴.

 

 

 

S SYS> select distinct segment_type from dba_segments where tablespace_name='EXAMPLE';

SEGMENT_TYPE
------------------------------------
LOBINDEX
INDEX PARTITION
NESTED TABLE
TABLE PARTITION
LOBSEGMENT
TABLE
INDEX

7 개의 행이 선택되었습니다.

 

 

 

S SYS> select distinct segment_name,owner,segment_type
            from dba_segments
               where tablespace_name='EXAMPLE'
               and segment_type in ('INDEX PARTITION','TABLE PARTITION');

 

 SEGMENT_NAME           OWNER SEGMENT_TYPE
---------------------- ----- ------------------------------------
SALES_TIME_BIX         SH    INDEX PARTITION
SALES_CUST_BIX         SH    INDEX PARTITION
COSTS_TIME_BIX         SH    INDEX PARTITION
SALES_PROD_BIX         SH    INDEX PARTITION
COSTS                  SH    TABLE PARTITION
COSTS_PROD_BIX         SH    INDEX PARTITION
SALES                  SH    TABLE PARTITION
SALES_CHANNEL_BIX      SH    INDEX PARTITION
SALES_PROMO_BIX        SH    INDEX PARTITION

9 개의 행이 선택되었습니다.


 ...미완성..ㅡㅡ;


-Transporting Databases

 

 

+ Recent posts