[zt]跨平臺表空間傳輸 (DB遷移)

tolywang發表於2010-06-24


循序漸進Oracle:跨平臺表空間傳輸

 

需要注意的是,在Oracle 10g之前,資料檔案是不能夠跨平臺傳輸使用的,從Oracle 10g開始,Oracle支援跨平臺的表空間傳輸,這極大地增強了資料遷移的便利性。

1. 位元組順序和平臺

資料檔案所以不能跨平臺,主要是由於不同平臺的位元組順序不同,這是計算機領域由來已久的問題之一,在各種計算機體系結構中,由於對於字、位元組等的儲存機制有所不同,通訊雙方交流的資訊單元(位元、位元組、字、雙字等)應該以什麼樣的順序進行傳送就成了一個問題,如果不達成一致的規則,通訊雙方將無法進行正確的編/譯碼從而導致通訊失敗。

目前在各種體系的計算機中通常採用的位元組儲存機制主要有兩種:Big-Endian和Little-Endian 。
一些作業系統(包括Windows)在低位記憶體地址中存放二進位制資料的最低有效位元組,因此這種系統被稱為Little Endian;一些作業系統(包括Solaris)將最高有效位元組儲存在低位記憶體地址中,因此這種系統被稱為Big Endian。

舉一個簡單點的例子,假如1122這樣一個資料要存入不同系統,對於Little Endian的系統,儲存的順序就是2211,小頭在前;而對於Big Endian的系統來說,儲存順序就是1122,大頭在前,顯然Big Endian更符合我們通常的語言習慣。

那麼跨平臺的問題就出現了,當一個Little Endian的系統試圖從一個Big Endian的系統中讀取資料時,就需要透過轉換,否則不同的位元組順序將導致資料不能被正確讀取。

說明:據考證,Endian這個詞來源於Jonathan Swift在1726年寫的諷刺小說《Gulliver's Travels》(《格利佛遊記》)。該小說在描述Gulliver暢遊小人國時碰到了如下的一個場景。在小人國裡的小人因為非常小(身高6英寸)所以總是碰到一些意想不到的問題。有一次因為對水煮蛋該從大的一端(Big-End)剝開還是小的一端(Little-End)剝開的爭論而引發了一場戰爭,並形成了兩支截然對立的隊伍:支援從Big-End剝開的人Swift就稱作Big-Endians,而支援從Little-End剝開的人就稱作Little-Endians(字尾ian表明的就是支援某種觀點的人)。Endian這個詞由此而來。
清楚了這個問題,接下來就可以來看看Oracle是如何處理這種情況的。

2. 源平臺和目標平臺

首先在遷移之前,需要確認一下源平臺和目標平臺的平臺資訊,這些資訊可以透過檢視v$transportable_platform和v$database檢視聯合查詢得到。
以下是源平臺的資訊:


SQL> col PLATFORM_NAME for a30
SQL> SELECT d.platform_name, endian_format
2 FROM v$transportable_platform. tp, v$database d
3 WHERE tp.platform_name = d.platform_name;
PLATFORM_NAME ENDIAN_FORMAT
------------------------------ --------------
Solaris[tm] OE (64-bit) Big

查詢目標資料庫平臺資訊:


SQL> col platform_name for a40
SQL> SELECT d.platform_name, endian_format
2 FROM v$transportable_platform. tp, v$database d
3 WHERE tp.platform_name = d.platform_name;
PLATFORM_NAME ENDIAN_FORMAT
---------------------------------------- --------------
Microsoft Windows IA (32-bit) Little

看到Windows平臺和Solaris平臺的位元組順序是不同的,Windows是Little-Endian,而Solaris是Big-Endian的。
可以透過資料庫查詢Oracle 10g支援的平臺轉換:

 

SQL> col PLATFORM_NAME for a40
SQL> select * from v$transportable_platform;
PLATFORM_ID PLATFORM_NAME                            ENDIAN_FORMAT
----------- ---------------------------------------- --------------
          1 Solaris[tm] OE (32-bit)                  Big
          2 Solaris[tm] OE (64-bit)                  Big
          7 Microsoft Windows IA (32-bit)            Little
         10 Linux IA (32-bit)                        Little
          6 AIX-Based Systems (64-bit)               Big
          3 HP-UX (64-bit)                           Big
          5 HP Tru64 UNIX                            Little
          4 HP-UX IA (64-bit)                        Big
         11 Linux IA (64-bit)                        Little
         15 HP Open VMS                              Little
          8 Microsoft Windows IA (64-bit)            Little
          9 IBM zSeries Based Linux                  Big
         13 Linux 64-bit for AMD                     Little
         16 Apple Mac OS                             Big
         12 Microsoft Windows 64-bit for AMD         Little
         17 Solaris Operating System (x86)           Little
         18 IBM Power Based Linux                    Big
