导出导入Oracle的一点总结

来源:互联网 发布:三好街数据恢复 编辑:程序博客网 时间:2024/06/14 23:39

下午,公司要进行压力测试。本来打算从一台数据库服务器上测试的,可是后来由于表结构太旧了,因此决定从另外一台服务器上新建一个用户来访问。因此需要导出一份最新的数据库,然后导入。

当然,遇到的问题多的是了。

需要从Oracle10g的数据库导出一份dmp文件,然后导入到Oracle11g的数据库中。

最初的做法是,从Oracle11g的服务器上,写exp命令,用11g的客户端导出一份10g的文件,结果开始报错:

ORA-00904: "POLTYP": invalid identifier

然后开始上网搜,确定是版本的问题。Oracle导入导出有一定规则:

由于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.


从第二条可解决我的问题,从高版本exp出的,低版本无法imp。但低版本exp的文件,高版本可以imp。

因此,我使用本机的10g客户端,从服务器上,导出了一份dmp。执行命令:

exp jysy/jysy@10.110.1.103/orcl file=d:\exp.dmp 

导出成功!

然后我将文件拷贝到远程数据库服务器上,放到指定目录下,要从服务器上,将该文件导入。

因此,首先需要建对应的表空间,还需要建对应的用户。

因此,需要从数据库服务器上,使用sqlplus命令登录。 切换到 oracle用户,然后在控制台执行 :

sqlplus / as sysdba

问题来了。报错:bash:sqlplus not found 

错误很明显,sqlplus无法被识别为命令。应该是没有配置oracle的环境变量。 系统默认的etc/profile 是给所有用户使用的环境变量,而每个用户在自己的home目录下,都有自己的环境变量 是一个隐藏文件:   .bash_profile

我直接到Oracle的安装目录下去执行该命令算了。因此我想进入到Oracle的命令目录下,如何到达? 查看该进程所在的目录即可:

ps -ef |grep oracle
如此会显示系统所有包含oracle进程描述的 进程信息。从监听这一行可看到:

oracle   11335     1  0 16:26 ?        00:00:00 /home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr LISTENER -inherit

由此找到数据库的bin路径。

然后进入该目录下,执行sqlplus

./sqlplus / as sysdba

原预计应该是进入sqlplus 模式。可是问题出现了,报错:

ORA-12162: TNS:net service name is incorrectly specified

从这篇文章,找到了答案:

ora12162


原来是orcl没有配置。因此我脑子一抽,跟随着这篇文章就做了下去。 顺手把  ORACLE_ID 写成了  export ORACLE_SID=ora11g

如此也可以登录到sqlplus中。

然后开始写建表空间的语句,参照之前的一篇文章:Oracle的两个问题

又开始报错:

oracle not available

用尽了一切办法,始终没解决,大约20分钟后,忽然恍然大悟,我貌似把oracl_sid设置错了!!!!!我应该设置成我自己的啊!!!!!!!

然后改正oracle_sid 执行语句,成功!!

改正这之后,以后的事就都顺理成章了。


按理说,同事在搭建这台测试服务器的时候,应该设置过Oracle的环境变量,可是为什么敲sqlplus不起作用呢? 于是我进入了oracle用户的环境变量。

cat .bash_profile

看到,他也都配置了。

我想了一下,应该是他没有执行 source命令。我执行了一下,再敲sqlplus 识别!

0 0
原创粉丝点击