【LOB】使用資料泵時 LOB 欄位存放位置

xysoul_雲龍發表於2017-09-29

在遷移過程中,我們很多時候透過資料泵方式遷移(expdp/impdp),方便快捷,那麼如果涉及到含有LOB欄位的表呢,他們是怎麼存放呢?

下面 我們就做一個簡單的測試,測試環境,Oracle11.2.0.4, redhat6.7 x64

建立一個含有lob欄位的表,如下:


點選( 此處)摺疊或開啟

  1. SQL > conn test / test
  2. Connected .
  3. SQL > Create table testlob ( A number , B clob ) LOB ( b ) STORE AS ( TABLESPACE users );    --注意,此處已指定表空間為USERS(當然,不建議使用USERS表空間,這裡僅僅測試 )

  4. Table created .

  5. SQL > insert into testlob select object_id ,object_name from dba_objects where object_id is not null ;

  6. 86387 rows created .

  7. SQL > commit ;

  8. Commit complete .

檢視一下相關資訊, TESTLOB表對應的表空間為TEST   其lob欄位所在表空間為USERS

點選( 此處)摺疊或開啟

  1. SQL > set lines 2000
  2. SQL > col owner for a15
  3. SQL > col table_name for a15
  4. SQL > col column_name for a10
  5. SQL > col segment_name for a15
  6. SQL > col index_name for a15
  7. SQL > select owner ,table_name ,column_name ,segment_name ,index_name ,tablespace_name from dba_lobs where table_name = 'TESTLOB' ;

  8. OWNER           TABLE_NAME      COLUMN_NAM SEGMENT_NAME    INDEX_NAME      TABLESPACE_NAME
  9. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  10. TEST TESTLOB         B          SYS_LOB00000880 SYS_IL000008802 USERS
  11.                                            26C00002$$      6C00002$$


  12. SQL >
  13. SQL > select table_name ,owner ,tablespace_name from dba_tables where table_name = 'TESTLOB' ;

  14. TABLE_NAME      OWNER           TABLESPACE_NAME
  15. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  16. TESTLOB TEST TEST


在當前庫中建立一個新的表空間FIRSOULER,使用者FIRSOULER

並執行匯入匯出操作

點選( 此處)摺疊或開啟

  1. oracle@mystandby dump ] $ expdp test / test directory =sh_dmp DUMPFILE =testlob_ddl .dmp tables =testlob logfile =testlob .log content =METADATA_ONLY

  2. Export : Release 11 .2 .0 .4 .0 - Production on Fri Sep 29 15 :32 :00 2017

  3. Copyright (c ) 1982 , 2011 , Oracle and / or its affiliates . All rights reserved .

  4. Connected to : Oracle Database 11g Enterprise Edition Release 11 .2 .0 .4 .0 - 64bit Production
  5. With the Partitioning , OLAP , Data Mining and Real Application Testing options
  6. Starting "TEST" . "SYS_EXPORT_TABLE_01" : test / * * * * * * * * directory =sh_dmp DUMPFILE =testlob_ddl .dmp tables =testlob logfile =testlob .log content =METADATA_ONLY
  7. Processing object type TABLE_EXPORT/TABLE/TABLE
  8. Master table "TEST" . "SYS_EXPORT_TABLE_01" successfully loaded/unloaded
  9. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  10. Dump file set for TEST .SYS_EXPORT_TABLE_01 is :
  11.   /backup/dump/testlob_ddl .dmp
  12. Job "TEST" . "SYS_EXPORT_TABLE_01" successfully completed at Fri Sep 29 15 :32 :11 2017 elapsed 0 00 :00 :11


下面生成建表語句:

點選( 此處)摺疊或開啟

  1. [oracle@mystandby dump ] $ impdp firsouler/abc  directory =sh_dmp dumpfile =testlob .dmp sqlfile =testlob01 .sql

  2. Import : Release 11 .2 .0 .4 .0 - Production on Fri Sep 29 15 :33 :52 2017

  3. Copyright (c ) 1982 , 2011 , Oracle and / or its affiliates . All rights reserved .

  4. Connected to : Oracle Database 11g Enterprise Edition Release 11 .2 .0 .4 .0 - 64bit Production
  5. With the Partitioning , OLAP , Data Mining and Real Application Testing options
  6. Master table "FIRSOULER" . "SYS_SQL_FILE_FULL_01" successfully loaded/unloaded
  7. Starting "FIRSOULER" . "SYS_SQL_FILE_FULL_01" : firsouler/ * * * * * * * * directory =sh_dmp dumpfile =testlob .dmp sqlfile =testlob01 .sql
  8. Processing object type TABLE_EXPORT/TABLE/TABLE
  9. Job "FIRSOULER" . "SYS_SQL_FILE_FULL_01" successfully completed at Fri Sep 29 15 :33 :54 2017 elapsed 0 00 :00 :01