17 rows selected.

3. 源平臺的匯出及轉換

接下來開始我們的測試,建立一個獨立的自包含表空間,並建立一個測試表:


SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/data2/ora10g/oradata/mars/system01.dbf
/data2/ora10g/oradata/mars/undotbs01.dbf
/data2/ora10g/oradata/mars/sysaux01.dbf
/data2/ora10g/oradata/mars/users01.dbf

SQL> create tablespace trans
2 datafile '/data2/ora10g/oradata/mars/trans.dbf' size 10M;
Tablespace created.

SQL> create user trans identified by trans
2 default tablespace trans;
User created.

SQL> grant connect,resource to trans;
Grant succeeded.

SQL> connect trans/trans
Connected.
SQL> create table test as select * from dict;
Table created.

SQL> select count(*) from test;
COUNT(*)
----------
617


將表空間設定為只讀:


SQL> connect / as sysdba
Connected.
SQL> alter tablespace trans read only;
Tablespace altered.

匯出要傳輸的表空間:


$ exp '/ as sysdba' tablespaces=trans transport_tablespace=y file=exp_trans.dmp

Export: Release 10.2.0.1.0 - Production on Thu Mar 22 16:31:15 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set
Note: table data (rows) will not be exported
About to export transportable tablespace metadata...
For tablespace TRANS ...
. exporting cluster definitions
. exporting table definitions
. . exporting table TEST
. exporting referential integrity constraints
. exporting triggers
. end transportable tablespace metadata export
Export terminated successfully without warnings.


使用RMAN轉換檔案格式:


$ rman target /

Recovery Manager: Release 10.2.0.1.0 - Production on Thu Mar 22 16:34:30 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: MARS (DBID=1034439893)

RMAN> convert tablespace trans
2> to platform. 'Microsoft Windows IA (32-bit)'
3> format '/tmp/%N_%f';

Starting backup at 22-MAR-07
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=140 devtype=DISK
channel ORA_DISK_1: starting datafile conversion
input datafile fno=00005 name=/data2/ora10g/oradata/mars/trans.dbf
converted datafile=/tmp/TRANS_5
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:01
Finished backup at 22-MAR-07


確認匯出檔案已生成:


$ ls -l /tmp/TRANS*
-rw-r----- 1 oracle dba 10493952 Mar 22 16:37 /tmp/TRANS_5

3. 檔案傳輸

透過FTP獲得兩個檔案,注意應該使用二進位制方式傳輸(bin模式):


D:oradataEYGLEDATAFILE>ftp 172.16.33.50
Connected to 172.16.33.50.
220 testdbserver.hurray.com.cn FTP server (SunOS 5.8) ready.
User (172.16.33.50:(none)): gqgai
331 Password required for gqgai.
Password:
230 User gqgai logged in.
ftp> bin
200 Type set to I.
ftp> mget /export/home/oracle/exp_trans.dmp
200 Type set to I.
mget /export/home/oracle/exp_trans.dmp? y
200 PORT command successful.
150 Binary data connection for /export/home/oracle/exp_trans.dmp (172.16.34.89,5006) (3072 bytes).
226 Binary Transfer complete.
ftp: 收到 3072 位元組,用時 0.00Seconds 3072000.00Kbytes/sec.
ftp> mget /tmp/TRANS_5
200 Type set to I.
mget /tmp/TRANS_5? y
200 PORT command successful.
150 Binary data connection for /tmp/TRANS_5 (172.16.34.89,5008) (10493952 bytes).
226 Binary Transfer complete.
ftp: 收到 10493952 位元組,用時 1.13Seconds 9270.28Kbytes/sec.

4. 目標資料庫的匯入

在目標資料庫中,也可以使用RMAN對備份檔案進行轉換,以使資料檔案具有更規範的名稱:


D:oradataEYGLEDATAFILE>rman target /

恢復管理器: Release 10.2.0.1.0 - Production on 星期四 3月 22 17:18:50 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.

連線到目標資料庫: EYGLE (DBID=1417824532)

RMAN> convert datafile 'D:oradataEYGLEDATAFILETRANS_5'
2> db_file_name_convert
3> 'D:oradataEYGLEDATAFILETRANS_5','D:oradataEYGLEDATAFILETRANS01.DBF';

