Oracle导入导出

来源:互联网 发布:广州公交线路查询软件 编辑:程序博客网 时间:2024/06/03 20:57

前置条件:在Redhat7下安装并配置好Oracle,本文主要从新建用户,远程连接Oracle数据库,以及Oracle的导入导出三个方面进行阐释。

新建Oracle用户

命令如下:

sqlplus /nologconn /as sysdbastartupcreate user ynbytms identified by ynbytms

授权

粗授权:grant connect to ynbytms. grant resource to ynbytms
细授权:
1. select 'grant select on '|| tname ||' to rptuser ;' from tab;
(当前用户有dba权限如system或者sysdba,执行输出脚本)
2. select 'grant select on user.' || tname || ' to rptuser;' from tab;
(当前用户无dba权限也就是scott用户,用system或者sysdba用户执行输出脚本)
3. 执行输出脚本

远程连接Oracle数据库

安装pl/sql developer 客户端,安装步骤参见:http://blog.csdn.net/mr_li13/article/details/52226006
配置tnsnames.ora文件

MYTMS =    (DESCRIPTION =    (ADDRESS_LIST =      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.60.128 )(PORT = 1521))    )    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = DBDW)    )  ) 

重新启动pl/sql developer进行连接,输入用户名密码之后,点击OK,出现TNS连接超时问题。

解决TNS连接超时

  1. 查看服务器连接是否连通 ping 192.168.60.128
  2. Linux下的数据库服务器的监听是否开启。lsnrctl status,如果没有开启则使用开启命令 lsnrctl start
  3. 查看1521端口是否开放,两种方法:windows下通过telnet [服务器地址] [端口号] 查看;Linux 通过查看防火墙规则 sudo iptables -L -n 查看1521端口是否开放。

Linux开放端口

如果连接不上数据库服务,在排除其他线路,监听情况下,如果是服务器未开放端口,则需要开放端口。
1. 检查iptables状态 service iptables status 或者查看iptables 版本 iptables --version
2. 如果iptables不存在,则需要安装iptables .在root用户下键入命令 yum install iptables,并设置开机启动systemctl enable iptables
3. 如果显示Failed to start iptables.service: Unit iptables.service failed to load: No such file or directory. 则安装iptables-services,命令 yum install iptables-services
4. 键入规则 vim /etc/sysconfig/iptables
添加 -A INPUT -p tcp -m state –state NEW -m tcp –dport 1521 -j ACCEPT
5. 开机启动 systemctl enable iptables
6. 重新启动 service iptables restart
7. 查看防火墙规则 iptables -L -n
8. 用户pl/sql developer 进行连接,如果报TNS:无监听程序错误,由下面方法进行解决

解决无监听程序

  1. 查看监听运行情况 lsnrctl status
  2. 启动监听 lsnrctl start
  3. 重新用pl/sql developer 进行连接

现在已经能够成功从pl/sql developer远程连接到数据库了,下面讲述如何从之前的数据库中导出数据,并导入到新的数据库

Oracle数据库导入导出

导出数据库可以从 pl/sql developer Tool->export tables进行选择导出,也可以通过命令行进行导出,这里主要是用命令行进行导出和导入备份

导出命令

在windows下
exp 用户名/密码@源数据库地址:端口号/数据库实例 file=d:\backup\tmp.dmp tables=(表1,表2,…)

导入命令

imp 用户名/密码@目标数据库地址:端口号/数据库实例 file=d:\backup\tmp.dmp full=y

编码问题

遇到最坑的就是编码问题了,由于源数据库的编码和目标数据库的编码不一致,导致导入的数据中文显示错误,或者用中文作为查询条件无法成功,这里使用简单粗暴的解决方法如下:
1. 查看源数据库编码,在源数据库上执行 select * from sys.nls_database_parameters;
2. 查看目标数据库编码,在目标数据库上执行 select * from sys.nls_database_parameters;
3. 如果源数据库的NLS_CHARACTERSET和目标数据库的NLS_CHARACTERSET字段不一致,则修改目标数据库NLS_CHARACTERSET字段

修改目标数据库NLS_CHARACTERSET字段

在目标数据库服务器上执行

SQL> SHUTDOWN IMMEDIATE;SQL> STARTUP MOUNT;SQL> ALTER SESSION SET SQL_TRACE=TRUE;SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;SQL> ALTER DATABASE OPEN;SQL> set linesize 120;SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;SQL> select * from v$nls_parameters;

其中ZHS16GBK是我的目标数据库上的NLS_CHARACTERSET字段