LOB 還是原來的表空間

點選( 此處)摺疊或開啟

  1. CREATE TABLE "TEST" . "TESTLOB"
  2.     ( "A" NUMBER ,
  3.          "B" CLOB
  4.     ) SEGMENT CREATION IMMEDIATE
  5.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  6.  NOCOMPRESS LOGGING
  7.   STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  8.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  9.   BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT )
  10.   TABLESPACE "TEST"
  11.  LOB ( "B" ) STORE AS BASICFILE (
  12.   TABLESPACE "FIRSOULER" ENABLE STORAGE IN ROW CHUNK 8192
  13.   NOCACHE LOGGING
  14.   STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  15.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  16.   BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT ) )


下面再測試一下,lob使用預設表空間情況;

點選( 此處)摺疊或開啟

  1. SQL > conn test / test
  2. Connected .
  3. SQL >
  4. SQL >
  5. SQL > Create table testlob (A number , B clob ) LOB (b ) STORE AS (enable storage in row ) ;

  6. Table created .

  7. SQL > insert into testlob select object_id ,object_name from dba_objects where object_id is not null ;

  8. 86390 rows created .

  9. SQL > commit ;

  10. Commit complete .

  11. SQL > set lines 2000
  12. SQL > col owner for a15
  13. SQL > col table_name for a15
  14. SQL > col column_name for a10
  15. SQL > col segment_name for a15
  16. SQL > col index_name for a15
  17. SQL > select owner ,table_name ,column_name ,segment_name ,index_name ,tablespace_name from dba_lobs where table_name = 'TESTLOB' ;

  18. OWNER           TABLE_NAME      COLUMN_NAM SEGMENT_NAME    INDEX_NAME      TABLESPACE_NAME
  19. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  20. TEST TESTLOB         B          SYS_LOB00000882 SYS_IL000008821 TEST
  21.                                            13C00002$$      3C00002$$


  22. SQL >
  23. SQL > select table_name ,owner ,tablespace_name from dba_tables where table_name = 'TESTLOB' ;

  24. TABLE_NAME      OWNER           TABLESPACE_NAME
  25. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  26. TESTLOB TEST TEST


檢視建表語句,如下,在建立lob欄位表時,如果預設,那麼後續在遷移也會找當時的預設表空間:

點選( 此處)摺疊或開啟

  1. [oracle@mystandby dump ] $ impdp firsouler/abc  directory =sh_dmp dumpfile =testlob01 .dmp sqlfile =testlob001 .sql

  2. Import : Release 11 .2 .0 .4 .0 - Production on Fri Sep 29 15 :42 :11 2017

  3. Copyright (c ) 1982 , 2011 , Oracle and / or its affiliates . All rights reserved .

  4. Connected to : Oracle Database 11g Enterprise Edition Release 11 .2 .0 .4 .0 - 64bit Production
  5. With the Partitioning , OLAP , Data Mining and Real Application Testing options
  6. Master table "FIRSOULER" . "SYS_SQL_FILE_FULL_01" successfully loaded/unloaded
  7. Starting "FIRSOULER" . "SYS_SQL_FILE_FULL_01" : firsouler/ * * * * * * * * directory =sh_dmp dumpfile =testlob01 .dmp sqlfile =testlob001 .sql
  8. Processing object type TABLE_EXPORT/TABLE/TABLE
  9. Job "FIRSOULER" . "SYS_SQL_FILE_FULL_01" successfully completed at Fri Sep 29 15 :42 :13 2017 elapsed 0 00 :00 :01

  10. [oracle@mystandby dump ] $ cat testlob001 .sql
  11. - - CONNECT FIRSOULER
  12. ALTER SESSION SET EVENTS '10150 TRACE NAME CONTEXT FOREVER, LEVEL 1' ;
  13. ALTER SESSION SET EVENTS '10904 TRACE NAME CONTEXT FOREVER, LEVEL 1' ;
  14. ALTER SESSION SET EVENTS '25475 TRACE NAME CONTEXT FOREVER, LEVEL 1' ;
  15. ALTER SESSION SET EVENTS '10407 TRACE NAME CONTEXT FOREVER, LEVEL 1' ;
  16. ALTER SESSION SET EVENTS '10851 TRACE NAME CONTEXT FOREVER, LEVEL 1' ;
  17. ALTER SESSION SET EVENTS '22830 TRACE NAME CONTEXT FOREVER, LEVEL 192 ' ;
  18. - - new object type path : TABLE_EXPORT/TABLE/TABLE
  19. CREATE TABLE "TEST" . "TESTLOB"
  20.     ( "A" NUMBER ,
  21.          "B" CLOB
  22.     ) SEGMENT CREATION IMMEDIATE
  23.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  24.  NOCOMPRESS LOGGING
  25.   STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  26.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  27.   BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT )
  28.   TABLESPACE "TEST"
  29.  LOB ( "B" ) STORE AS BASICFILE (
  30.   TABLESPACE "TEST" ENABLE STORAGE IN ROW CHUNK 8192
  31.   NOCACHE LOGGING
  32.   STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  33.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  34.   BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT ) ) ;
  35. [oracle@mystandby dump ] $