啟動 backup 於 22-3月 -07
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=144 devtype=DISK
通道 ORA_DISK_1: 啟動資料檔案轉換
輸出檔名=D:ORADATAEYGLEDATAFILETRANS_5
已轉換的資料檔案 = D:ORADATAEYGLEDATAFILETRANS01.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:08
完成 backup 於 22-3月 -07
然後需要在目標資料庫建立相應的使用者:
SQL> create user trans identified by trans;
使用者已建立。

SQL> grant connect,resource to trans;
授權成功。


接下來可以執行匯入:


D:oradataEYGLEDATAFILE>imp '/ as sysdba' tablespaces=trans transport_tablespace=y file=exp_trans.dmp

datafiles=D:oradataEYGLEDATAFILETRANS01.DBF

Import: Release 10.2.0.1.0 - Production on 星期四 3月 22 17:34:27 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.

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

經由常規路徑由 EXPORT:V10.02.01 建立的匯出檔案
即將匯入可傳輸的表空間後設資料...
已經完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的匯入
. 正在將 SYS 的物件匯入到 SYS
. 正在將 SYS 的物件匯入到 SYS
. 正在將 TRANS 的物件匯入到 TRANS
. . 正在匯入表 "TEST"
. 正在將 SYS 的物件匯入到 SYS
成功終止匯入, 沒有出現警告。


注意:此處也可以在IMP時透過fromuser/touser引數將資料匯入其他使用者下。
現在這個表空間已經被插入到新的資料庫中,並且資料全部傳輸過來:


SQL> select name from v$datafile;
NAME
------------------------------------------------------------
D:ORADATAEYGLEDATAFILEO1_MF_SYSTEM_2G8OHFX6_.DBF
D:ORADATAEYGLEDATAFILEO1_MF_UNDOTBS1_2G8OJ6NB_.DBF
D:ORADATAEYGLEDATAFILEO1_MF_SYSAUX_2G8OJHP9_.DBF
D:ORADATAEYGLEDATAFILEO1_MF_USERS_2G8OJYYS_.DBF
D:ORADATAEYGLEDATAFILEO1_MF_EYGLE_2YDGSVH7_.DBF
D:ORADATAEYGLEDATAFILETRANS01.DBF
已選擇6行。

SQL> select count(*) from trans.test;
COUNT(*)
----------
617


匯入後的表空間還處於read only狀態,確認後可以更改為讀寫模式:


SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
EYGLE ONLINE
TRANS READ ONLY
已選擇7行。

SQL> alter tablespace trans read write;
表空間已更改。


同樣,傳輸表空間也可以透過資料泵來完成,以下是Oracle 10gR1中插入表空間的簡單示例:


E:Oracleoradataeygledpdata>impdp eygle/eygle dumpfile=trans.dmp directory=dpdata

transport_datafiles='E:OracleoradataeygleEYGLEDATAFILETRANS01.DBF'

Import: Release 10.1.0.2.0 - Production on 星期二, 27 4月, 2004 15:03
Copyright (c) 2003, Oracle. All rights reserved.

連線到: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
已成功載入/解除安裝了主表 "EYGLE"."SYS_IMPORT_TRANSPORTABLE_01"
啟動 "EYGLE"."SYS_IMPORT_TRANSPORTABLE_01": eygle/******** dumpfile=trans.dmp directory=dpdata transport_datafiles='E:
OracleoradataeygleEYGLEDATAFILETRANS01.DBF'
處理物件型別 TRANSPORTABLE_EXPORT/PLUGTS_BLK
處理物件型別 TRANSPORTABLE_EXPORT/TABLE
處理物件型別 TRANSPORTABLE_EXPORT/TTE_POSTINST/PLUGTS_BLK
作業 "EYGLE"."SYS_IMPORT_TRANSPORTABLE_01" 已於 15:03 成功完成


5. 同位元組序檔案的跨平臺

前面說過,當一個Little Endian的系統試圖從一個Big Endian的系統中讀取資料時,就需要透過轉換,否則不同的位元組順序將導致資料不

能被正確讀取。那麼另外一個問題出現了,如果位元組序相同的平臺進行檔案互動,資料能否被正確讀取呢?

理論上的確是可以的,但是由於在不同的平臺上作業系統會在資料檔案頭寫上系統資訊,這部分資訊無法跨越平臺,所以仍然會導致跨平臺

的檔案無法被資料庫正確識別(Oracle10g中同位元組序平臺資料檔案頭不再存在跨平臺的遷移問題)。

接下來讓我們透過Windows和Linux平臺來進行一個跨平臺測試,相信透過這個測試可以對以上提出的問題作出一個很好的回答。
實驗環境:Windows XP + Oracle10g 10.2.0.1:


SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

Red Hat Enterprise Linux AS release 3 + Oracle 9iR2 9.2.0.4


SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production

看一下Linux平臺,檔案頭被作業系統保留了8192位元組:


SQL> select file_name,bytes from dba_data_files
2 where tablespace_name='USERS';
FILE_NAME BYTES
----------------------------------- ----------
/opt/oracle/oradata/eygle/users.dbf 10485760

SQL> !
[oracle@jumper eygle]$ ll users.dbf
-rw-r----- 1 oracle dba 10493952 Mar 23 10:14 users.dbf
[oracle@jumper eygle]$ exit
exit

SQL> select 10493952 -10485760 diff from dual;
DIFF
----------
8192


Windows平臺上資料檔案頭同樣保留了8192位元組:


SQL> select file_name,bytes from dba_data_files
2 where tablespace_name='USERS';
FILE_NAME BYTES
--------------------------------------------------- ----------
D:ORADATAEYGLEDATAFILEO1_MF_USERS_2G8OJYYS_.DBF 5242880

SQL> host dir D:ORADATAEYGLEDATAFILEO1_MF_USERS_2G8OJYYS_.DBF
驅動器 D 中的卷是 PRIVAT
卷的序列號是 94B0-FD3B

D:ORADATAEYGLEDATAFILE 的目錄

2007-03-22 17:41 5,251,072 O1_MF_USERS_2G8OJYYS_.DBF
1 個檔案 5,251,072 位元組
0 個目錄 1,635,913,728 可用位元組
SQL> select 5251072 -5242880 diff from dual;
DIFF
----------
8192


可以透過Linux和Windows平臺來進行一個小測試實驗,這兩個平臺都是Little Endian的系統:


SQL> select * from v$transportable_platform;

PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- ---------------------------------------- --------------
1 Solaris[tm] OE (32-bit) Big
2 Solaris[tm] OE (64-bit) Big
7 Microsoft Windows IA (32-bit) Little
10 Linux IA (32-bit) Little
............
17 rows selected.


首先在Linux下Oracle 9204中建立一個測試表空間:


[oracle@jumper oracle]$ cd oradata/eygle
[oracle@jumper eygle]$ sqlplus "/ as sysdba"
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production

SQL> create tablespace eyglee datafile size 10M;
Tablespace created.


建立測試使用者並建立一個測試表:


SQL> create user eyglee identified by eyglee default tablespace eyglee;
User created.

SQL> grant connect,resource to eyglee;
Grant succeeded.

SQL> connect eyglee/eyglee
Connected.
SQL> create table eyglee as select * from dict;
Table created.

SQL> select count(*) from eyglee;
COUNT(*)
----------
477


將表空間設定為只讀:


SQL> connect / as sysdba
Connected.

SQL> alter tablespace eyglee read only;
Tablespace altered.

SQL> select file_name from dba_data_files where tablespace_name='EYGLEE';
FILE_NAME
------------------------------------------------------------
/opt/oracle/oradata/eygle/o1_mf_eyglee_309yc9gr_.dbf


壓縮檔案以方便傳輸:


[oracle@jumper eygle]$ tar -cvf eyglee.tar o1_mf_eyglee_309yc9gr_.dbf
o1_mf_eyglee_309yc9gr_.dbf
[oracle@jumper eygle]$ gzip eyglee.tar

匯出表空間:


[oracle@jumper eygle]$ exp '/ as sysdba' tablespaces=eyglee transport_tablespace=y file=trans_eyglee.dmp

Export: Release 9.2.0.4.0 - Production on Sat Mar 24 18:17:32 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production
Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set
Note: table data (rows) will not be exported
About to export transportable tablespace metadata...
For tablespace EYGLEE ...
. exporting cluster definitions
. exporting table definitions
. . exporting table EYGLEE
. exporting referential integrity constraints
. exporting triggers
. end transportable tablespace metadata export
Export terminated successfully without warnings.

[oracle@jumper eygle]$ ll *eyglee*
-rw-r--r-- 1 oracle dba 32985 Mar 24 18:14 eyglee.tar.gz
-rw-r----- 1 oracle dba 10493952 Mar 24 18:13 o1_mf_eyglee_309yc9gr_.dbf
-rw-r--r-- 1 oracle dba 16384 Mar 24 18:17 trans_eyglee.dmp


傳輸檔案到Windows平臺:


D:oradataEYGLEDATAFILE>dir *eyglee*
D:oradataEYGLEDATAFILE 的目錄

2007-03-24 18:21 32,985 eyglee.tar.gz
2007-03-24 18:21 16,384 trans_eyglee.dmp

D:oradataEYGLEDATAFILE>gzip -d eyglee.tar.gz
D:oradataEYGLEDATAFILE>tar -xvf eyglee.tar
tar: blocksize = 20
x o1_mf_eyglee_309yc9gr_.dbf, 10493952 bytes, 20496 tape blocks


在Windows上建立新使用者:


SQL> create user eyglee identified by eyglee;
使用者已建立。

SQL> grant connect ,resource to eyglee;
授權成功。


如果此時匯入會出現ORA-00600錯誤:


D:oradataEYGLEDATAFILE>imp '/ as sysdba' tablespaces=eyglee transport_tablespace=y file=trans_eyglee.dmp

datafiles=d:oradataEYGLEDATAFILEo1_mf_eyglee_309yc9gr_.dbf

Import: Release 10.2.0.1.0 - Production on 星期六 3月 24 18:59:23 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.

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

經由常規路徑由 EXPORT:V09.02.00 建立的匯出檔案
即將匯入可傳輸的表空間後設資料...
已經完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的匯入
. 正在將 SYS 的物件匯入到 SYS
. 正在將 SYS 的物件匯入到 SYS
IMP-00017: 由於 ORACLE 錯誤 600, 以下語句失敗:
"BEGIN sys.dbms_plugts.beginImpTablespace('EYGLEE',9,'SYS',1,0,8192,1,1899"
"6106462,1,2147483645,8,128,8,0,1,0,8,1407686520,1,1,18996106397,NULL,0,0,NU"
"LL,NULL); END;"
IMP-00003: 遇到 ORACLE 錯誤 600
ORA-00600: 內部錯誤程式碼, 引數: [krhcvt_filhdr_v10_01], [], [], [], [], [], [], []
ORA-06512: 在 "SYS.DBMS_PLUGTS", line 1801
ORA-06512: 在 line 1
IMP-00000: 未成功終止匯入


其中"引數: [krhcvt_filhdr_v10_01]"提示指檔案頭無法正確識別。
可以透過對這個檔案進行一個特殊操作,為檔案更換一個Windows下資料檔案的檔案頭,則資料檔案就應該能夠被資料庫識別。以下是這個"

小手術"操作的過程。
首先提取一個Windows資料檔案頭:


D:oradataEYGLEDATAFILE>dd if=O1_MF_USERS_2G8OJYYS_.DBF f=header.dbf bs=8192 count=1
1+0 records in
1+0 records out

然後去除Linux下的資料檔案頭:


D:oradataEYGLEDATAFILE>dd if=o1_mf_eyglee_309yc9gr_.dbf f=eyglee.dbf bs=8192 skip=1
1280+0 records in
1280+0 records out

最後將這兩個檔案合二為一:


D:oradataEYGLEDATAFILE>copy /b header.dbf+eyglee.dbf eygleee.dbf
header.dbf
eyglee.dbf
已複製 1 個檔案。

現在擁有的新檔案eygleee.dbf就具有了一個Windows平臺的檔案頭以及Linux下的"檔案身"。
至此這個檔案就能夠被Windows上的Oracle識別了,可以執行匯入操作:


D:oradataEYGLEDATAFILE>imp '/ as sysdba' tablespaces=eyglee transport_tablespace=y file=trans_eyglee.dmp

datafiles=d:oradataEYGLEDATAFILEeygleee.dbf

Import: Release 10.2.0.1.0 - Production on 星期六 3月 24 19:22:13 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.

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

經由常規路徑由 EXPORT:V09.02.00 建立的匯出檔案
即將匯入可傳輸的表空間後設資料...
已經完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的匯入
. 正在將 SYS 的物件匯入到 SYS
. 正在將 SYS 的物件匯入到 SYS
. 正在將 EYGLEE 的物件匯入到 EYGLEE
. . 正在匯入表 "EYGLEE"
成功終止匯入, 沒有出現警告。


此時資料已經能夠被正確識別:


SQL> connect eyglee/eyglee
已連線。
SQL> select count(*) from eyglee;

COUNT(*)
----------
477


最後將表空間更改為讀寫模式,可以進行正常的資料操作:


SQL> connect / as sysdba
已連線。
SQL> alter tablespace eyglee read write;
表空間已更改。
SQL> connect eyglee/eyglee
已連線。
SQL> insert into eyglee select * from eyglee;
已建立477行。
SQL> insert into eyglee select * from eyglee;
已建立954行。
SQL> insert into eyglee select * from eyglee;
已建立1908行。
SQL> commit;
提交完成。
SQL> select count(*) from eyglee;
COUNT(*)
----------
3816

透過這個實驗,還可以得出另外一個結論,Oracle 9i的資料檔案可以透過表空間傳輸遷移到Oracle 10g中使用。

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

相關文章