201903 在无法进行plsql连接时,进行数据库文件的导入导出

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Partner2016/article/details/88197943

啊。我们的一个分发库挂了。
但确切地说,又不是挂了
因为通过本机的命令行方式,sqlplus / as sysdba;或者直接 sqlplus
他会让你输入用户名密码,你输入你常用的普通的用户名和密码,又是可以登录的。
郁闷的是,你就是没法通过plsql连接。
一连接,plsql直接就挂掉了。
要不就是提示:
ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务

我们尝试了监听及oracle服务相关的设置:
在服务中,重启Oracle相关的服务
重启监听(lsnrctl status /start/stop)、重启数据库、重启服务器
还通过 netstat -ano将1521端口对应的进程kill掉,然后重建监听
就是不行。。。

好吧。后来请教了高工,他说,可能是因为服务器上Oracle服务器端跟Oracle客户端对环境变量的设置不同,把系统搞混了,所以,plsql会死掉。

当然,后来事实证明,是因为Oracle在32位Windows操作系统的bug。
tnslisner.log日志满了。
我会在随后的博文(201909)中具体解释这件事。
如果你也遇到了与上述一样的问题,请务必去201909文中看一看吧
该文就作为通过sqlplus连接后导入导出的一个操作示范吧
--2019年3月21日
今天工程师过来,说其实当时新建监听时,如果重新命名一个监听,
在服务中对应的服务也会改一个名字,问题也有可能解决。
但是,我暂时还没法核实。

导出:

那能怎么办?
该数据库没法登了,我总得把里面的数据导出来啊。
于是:
在命令行中,切换到Oracle的主目录的bin文件夹下,然后 sqlplus / as sysdba
然后在 sql> 命令里敲:
host exp Usr/password file=D:\Test\full.dmp log=D:\Test\full.log full=y;

哇,这个命令简直太来之不易了
我一开始敲:
exp Usr/password@sid file=D:\Test\full.dmp log=D:\Test\full.log full=y;
就因为加了这个@sid,提示跟plsql登录时一样的错误提示:
ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
然后在该命令前面添加host,然后去掉@sid 这个,就可以连上并且进行数据的备份了。
当然,如果选定某几张表的话,命令变成:
host exp Usr/password file=D:\Test\full.dmp log=D:\Test\full.log tables=table1,table2

PS:如果我像下文连接中直接在cmd中,不进入sql敲exp命令,就总是会报错。这就跟没法通过plsql连接他,原理一样。
所以,工程师教了关键的一招:
到主目录的bin文件夹下,进入sql命令行模式,再加host。
哇,感觉他厉害到不行。。

转存:

下面,将dmp文件拷贝到目标服务器上。
因为全数据库备份的文件一般都比较大,我这次87.7G
属于超大文件了。
大文件转存详见 201906 和 201907两篇文章。

导入:

在目标服务器上
继续:sqlplus / as sysdba
在sql>命令里敲:
host imp impUsr/imppassword@impsid file=E:\full.dmp log=E:\full.log commit=y ignore=y full=y
如果dmp文件由dba用户导出,而导入的用户不是dba,那么则会报以下的错误:
只需将dba权限赋值给需要导入的用户(impUsr)后,重新导入即可。
赋值语句:
grant dba to impUsr;

这篇文章里介绍EXP和IMP非常到位啊:
https://blog.csdn.net/xuanlv_haoshao/article/details/81126365
其实,就是通过help 查看命令本源的意思
我总是忘记,也总是懒得去学。。。
不是好习惯。。。

猜你喜欢

转载自blog.csdn.net/Partner2016/article/details/88197943
今日推荐