Oracle 在两个数据库之间导出导入视图(表)

        约束条件:其他部门提供了Oracle数据库接口,用户user001仅仅具有查询几个视图的权限。

        需求:把这个几个视图,按照某种条件导出数据,导入到我部署的Oracle数据库中,以便做进一步的处理。

一、通过exp和imp命令来处理

        需要具备exp和imp命令的权限,视图用户一般不具备这样的权限。

二、在PLSQL中,用文本导入工具——推荐

        查询视图,导出查询结果为CSV

        按照导出的字段,在我的数据库建设一个表,字段定义要跟CSV一致,字段类型可以在PLSQL中看到(单击某一个记录即可)

        点击PLSQL工具中的 文本导入器,选择 CSV,选择数据库用户和表名,点击导入。

       速度比较慢,一个小时才能导入100万条数据左右。

三、在PLSQL中,用SQL文件的形式导入——比较繁杂,不推荐

       select出视图,保存为SQL文件,再用导入工具之SQL插入导入我的数据库。

1.在PL/SQL里面通过select查询一个结果,选择导出为SQL格式,大概1.05G大小。

2. 由于sql文件太大,通过命令窗口导入失败(命令窗口不能插入太大数据)

3.采用SQL*PLUS命令导入,其中SQL*PLUS可执行文件在这里:

E:\app\aganliang\product\12.1.0\dbhome_1\BIN\sqlplus.exe

4.点击导入,出现这个错误:

Ora-00942:table or view does not exist

原因分析:导出的是这个用户的视图,所以导出文件里面包括了视图的名字和默认用户。

所以,需要先创建这个表:USER01.V_ YYJK_WG

create table USER01.V_YYJK_WG (

      SYSTEMID varchar2(50) not null,

      SSXZQHDM varchar2(20),

      SSXZJDDM varchar2(20),     

      XGSJ DATE

)

提示还没有这个用户:USER01

那就创建这个用户:

--创建USER01用户:

CREATE USER PCS_DZK_GZIDENTIFIED BY 123

DEFAULT TABLESPACE"MY_001"    -----表空间名字一定要大写

TEMPORARY TABLESPACE"TEMP"

QUOTA UNLIMITED ON"MY_001";

--赋予权限管理权限

GRANT CREATE SESSION,

CREATE TABLE,

CREATE VIEW,

CREATE PROCEDURE,

CREATE SEQUENCE,

CREATE TRIGGER,

CREATE TYPE,

CREATE INDEXTYPE,

CREATE LIBRARY,

CREATE PUBLIC SYNONYM,

DROP PUBLIC SYNONYM,

ADMINISTER DATABASE TRIGGER,

CREATE OPERATOR

TO USER01;

grant dba to USER01;

grant imp_full_database to USER01;

grant exp_full_databaseto  USER01;

 grant connect,resourceto  USER01;

再次点击导入,出现这个界面:

5.一段时间(大概30分钟),出现这个错误:表空间不够?

6.那就给这个用户修改另外一个表空间:

重新创建表空间:MY_002

create tablespace my_002datafile 'E:\app\aganliang\oradata\GZGA_GIS\DATAFILE\MY_002.DBF' 

size 1024Mautoextend on next 2000m;

修改USER01的默认表空间

alter user USER01 defaulttablespace MY_002;

7.依然报上面那个错,这个表为啥还是写入表空间MY_001?

暂时不知道原有的情况下,那就给MY_001扩展空间:

增加表空间的数据文件,并允许自动增加

alter tablespace my_001 adddatafile

'E:\app\aganliang\oradata\GZGA_GIS\DATAFILE\MY_001_1.DBF'size

1024M autoextend on next1000m

8.再次点击导入,导入成功

导入的这个表属于用户USER01,用户的默认表空间是MY_002,但是这个表挂接在表空间MY_001下面,什么原因?

分析:

我们创建用户USER01的语句是:

CREATE USER PCS_DZK_GZIDENTIFIED BY 123

DEFAULT TABLESPACE"MY_001"   

TEMPORARY TABLESPACE "TEMP"

QUOTA UNLIMITED ON"MY_001";

虽然后来这样修改:alter user USER01default tablespace MY_002

但是用户USER01依然QUOTA UNLIMITED ON"MY_001" !!!

Quota的意思是:限制用户对表空间的使用。Unlimited即是无限制,所以,它依然使用表空间MY_001

猜你喜欢

转载自blog.csdn.net/aganliang/article/details/80915976