虽然现在Oracle 11g/12c版本不提倡使用LONG数据类型来存储表的大文本数据,但是Oracle本身的许多内部数据字典也还采用LONG类型来存储大文本数据,此外,可能一些历史数据仍然采用LONG类型来存储。

✿ 问题的提出

由于Oracle系统的LONG数据类型是一个特殊的类型,它与BLOB或CLOB等存储原理不同,因此,Oracle并不支持直接对有LONG类型的表的复制,特别是不允许直接使用CREATE TABLE… AS SELECT *这样的CTAS方法对带有LONG数据的表进行复制,那么,该如何复制带LONG类型的表呢?

✿ 实现技术

既然Oracle不支持直接对LONG类型的CTAS方法,那么它就会提供另外的方法来实现跨数据库的表的复制,这个命令就是COPY命令,需要指出的是这里的COPY不是OS命令,而是SQL*Plus命令。

✿ 实现步骤

在SQL*Plus环境下,可用COPY命令复制带有LONG类型的表。COPY命令的语法如下:

COPY {FROM database | TO database | FROM database TO database}
{APPEND|CREATE|INSERT|REPLACE} destination_table [(column,column, column, ...)]
USING query

下面例子是远程复制一个带有LONG类型的表的过程。

SQL> COPY FROM [email protected] TO [email protected]
REPLACE WESTEMPLOYEES
USING SELECT * FROM EMPLOYEES

✿ 说明

在许多的应用数据迁移当中,经常遇到带有LONG类型的表,在进行复制前,建议从数据字典来查询哪些表带有LONG数据类型,然后采用COPY方法统一复制这些表的数据到新环境的Oracle系统中。