簡單測試,提醒,在遷移過程中,一定確認lob欄位所在表空間

下面是沒有LOB欄位所在表空間的情況

點選( 此處)摺疊或開啟

  1. [oracle@mystandby dump ] $ impdp firsouler/abc directory =sh_dmp dumpfile =testlob01 .dmp remap_tablespace =firsouler : test logfile =implob .log

  2. Import : Release 11 .2 .0 .4 .0 - Production on Fri Sep 29 15 :52 :58 2017

  3. Copyright (c ) 1982 , 2011 , Oracle and / or its affiliates . All rights reserved .

  4. Connected to : Oracle Database 11g Enterprise Edition Release 11 .2 .0 .4 .0 - 64bit Production
  5. With the Partitioning , OLAP , Data Mining and Real Application Testing options
  6. ORA -31626 : job does not exist
  7. ORA -31633 : unable to create master table "FIRSOULER.SYS_IMPORT_FULL_05"
  8. ORA -06512 : at "SYS.DBMS_SYS_ERROR" , line 95
  9. ORA -06512 : at "SYS.KUPV$FT" , line 1038
  10. ORA -00959 : tablespace 'FIRSOULER' does not exist


那麼改變表空間呢,透過expdp  remap_tablespace 改變,lob也會改變。原來LOB    欄位在USERS表空間中,表的表空間為TEST表空間


點選( 此處)摺疊或開啟

  1. [oracle@mystandby dump ] $ impdp firsouler/abc  directory =sh_dmp dumpfile =testlob01 .dmp remap_schema = test :firsouler remap_tablespace = test :firsouler sqlfile =testlob001 .sql

  2. Import : Release 11 .2 .0 .4 .0 - Production on Fri Sep 29 16 :04 :23 2017

  3. Copyright (c ) 1982 , 2011 , Oracle and / or its affiliates . All rights reserved .

  4. Connected to : Oracle Database 11g Enterprise Edition Release 11 .2 .0 .4 .0 - 64bit Production
  5. With the Partitioning , OLAP , Data Mining and Real Application Testing options
  6. Master table "FIRSOULER" . "SYS_SQL_FILE_FULL_01" successfully loaded/unloaded
  7. Starting "FIRSOULER" . "SYS_SQL_FILE_FULL_01" : firsouler/ * * * * * * * * directory =sh_dmp dumpfile =testlob01 .dmp remap_schema = test :firsouler remap_tablespace = test :firsouler sqlfile =testlob001 .sql
  8. Processing object type TABLE_EXPORT/TABLE/TABLE
  9. Job "FIRSOULER" . "SYS_SQL_FILE_FULL_01" successfully completed at Fri Sep 29 16 :04 :25 2017 elapsed 0 00 :00 :01

  10. [oracle@mystandby dump ] $ cat testlob0
  11. testlob001 .sql  testlob01 .dmp
  12. [oracle@mystandby dump ] $ cat testlob001 .sql
  13. - - CONNECT FIRSOULER
  14. ALTER SESSION SET EVENTS '10150 TRACE NAME CONTEXT FOREVER, LEVEL 1' ;
  15. ALTER SESSION SET EVENTS '10904 TRACE NAME CONTEXT FOREVER, LEVEL 1' ;
  16. ALTER SESSION SET EVENTS '25475 TRACE NAME CONTEXT FOREVER, LEVEL 1' ;
  17. ALTER SESSION SET EVENTS '10407 TRACE NAME CONTEXT FOREVER, LEVEL 1' ;
  18. ALTER SESSION SET EVENTS '10851 TRACE NAME CONTEXT FOREVER, LEVEL 1' ;
  19. ALTER SESSION SET EVENTS '22830 TRACE NAME CONTEXT FOREVER, LEVEL 192 ' ;
  20. - - new object type path : TABLE_EXPORT/TABLE/TABLE
  21. CREATE TABLE "FIRSOULER" . "TESTLOB"
  22.     ( "A" NUMBER ,
  23.          "B" CLOB
  24.     ) SEGMENT CREATION IMMEDIATE
  25.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  26.  NOCOMPRESS LOGGING
  27.   STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  28.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  29.   BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT )
  30.   TABLESPACE "FIRSOULER"
  31.  LOB ( "B" ) STORE AS BASICFILE (
  32.   TABLESPACE "FIRSOULER" ENABLE STORAGE IN ROW CHUNK 8192
  33.   NOCACHE LOGGING
  34.   STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  35.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  36.   BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT ) )










來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29487349/viewspace-2145607/,如需轉載,請註明出處,否則將追究法律責任。

相關文章