보통 exp 의 옵션 중에서 compress 가 있는데 디폴트로 yes 입니다.
이 의미는 모든 세그먼트를 하나의 extent로 합치겠다는 의미입니다.
즉 100MB의 테이블이 있는데 extent 수가 100개 였다면
새로 만들어지는 테이블은 100MB ( 또는 보다 큰 )인 하나의
extent로 만들어 집니다. 이 경우 데이타베이스/테이블스페이스/테이블
들이 최소의 공간으로 재구성되는 효과가 있지요.
그래서 같은 크기의 테이블스페이스라도 imp 시에 공간이
부족해서 이런 에러가 종종 발생합니다.
이런 현상을 예방하려면 exp 시에 compress=n 로 하시든가
미리 이전과 동일한 storage parameter를 갖는 세그먼트들을
만들어 두시고 imp 해야 합니다.
그리고 현 상태에서 에러가 발생했다면 만약 이 LOB 테이블의 인덱스만
문제가 된다면 데이타를 truncate 하시고 이 segment만 imp 하면 됩니다.
반드시 imp 이전에 DAMEIL 테이블스페이스의 공간을 늘려주셔야 하구요.
만약 복잡한 constraint 관계가 얽혀있고, 이 LOB 세그먼트가 다른 테이블들에
참조되고 있다면 다른 데이타도 Parent key 가 존재 하지 않으므로
imp가 복잡한 양상으로 꼬일 수도 있습니다.
이럴 경우는 에러를 보고 모든 에러를 없애 주어야 하는데,
간단하게 하려면 모든 것을 없애고 처음부터 compress=n 로
exp/imp를 다시 하는 것이 속편하지요.
8/24일에 다음 내용을 추가합니다.
바로 위에서 compress=n 로 하시면 당연히 exp/imp는 편리하지만
만약 많은 유저가 사용하는 큰 DB라면 DB reorg 하시는 것이
좋습니다.
즉 조금 불편하더라도 세그먼트들의 상태를 살펴서 Strorage Parameter를
재조정하고 먼저 세그먼트들을 적당하게 만들어 준 후에
imp 하시는 것이 성능 향상과 Storage 관리에 좋습니다.
참고하세요.
::문태준 님께서 쓰시길::
> IMP-00058: ORACLE error 1691 encountered
> ORA-01691: unable to extend lob segment YSGUY.SYS_LOB0000002996C00013$$ by 48753 in tablespace D
> AMEIL
> IMP-00028: partial import of previous table rolled back: 179858 rows rolled back
> Import terminated successfully with warnings.
>
> 위의 내용을 보고 oerr 가지고 확인을 해보았습니다. 다음과 같더군요.
>
>
> [oracle@db2 oracle]$ oerr imp 00058
> 00058, 00000, "placeholder for OCI error "
> // *Cause: filler
> // *Action: filler
>
> [oracle@db2 oracle]$ oerr ora 01691
> 01691, 00000, "unable to extend lob segment %s.%s by %s in tablespace %s"
> // *Cause: Failed to allocate an extent for lob segment in tablespace.
> // *Action: Use ALTER TABLESPACE ADD DATAFILE statement to add one or more
> // files to the tablespace indicated.
>
> [oracle@db2 oracle]$ oerr imp 00028
> 00028, 00000, "partial import of previous table rolled back: %lu rows rolled back"
> // *Cause: Import encountered an Oracle error while trying to import a table.
> // *Action: Look up the accompanying Oracle message in the ORA message
> // chapters of this manual and take appropriate action. Then, if
> // necessary, re-import the table.
> //
>
>
> 이 문제는 blob을 저장할 공간이 없다는 말인가요?
>
> 오라클 에러메시지에서도 위 글 이외에는 자세하게 말을 해주는 것이 없네요.
>
> 좀 이상한게 exp한곳과 imp 하는곳이 서버는 다르지만 tablespace는 똑같이 구성을 하였고 크기도 같
> 습니다. 이것을 백업해서 옮기려고 하니 에러가 나서요. 이전에는 잘 되었었는데 최근 갑자기 tablespac
> e의 공간이 늘고나서 옮기려고 하니 이런 문제가 생기네요.
|