oracle导入dmp文件

来源:互联网 发布:php项目管理软件 编辑:程序博客网 时间:2024/06/03 21:04
安装好oracle后,打开对应的SQL plus,然后使用系统用户登录,如:用户名:system 密码:(实例:用户名:system;密码:Aa123456)安装过程中设置的密码,接着按照下面步骤进行导入


1、创建表空间
命令:create tablespace 表空间名 datafile '要创建的文件名' size 空间大小 autoextend on next 每次扩展大小 maxsize 最大空间大小 
实例:
create tablespace TEST datafile 'D:\Oracle\oradata\niu\TEST.dbf' size 1500M autoextend on next 100M maxsize unlimited;

2、创建用户
命令:create user 用户名 identified by 密码 default tablespace 上面创建的目标空间 temporary tablespace temp profile default;
注:最好设置目标空间,如果不设置,则默认为USERS空间,
如命令:create user 用户名 identified by 密码;运行该命令后,则为默认目标空间USERS,建议最好设置目标空间;
实例:
1、create user niu identified by Aa123456 default tablespace CS temporary tablespace temp profile default;
2、alter user niu quota unlimited on CS;

3、为创建的用户赋权限
命令:grant 权限属性 to 用户名;
实例:
grant connect, create session, imp_full_database, alter tablespace to niu;

imp_full_database:给用户全库导入和全库导出的角色权限

4、开始导入dmp文件,打开"开始->运行",输入cmd进入dos界面,输入以下命令
命令:imp 用户名/密码@目标数据库 file=文件名 buffer=大小 log=filename.log full=y
实例:imp niu/Aa123456@niu file=E:\tab_taobao_bill_201211.dmp buffer=819200 log=E:\taobao.log full=y
(目标数据库为安装时配置的数据库名称,默认情况下是:"orcl",可以通过打开“配置和移植工具”中的“Database Configuration Assistant”进行重新创建新的数据库,如实例创建的为:niu)

导入过程中可能出现一些错误,常见的有:
1、用户或者角色 '***' 不存在;
如:IMP-00017: 由于 ORACLE 错误 1917,以下语句失败
“GRANT SELECT ON "TB_CCSTBASICINFO" TO "SDP"”
IMP-00003: 遇到 ORACLE 错误 1917,以下语句失败
ORA-01917: 用户或者角色 'SDP' 不存在
成功终止导入,但出现警告。

则进入SQL plus,使用创建用户命令创建对应用户,并使用赋权限命令对用户进行赋权限;
如:
1、create user SDP identified by Aa123456 default tablespace CS temporary tablespace temp profile default;
2、grant connect, create session, imp_full_database, alter tablespace to SDP;

2、遇到 ORACLE 错误 1950;ORA-01950: 表空间'空间名'中无权限
如:IMP-00003: 遇到 ORACLE 错误 1950
ORA-01950: 表空间'CS'中无权限
成功终止导入,但出现警告。
是因为创建用户时设置用户表空间为CS,但没有为用户授权表空间权限导致;
需要打开SQL plus,使用系统用户登录,输入如下命令(以上述实例为例):

1、conn system/Aa123456 as sysdba;//使用系统用户连接并设置为sysdba,如果不是系统用户则不要添加as sysdba
2、alter user niu quota unlimited on CS;//通过系统用户为niu用户添加CS表空间权限,quota unlimited 表示指标不受限制
如果出现了第一种错误,而创建的用户,可能也需要运行该命令为其设置表空间权限

3、遇到ORA-12899错误,一般情况下是字符集有问题,因为汉字在ZHS16GBK中占2个字节,在UTF8中占3个字节
修改方法:
进入SQL splus终端,输入一下命令修改字符集
conn system/Aa123456 as sysdba;
//若此时数据库服务器已启动,则先执行 SHUTDOWN IMMEDIATE 命令关闭数据库服务器,
shutdown immediate; 
startup mount     
alter session set sql_trace=true; 
alter system enable restricted session; 
alter system set job_queue_processes=0; 
alter system set aq_tm_processes=0; 
alter database open; 
alter database character set ZHS16GBK
ERROR at line 1:ORA-12712: operation cannot execute when other sessions are active
//若出现上面的错误,使用下面的办法进行修改,使用INTERNAL_USE可以跳过超集的检查:
alter database character set INTERNAL_USE ZHS16GBK; --修改字符集AL32UTF8->ZHS16GBK 
shutdown immediate;        --再次关闭数据库 
STARTUP
select * from v$nls_parameters where parameter = 'NLS_CHARACTERSET'; 

KO16KSC5601

4、遇到:
由于ORA-1452错误,以下语句失败:
“CREATE UNIQUE INDEX "PK_CCSTBASICINFO" ON "TB_CCSTBASICINFO ("CUST_ID") PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 1048576 FREELISTS 1 FREE LIST GROUPS 1)”
遇到ORACLE错误 1452,
无法CREATE UNIQUE INDEX;找到重复的关键字

IMP-00003: 遇到 ORACLEtable_name= 错误 1452
ORA-01452: 无法 CREATE UNIQUE INDEX; 找到重复的关键字
IMP-00017: 由于 ORACLE 错误 2437, 以下语句失败:
"ALTER TABLE "TB_CCSTBASICINFO" ADD  CONSTRAINT "PK_CCSTBASICINFO" PRIMARY KEY (""
"CUST_ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 F"
"REELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "PIIAPSPACE" L"
"OGGING ENABLE "
IMP-00003: 遇到 ORACLE 错误 2437
ORA-02437: 无法验证 (TEST.PK_FH_USER_T_QX) - 违反主键
 
这种错误主要是因为有重复数据导致
查找重复数据:
SELECT CUST_ID from TB_CCSTBASICINFO group by CUST_ID having count(CUST_ID)>1;
可以通过删除有重复数据的表;
drop table TB_CCSTBASICINFO;
删除重复数据只留一行
DELETE from 表 WHERE (CUST_ID) IN ( SELECT CUST_ID FROM 表 GROUP BY CUST_ID HAVING COUNT(CUST_ID) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM 表 GROUP BY CUST_ID HAVING COUNT(*) > 1);

5、遇到ORA-01659错误
查看表空间是否已经达到32G大小,如果没有达到可以将表空间大小修改为自动扩展
alter database datafile 'D:\Oracle\oradata\niu\CS.dbf' autoextend on next 100M maxsize unlimited;
如果已达到32G大小:因为oracle数据库的数据文件大小是有限制的,按照Oracle文档的描述,每个datafile的最大容量为(2^22-1)个block,即4194303个block,而当前数据库的block大小是8k,也就是说最大的文件大小是32G,要建大于32G的表空间就会报错,为了解决数据文件大小的问题,Oracle10g专门引入了bigfile tablespace,在bigfile tablespace里Oracle使用32位来存储block号,即比之前增大了1024倍,其最大文件大小从128G增加到128T。当然如果使用bigfile tablespace,则需要注意OS的文件大小限制,如在windows下单个文件最大限制如下:
FAT12           8M   
FAT16           2G     
FAT32           4G   
NTFS            64GB   
NTFS5.0         2TB
命令:
1、先删除之前创建的空间
drop tablespace test_data including contents and datafiles;
2、添加bigfile参数重新创建空间
create bigfile tablespace CS datafile 'D:\Oracle\oradata\niu\CS.dbf' size 1500M autoextend on next 100M maxsize unlimited;


出现错误并修改后,再次运行导入命令,如果运行导入命令时提示:****表已存在,导入失败;则在命令最后添加 ignore=y,用来忽略已经创建的表等;如:
imp niu/Aa123456 file=E:\tab_taobao_bill_201211.dmp buffer=819200 log=filename.log full=y ignore=y







原创粉丝点击