当前位置:网站首页>记录一次将dmp文件导入oracle数据库(本地导线上),所遇到的问题及解决方法

记录一次将dmp文件导入oracle数据库(本地导线上),所遇到的问题及解决方法

2022-06-09 04:31:00 if时光重来

安装oracle环境(instantclient)

因线上已安装oracle完成版数据库,则本地只需安装instantclient即可进行导入数据操作
具体安装步骤请参考:https://blog.csdn.net/admin_web/article/details/125103786

使用navicat工具查看oracle数据

打开navicat工具后在菜单栏中选择 文件->新建连接->oracle,输入连接的地址、端口、服务名、用户名密码。
服务名是安装oracle时设置的,默认是ORCL
在这里插入图片描述
如需使用sysdba用户选择高级后将角色选择为sysdba
在这里插入图片描述

准备开始导入工作

1.登录到线上服务器oracle数据库,使用sqlplus / as sysdba超管角色进入后新建表空间、用户以及分配给用户分配权限
创建表空间

(表空间每次自增200m)

create tablespace MY_TAB datafile 'D:\oracle\oradata\DANTE_TEMP.DBF' size 4096M AUTOEXTEND ON NEXT 200M

给同一个表空间配置多个存储文件

-- 根据需要添加一定数量的数据文件
alter tablespace MY_TAB add datafile 'D:\oracle\oradata\DANTE_TEMP2.dbf' size 320m autoextend ON next 100 m maxsize unlimited;
alter tablespace MY_TAB add datafile 'D:\oracle\oradata\DANTE_TEMP3.dbf' size 300m autoextend ON next 100 m maxsize unlimited;
alter tablespace MY_TAB add datafile 'D:\oracle\oradata\DANTE_TEMP4.dbf' size 300m autoextend ON next 100 m maxsize unlimited;

创建用户并为其分配表空间

create user mytest(用户名) identified by 123456(密码) default tablespace MY_TAB(表空间名);

给用户分配权限

GRANT CONNECT,RESOURCE,DBA TO c##mytest;

Connect 角色
是授予最终用户的典型权利,最基本的权利,能够连接到Oracle数据库中,并在对其他用户的表有访问权限时,做SELECT、UPDATE、INSERTT等操作。

Alter session–修改会话;

Create cluster–建立聚簇;

Create database link–建立数据库连接;

Create sequence–建立序列;

Create session–建立会话;

Create synonym–建立同义词;

Create view–建立视图。

Resoure角色
是授予开发人员的,能在自己的方案中创建表、序列、视图等。

Create cluster–建立聚簇;

Create procedure–建立过程;

Create sequence—建立序列;

Create table–建表;

Create trigger–建立促发器;

Create type–建立类型。

DBA角色
是授予系统管理员的,拥有该角色的用户就能成为系统管理员了,它拥有所有的系统权限。

2.使用imp命令将本地dmp文件导入至线上oracle中
使用imp -help命令可查看所有参数
imp 用户名/密码@ip地址:端口号/服务名 file=需导入的dmp文件 full=y indexes=N log=日志 statistics=none

full=y :导入文件全部数据,
indexes=N :是否导入表索引 N否 Y是,默认Y
rows=N : 导入数据行 (Y) ,N只导入表结构
statistics=none : 不导入或者重新统计数据库统计信息
DATA_ONLY=Y :只导入数据

imp mytest/[email protected]:1521/ORCL file=D:\upload_file\orcl1.dmp full=y indexes=N log=D:\upload_file\orcl.log statistics=none

只导出表机构

exp mytest/[email protected]/orcl file=D:\tablejg.sql rows=n  //导出表结构

使用bat批量将dmp文件导入至服务器
如图:将需导入的dmp文件放置同一目录中
在这里插入图片描述
a.bat

@echo off

setlocal EnableDelayedExpansion
set localPath=./
set host=xx.x.xx.xxx
set user=mytest
set pwd=123456
set num=0

for /r %localPath% %%i in (*.dmp) do (
    set /a num+=1
    imp %user%/%pwd%@%host%/ORCL file=%%i full=y statistics=none indexes=N DATA_ONLY=Y log=%localPath%\!num!_s2.log
)


pause

导入时所遇到的问题

问题------------

在这里插入图片描述
原因分析:经过查询,发现这个错误发生的原因在于数据库统计信息。但是更深层次的原因,还不清楚。暂时理解的是,由于默认的导入策略是statistics=always,这个策略要求的是一定要导入原先的数据库统计信息,这个策略,还是觉得有点问题,数据库统计信息,由于是使用了新的数据库版本,原先的统计信息,基本上80%左右的统计信息应该是不正确的,所以为什么导入策略还要默认是statistics=always呢。所以,我的决定是不导入或者重新统计数据库统计信息。
参考:https://blog.csdn.net/weixin_35986494/article/details/116441481
解决方法:在导入是加上statistics=none

问题------------
在这里插入图片描述
原因分析:可能是由于权限或者导入的dmp文件中的表字段和服务器上的表字段不一致(我所遇到的是后者)
解决方法:
1.统一需要的表字段后重新导出
2.将缺少的字段追加到导入的数据表中,如上图:将"DATASRC"字段追加到导入的表中

原网站

版权声明
本文为[if时光重来]所创,转载请带上原文链接,感谢
https://blog.csdn.net/admin_web/article/details/125183798