《循序渐进Oracle》第一章连载-之九

《循序渐进Oracle》第一章连载-之九

作者: eygle | English Version 【转载时请以超链接形式标明文章 出处和作者信息及 本声明】
链接: http://www.eygle.com/archives/2007/08/stepbs_oracle_chp1_09.html
站内相关文章|Related Articles
《循序渐进Oracle》一书及相关信息
《循序渐进Oracle》再次重印
《循序渐进Oracle》一书重印
《循序渐进Oracle》之后写什么?
《循序渐进Oracle》一书序言

1.3.6跨平台表空间传输

需要注意的是,在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:/oradata/EYGLE/DATAFILE>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:/oradata/EYGLE/DATAFILE>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:/oradata/EYGLE/DATAFILE/TRANS_5'
2> db_file_name_convert
3> 'D:/oradata/EYGLE/DATAFILE/TRANS_5','D:/oradata/EYGLE/DATAFILE/TRANS01.DBF';

启动 backup 于 22-3月 -07
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=144 devtype=DISK
通道 ORA_DISK_1: 启动数据文件转换
输出文件名=D:/ORADATA/EYGLE/DATAFILE/TRANS_5
已转换的数据文件 = D:/ORADATA/EYGLE/DATAFILE/TRANS01.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:/oradata/EYGLE/DATAFILE>imp '/ as sysdba' tablespaces=trans transport_tablespace=y file=exp_trans.dmp datafiles=D:/oradata/EYGLE/DATAFILE/TRANS01.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:/ORADATA/EYGLE/DATAFILE/O1_MF_SYSTEM_2G8OHFX6_.DBF
D:/ORADATA/EYGLE/DATAFILE/O1_MF_UNDOTBS1_2G8OJ6NB_.DBF
D:/ORADATA/EYGLE/DATAFILE/O1_MF_SYSAUX_2G8OJHP9_.DBF
D:/ORADATA/EYGLE/DATAFILE/O1_MF_USERS_2G8OJYYS_.DBF
D:/ORADATA/EYGLE/DATAFILE/O1_MF_EYGLE_2YDGSVH7_.DBF
D:/ORADATA/EYGLE/DATAFILE/TRANS01.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:/Oracle/oradata/eygle/dpdata>impdp eygle/eygle dumpfile=trans.dmp directory=dpdata transport_datafiles='E:/Oracle/oradata/eygle/EYGLE/DATAFILE/TRANS01.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:/
Oracle/oradata/eygle/EYGLE/DATAFILE/TRANS01.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:/ORADATA/EYGLE/DATAFILE/O1_MF_USERS_2G8OJYYS_.DBF 5242880

SQL> host dir D:/ORADATA/EYGLE/DATAFILE/O1_MF_USERS_2G8OJYYS_.DBF
驱动器 D 中的卷是 PRIVAT
卷的序列号是 94B0-FD3B

D:/ORADATA/EYGLE/DATAFILE 的目录

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:/oradata/EYGLE/DATAFILE>dir *eyglee*
D:/oradata/EYGLE/DATAFILE 的目录

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

D:/oradata/EYGLE/DATAFILE>gzip -d eyglee.tar.gz
D:/oradata/EYGLE/DATAFILE>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:/oradata/EYGLE/DATAFILE>imp '/ as sysdba' tablespaces=eyglee transport_tablespace=y file=trans_eyglee.dmp datafiles=d:/oradata/EYGLE/DATAFILE/o1_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:/oradata/EYGLE/DATAFILE>dd if=O1_MF_USERS_2G8OJYYS_.DBF of=header.dbf bs=8192 count=1
1+0 records in
1+0 records out

然后去除Linux下的数据文件头:

D:/oradata/EYGLE/DATAFILE>dd if=o1_mf_eyglee_309yc9gr_.dbf of=eyglee.dbf bs=8192 skip=1
1280+0 records in
1280+0 records out

最后将这两个文件合二为一:

D:/oradata/EYGLE/DATAFILE>copy /b header.dbf+eyglee.dbf eygleee.dbf
header.dbf
eyglee.dbf
已复制 1 个文件。

现在拥有的新文件eygleee.dbf就具有了一个Windows平台的文件头以及Linux下的"文件身"。
至此这个文件就能够被Windows上的Oracle识别了,可以执行导入操作:

D:/oradata/EYGLE/DATAFILE>imp '/ as sysdba' tablespaces=eyglee transport_tablespace=y file=trans_eyglee.dmp datafiles=d:/oradata/EYGLE/DATAFILE/eygleee.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中使用。


历史上的今天...
      >> 2006-08-03文章:
              任何伟大的网站都死过至少一次
      >> 2005-08-03文章:
              Google与DBA
              Oracle10gR2中一些新特性
              Oracle9i安装make错误解决一例
              GreenBrowser开源
------
这篇 【 《循序渐进Oracle》第一章连载-之九】来自 www.eygle.com | CSDN技术网摘| del.icio.us| 365Key

你可能感兴趣的:(数据库)