公司一个项目需要使用Oracle数据库,平时mysql用习惯了,这一换还有点蒙。
公司网络不好,需要在本地搭一个Oracle服务,选择了11g xe,主要是小。
下面整理了一下两种导出导入数据库的过程:
1、使用Navicat软件转储sql文件、执行sql文件方法(不好,容易存在外键问题和字符串长度超过4000无法导入问题)
2、使用exp、imp命令导出导入(推荐)
一、使用Navicat导出导入过程:
1、选择公司Oracle数据库模式,右键转储sql文件结构和数据,获得sql文件
2、本地数据库用sys登陆,创建一个sumengnan用户,赋予一些创建表、连接的权限
3、在sumengnan模式下导入公司Oracle的sql文件时报错,提示表空间不存在
解决办法:在菜单栏选择其他-表空间-新建表空间。
之后在用户-编辑用户-配额处为sumengnan用户,配置表空间
4、导入公司Oracle的sql文件时报错,又提示ORA-01950对表空间"system"无权限。
解决办法:在用户-编辑用户-服务器权限处为sumengnan用户,配置create session、create table和create tablespace权限
5、导入完成。
二、使用exp、imp命令导出导入过程:
开始导出:
1、远程Oracle数据库导出方式有两种(需要sys角色):
⑴添加远程TNS。在tnsnames.ora文件中添加如下
remote =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 远程主机地址)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
然后执行tnsping remote命令,检测是否能连接。
执行命令:exp sys/123@remote file=d:\sumengnan.dmp owner=sumengnan;
⑵执行命令:exp sys/123@192.168.1.100:1521/orcl file=d:\sumengnan.dmp owner=sumengnan;(这个更简单,不需要添加远程TNS,推荐)
2、执行远程导出数据库命令,提示身份证明检索失败。
解决办法:oracle\product\11.2.0\server\network\ADMIN\sqlnet.ora这个文件内容NTS改为NONE。(验证方式)
NTS表示采用本地操作系统认证,NONE表示将采用口令文件方式认证。
3、用sys登录提示connection as SYS should be as SYSDBA or SYSOPER(表示sys账号需要SYSDBA or SYSOPER角色)
解决办法:exp 'sys/123@192.168.1.100:1521/orcl as sysdba' file=d:\sumengnan.dmp owner=sumengnan;(加上 as sysdba)(owner表示用户)
4、导出时提示ORACLE 错误 904 ORA-00904: "MAXSIZE": 标识符无效
原因:Oracle不能从低版本向高版本导数据。公司的是10,本地是11.
由于Oracle的imp/exp组件的操作原则--向下兼容,且有一些规则:
规则1:低版本的exp/imp可以连接到高版本(或同版本)的数据库服务器,但高版本的exp/imp不能连接到低版本的数据库服务器;
规则2:高版本exp出的dmp文件,低版本无法imp(无法识别dmp文件);低版本exp出的dmp文件,高版本可以imp(向下兼容);
规则3:从Oracle 低版本Export的数据可以Import到Oracle高版本中,但限于Oracle的相邻版本,如从Oracle 10 到 Oracle 11.对于两个不相邻版本间进行转换,如从Oracle 9 到 Oracle 11,则应先将数据输入到中间版本-Oracle 10,再从中间数据库转入更高版本Oracle 11.
据此,最快捷的解决方案就是使用安装了10g Oracle 的机子,进行服务器上数据库数据的导出。
5、无奈去另一台win10电脑下载了64位的10g(下载地址在下面),安装时提示检查操作系统版本: 必须是5.1 or 5.2。 实际为 6.1。
解决办法:修改\database\install\oraparam.ini文件,把Windows=5.1,5.2改成Windows=6.1。
6、安装时10g设置完密码后又提示“安装oracle10g“程序异常终止。发生内部错误。请将以下文件提供给oracle技术支持 部门”
解决办法:安装程序setup.exe文件,需要用兼容模式xp sp3模式运行。
7、不过出现了一个意外,win10电脑没有xp sp3兼容模式。
解决办法:下载一个虚拟机,安装xp系统。
8、虚拟机安装完xp之后,在系统上运行Oracle10g setup.exe安装程序,提示不是有效的win32
解决办法:应该下载32位的Oracle 10g(直接使用了上面下载的64位的10g)
执行第3步命令,导出成功了,拷贝到本地电脑桌面
开始导入:
9、先查询公司数据库用户sumengnan使用的表空间(一般情况只有一个)。
命令:select tablespace_name from dba_tables t WHERE t.owner='sumengnan' group by t.tablespace_name
10、首先需要在本地创建好sumengnan用户和表空间
创建表空间命令:create tablespace sumengnan_data(表空间名称) datafile 'e:\oracle\oradata\test\data_1.dbf'(表空间文件) size 1000M(表空间大小);
创建用户命令:create user sumengnan identified by 123456 default tablespace sumengnan_data;(用户sumengnan,密码123456 默认表空间 sumengnan_data)
赋予权限命令:grant connect, resource to sumengnan ;(赋予sumengnan连接Oracle和创建表的权限)
11、开始导入数据,执行命令:imp 'sys/123@XE as sysdba' file=C:\Users\sumengnan\Desktop\SUMENGNAN.DMP full=y时提示:“无法打开 EXPDAT.DMP 进行读取”.
原因:c盘没有权限,换到其他盘,如d盘。
注意:如果服务器和本地两端用户名不相同,则执行:imp 'sys/123@XE as sysdba' file=C:\Users\sumengnan\Desktop\SUMENGNAN.DMP fromuser=sumengnan touser=sumengnan2
fromuser就是把当前的dmp文件中的某一个用户下的数据取出。
touser就是把现在dmp文件中的数据导入到目标库的指定user下。
12、切换盘后导入又提示:“导入时由于对象已存在, 下列语句失败: ”
解决办法:imp导入命令添加参数 ignore=y
13、导入完成
碰到的其他问题:
1、修改Oracle安装时默认8080端口
命令:
begin
dbms_xdb.sethttpport('8081');
dbms_xdb.setftpport('0');
end;
2、删除用户提示“必须指定 CASCADE 以删除 'sumengnan'”
解决办法:drop user sumengnan cascade;(因为这个数据库只有这一个用户,删了就没有用户关联了,所以需要用 cascade,把没有关联的整个数据库也删掉。)
附:
导出导入imp、exp命令参数:
参数参考地址:https://blog.csdn.net/fghsfeyhdf/article/details/79807690
参数参考地址:https://www.cnblogs.com/weiwenpeng/p/10345419.html
xp迅雷下载地址:thunder://QUFodHRwOi8vc29mdC51c2Fpa2EuY24vstnX98+1zbMvd2luZG93cy9XaW5kb3dzWFAvVkwtSW1hZ2UvTVNETi96aC1oYW5zX3dpbmRvd3NfeHBfcHJvZmVzc2lvbmFsX3dpdGhfc2VydmljZV9wYWNrXzNfeDg2X2NkX3ZsX3gxNC03NDA3MC5pc29aWg== 序列号:MRX3F-47B9T-2487J-KWKMF-RPWBY
Oracle 10g 32位迅雷下载地址:http://download.oracle.com/otn/nt/oracle10g/10201/10201_database_win32.zip
Oracle 10g 64位迅雷下载地址:http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_database.zip
Oracle 11g xe 64位下载地址:https://download.oracle.com/otn/nt/oracle11g/xe/OracleXE112_Win64.zip?AuthParam=1581570015_b536f613e8fecc7c02ed77c63e8c6944