oracle 导入数据库imp导入问题总结 |
您所在的位置:网站首页 › oracle导入dmp文件报错12514 › oracle 导入数据库imp导入问题总结 |
一、导入命令 1、单个文件导入 imp hn_dw/hn_dw file=/home/oracle/test.dmp log=/home/oracle/test.log full=y commit=y ignore=y imp hn_dw/hn_dw (用户名/密码 )file=/home/oracle/test.dmp(文件路径) log=/home/oracle/test.log(日志路径) full=y commit=y ignore=y 参数解释: 2、多个文件导入 imp hn_dw/hn_dw file=\(test01.dmp,test02.dmp,test03.dmp\) log=hn_log/test.log full=y commit=y ignore=y imp hn_dw/hn_dw(用户名/密码) file=\(test01.dmp,test02.dmp,test03.dmp\) (多个文件)log=hn_log/test.log full=y commit=y ignore=y 二、查看表空间使用率 SELECT a.tablespace_name "表空间名", total "表空间大小", free "表空间剩余大小", (total - free) "表空间使用大小", total / (1024 * 1024 * 1024) "表空间大小(G)", free / (1024 * 1024 * 1024) "表空间剩余大小(G)", (total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)", round((total - free) / total, 4) * 100 "使用率 %" FROM (SELECT tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) a, (SELECT tablespace_name, SUM(bytes) total FROM dba_data_files GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name 三、查看表空间数据文件 1、输入命令bai: sqlplus / as sysdba 2、select t1.name,t2.name ?from v$tablespace t1,v$datafile t2 where t1.ts# = t2.ts#; 四、扩充表空间 alter tablespace PARTNER_DBS add datafile '/home/orcl/app/oracle/product/12.1.0_1sscms1.dbf' size 24576m 表空间名:PARTNER_DBS 表空间数据文件路径: /home/orcl/app/oracle/product/12.1.0/db_1/PARTNER_DBS .DBF 2、查看表空间是否开启了自动扩展的功能 SELECT T.TABLESPACE_NAME, D.FILE_NAME, D.AUTOEXTENSIBLE, D.BYTES, D.MAXBYTES, D.STATUS FROM DBA_TABLESPACES T, DBA_DATA_FILES D WHERE T.TABLESPACE_NAME = D.TABLESPACE_NAME ORDER BY TABLESPACE_NAME, FILE_NAME; 3、扩大表空间的四种方法: 1、增加数据文件 ALTER TABLESPACE ***_TRD ADD DATAFILE ‘D:\Oracle\PRODUCT\10.2.0\ORADATA\DBFILE\TRD_2.DBF’ SIZE 1024M; 2、增加数据文件并允许自动增长 ALTER TABLESPACE ***_TRD ADD DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DBFILE\TRD_2.DBF’ SIZE 1024M AUTOEXTEND ON NEXT 8M MAXSIZE 10240M; 3、允许已存在的数据文件自动增长 ALTER DATABASE DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DBFILE\TRD.DBF’ AUTOEXTEND ON NEXT 8M MAXSIZE 10240M; 4、手工改变已存在数据文件的大小 ALTER DATABASE DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DBFILE\TRD.DBF’ RESIZE 10240M; 五、查看oracle用户下所有表 select * from dba_tables where owner in ('用户名'); 或者当前用户 select * from user_tables; 六、覆盖之前的表数据 oracle10g之后impdp的table_exists_action参数 impdp username/password table_exists_action=truncate directory=DATA_PUMP_DIR dumpfile=expdpfilename.dmp logfile=implog.log table_exists_action: skip 是如果已存在表,则跳过并处理下一个对象; append是为表增加数据; truncate是截断表,然后为其增加新数据; replace是删除已存在表,重新建表并追加数据; 注:使用imp命令导入的话ignore=y就是覆盖; 七、如何查看dmp文件是哪个用户导出 1、打开dmp文件 找关键词CONNECT 后面的bai就是对方的用户名,执行imp userid=用户名/密码@orcl fromuser=原来的旧用户 touser=新的用户file=d:\xxxx.dmp命令成功导入,已执行检测过。 八、删除oracle用户 - 查询用户各进程相对应的 sid、serial#。 -- 注意: username 必须大写 SELECT sid,serial#,username FROM v$session WHERE username = 'AAA'; -- 根据上面的查询结果,将用户占用的所有进程杀掉。 --注意: sid 与 serial# ALTER SYSTEM KILL SESSION 'xxx, xxx'; -- 删除用户 DROP USER test1 CASCADE; 九、查看oracle数据库版本 1)select* from v$version; 2)select * from product_component_version; 3)set serveroutput on; exec dbms_output.put_line(dbms_db_version.version); 十、导入导出详细步骤 注:导入导出之前都要先查看字符集:echo $NLS_LANG 1,expdp导入导出需要创建导入导出目录: sqlplus / as sysdba create or replace directory test as '/home/oracle/dmp'; exit 2,expdp" '/as sysdba' " directory=test schemas=platform dumpfile=platform_UAT_YYYYMMDD.dmp logfile=platform_UAT_YYYYMMDD.log version=11.2.0.1.0(高版本到低版本需要设置版本号) 3,导入时候把.dmp文件放到/home/oracle/dmp/test下 4,断开所有应用连接,跟PLSQL连接,保证当前数据库没有客户端在连接 5,dba角色用户登陆,sqlplus / as sysdba 6,删除用户 drop user platform cascade; 7,退出sqlplus exit 8,导入之前先查看字符集 echo $NLS_LANG,如果字符集为空,则根据情况自行导入字符集 export NLS_LANG = american_america.ZHS16GBK 9,最后导入dmp文件 impdp " '/as sysdba' " directory=test cluster = no dumpflie=platform_UAT_YYYYMMDD.dmp logfile=platform_YYYYMMDD-imp.log 如果导入失败,则使用下列方法: impdp " '/as sysdba' " directory=test dumpflie=platform_UAT_YYYYMMDD.dmp logfile=platform_YYYYMMDD-imp.log remap_schema=SOURCE_USER:platform 使用exp,imp命令导入导出不需要指定directory 1,导入导出之前都要先查看字符集:echo $NLS_LANG 2,exp platform/[email protected]:1521/tysys owner=platform file=platform_YYYYMMDD.dmp 3 , imp platform/[email protected]:1521/tysys full=y file=platform_YYYYMMDD.dmp ignore=y 4,如果遇到无法导入的情况,则执行创建用户,赋与connect,resource权限,dba角色 sqlplus / as sysdba create user platform identified by platform default tablespace platform Temporary TABLESPACE Temp; grant connect,resource,dba to platform; exit; 5,重复导入exp文件即可。 十一、权限 1、授予权限 1、默认的普通用户SCOTT默认未解锁,不能进行那个使用,新建的用户也没有任何权限,必须授予权限 --授予 XIMING 用户创建SESSION的权限,即登陆权限,允许用户登录数据库 GRANT CREATE SESSION TO XIMING; --授予XIMING用户使用表空间的权限 GRANT UNLIMITED TABLESPACE TO XIMING; --授予创建表的权限 GRANT CREATE TABLE TO XIMING; --授予删除表的权限 GRANTE DROP TABLE TO XIMING; --插入表的权限 GRANT INSERT TABLE TO XIMING; --修改表的权限 GRANT UPDATE TABLE TO XIMING; --这条比较重要,授予所有权限(ALL)给所有用户(PUBLIC) GRANT ALL TO PUBLIC; 2、ORALCE对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权 GRANT SELECT ON TABLENAME TO XIMING;--授予XIMING用户查看指定表的权限 GRANT DROP ON TABLENAME TO XIMING;--授予删除表的权限 GRANT INSERT ON TABLENAME TO XIMING;--授予插入的权限 GRANT UPDATE ON TABLENAME TO XIMING;--授予修改表的权限 GRANT INSERT(ID) ON TABLENAME TO XIMING; --授予对指定表特定字段的插入和修改权限,注意,只能是INSERT和UPDATE GRANT UPDATE(ID) ON TABLENAME TO XIMING; GRANT ALERT ALL TABLE TO XIMING;--授予XIMING用户ALERT任意表的权限 2、撤销权限 基本语法同GRANT,关键字为REVOKE 3、查看权限 SELECT * FROM USER_SYS_PRIVS;--查看当前用户所有权限 SELECT * FROM USER_TAB_PRIVS;--查看所用用户对表的权限 4、操作表的用户的表 SELECT * FROM XIMING.(用户.表明); 5、权限传递 即用户A将权限授予B,B可以将操作的权限再授予C,命令如下: GRANT ALERT TABLE ON TABLENAME TO XIMING WITH ADMIN OPTION;--关键字 WITH ADMIN OPTION GRANT ALERT TABLE ON TABLENAME TO XIMING WITH GRANT OPTION;--关键字 WITH GRANT OPTION效果和ADMIN类似 十二、更新有用户名和密码 select user#,name from user$ where name='旧用户名' update user$ set name='新用户民' where user#=? ; 参数 commit; alter user 旧用户名 identified by "新用户名"; commit; alter system checkpoint; alter system flush shared_pool; 十三、报错 1、IMP-00017: following statement failed with ORACLE error 959: 原因:在导入数据库文件时,有一张表未导入成功,报了如下错误: IMP-00003: 遇到 ORACLE 错误 959 ORA-00959: 表空间 'XXXXXXXXXXX' 不存在。 ORA-00959: ??? 'PARTNER_DBS' ??? (注:PARTNER_DBS这个表空间不存在) 查询的确没有对应的表空间: select * from dba_data_files where tablespace_name = 'XXXX' 解决:添加上对应的表空间,再重新导入: create tablespace emaoyi logging datafile 'D:\app\Administrator\product\11.2.0\dbhome_1\database\emaoyi.dbf' size 10m autoextend on next 10m maxsize 20480m extent management local; 注: 表空间自增长,其大小也不会超过最大大小,因此在设置大小时可以将MAXSIZE 设置为unlimited; 2、IMP-00085: multiple input files specified for unbounded export file 为无界导出文件指定了多个输入文件 *原因:在导出的时候一个表因为过大,所以分成几个dmp文件导出,所以在导入的时候注意,要用多个文件一起的命令格式导入,文件要完整且名称要准确。我在导入三个文件时报错,然后转义一下就可以了。命令如下: 解决:imp 用户名/密码 file=\(文件01.dmp,文件02.dmp\) log=hn_log/日志名称.log full=y commit=y ignore=y 3、IMP-00003: ORACLE error 942 encountered ORA-00942: ??????? 原因:1.表或视图真的不存在 2.用户没有访问该表的权限。 GRANT SELECT ON TABLENAME TO XIMING;--授予XIMING用户查看指定表的权限 GRANT DROP ON TABLENAME TO XIMING;--授予删除表的权限 GRANT INSERT ON TABLENAME TO XIMING;--授予插入的权限 GRANT UPDATE ON TABLENAME TO XIMING;--授予修改表的权限 GRANT INSERT(ID) ON TABLENAME TO XIMING; 解决:给用授予权限 4、ORA-02437: ???? (HN_DW.SYS_C0054645) - ???? 原因:创建表示没有添加主键,当表中存在很多重复数据时,此时再添加主键就会报这个错误。所以,设计表的时候一定要注意! 解决:先找出表中重复的数据,然后删除相同数据rowid最小的那一列 5、IMP-00093: Inconsistency between dumpfile constraint definition for table PNR_INSPECT_PLAN_ITEM with columns ("ID") 原因:起因是在导入的过程中要导入系统生成的约束,类似SYS_C0027639, metalink上只提到了这个原因,但是以前很多次的imp应该都是有这样系统生成的约束名,并没有报错过,所以应该还是有另外的因素参杂其中的,比如统计信息的生成。没有继续研究。 解决:在imp时使用indexes=no或statistics=none参数,当然后者比较好一些。 6、ORA-01000 解决:而是IMP-00093,只是由于太多的IMP-00093错误消耗了大量的cursor,导致一个session中的cursor数超过了定义的300,所以在最后就开始报ORA-01000错误了 7、ORA-00001: ???????? (HN_DW.PK_PNR_LINE_LOCUS) 原因:UPDATE或INSERT语句试图插入重复的键 解决:删除唯一约束限制或不插入重复值。 8、IMP-00009: abnormal end of export file 原因:这中情况通常是因为导出文件异常,当导如最后发现异常时,会回退所有操作。 9、ORA-01653: ? HN_DW.TBL_WORKORDER_USER_REPLY ???? 1024 (???? DAIWEIDBS ?) ?? 原因:表空间不足 解决:扩充表空间
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |