1.场景描述
今天工作中,同事说建了一个用户,往里面导入数据时提示表空间不存在,建了表空间后,部分仍然导不进去。期望帮忙创建表空间,并指定默认表空间,成功将数据导入。
(1)创建好的用户 是USERS空间的,用户如下:
(2)导入的dmp 是exp方式的备库,导入命令:
imp NH_CPL/SZNX_nh_cpl_03@192.168.3.14/orclpdb1 file=/home/oracle/NH_CPL_20230901_nodata.dmp full=y
(3)导入时报错ORA-00959,如下:
2.解决办法
(1)创建表空间
A.通过以下语句查询表空间、表空间文件的情况:
SELECT * FROM DBA_TABLESPACES; SELECT * FROM DBA_DATA_FILES;
查询结果:
B.创建表空间语句:CPL_DATA 和 NH_CPL_DATA
CREATE TABLESPACE CPL_DATA datafile '/home/u01/app/oracle/oradata/ORCL/orclpdb1/cpl_data001.dbf' size 100M AUTOEXTEND ON
NEXT 20M MAXSIZE UNLIMITED;
CREATE TABLESPACE NH_CPL_DATA datafile '/home/u01/app/oracle/oradata/ORCL/orclpdb1/nh_cpl_data001.dbf' size 100M AUTOEXTEND on;
查询结果:创建成功 ok
(2)给用户分配默认表空间
ALTER USER nh_cpl DEFAULT TABLESPACE NH_CPL_DATA;
查看结果: 默认表空间 改为 NH_CPL_DATA
(3)给用户分配其他表空间
ALTER USER nh_cpl QUOTA UNLIMITED ON CPL_DATA;
查看结果: 另一个表空间 改为 CPL_DATA
或
select * from dba_ts_quotas t where t.username ='NH_CPL';
(4)再次导入
imp NH_CPL/*@192.168.3.14/orclpdb1 file=/home/oracle/NH_CPL_20230901_nodata.dmp full=y
导入时提示:IMP-00032: SQL statement exceeded buffer length
解决:看到有分区表,因此增加参数 buffer=100000000,重新导入
成功,ok.