您的位置:首页 > 数据库

【技术支持】开发人员从客户数据库环境中导出数据用户测试的几种方法途径

2016-09-29 16:07 756 查看
以下是一些批量导出的方法:

1、客户是oracle数据库,使用exp/imp导出全量库。

# exp username1/userpwd@ip:port/tnsname file=bak-ip-sid-owner.dmp log=bak<span style="font-family: Arial, Helvetica, sans-serif;">-ip-sid-owner</span><span style="font-family: Arial, Helvetica, sans-serif;">.log owner=username2 rows=y direct=y;  </span>


说明:

1)username1是客户提供的仅有访问权限的用户,username2才是所有者。

2)username1必须具有exp_full_database权限。

3)可以在一台跳板机上执行,只需要详细设置好上述命令的ip和port即可。

4)在linux系统的oracle用户下执行,file和log如果没有设置路径,在保存在oracle用户的家目录下。

2、导出指定表的部分数据。

一般情况下,客户会提供仅有访问权限的用户来访问他们的生产数据库,而且此用户没有exp导出权限,而且鉴于信息安全只能导出部分记录,而且表中含有复杂数据类型无法使用plsql的数据导出功能,那就要使用到spool了。

1)登录到各个DB中,使用如下命令查找库下所有的用户。

select * from all_users;


 USERNAMEUSER_IDCREATED
 SYSTEM12013/7/23 15:28
 SCOTT112013/7/23 15:28
 HR322013/7/23 15:28
2)将查询结果导出到excel中,使用分列功能进行处理,以便单独获取到username列的数据。一般会先过滤掉oracle系统默认用户(过滤方法可自行搜索excel功能)

3)利用excel将如下查询语句和username列的所有数据进行拼接,形成如下样式(最后一列是拼接的结果):

select * from all_tables t where t.owner = upper(trim('SYSTEM'));select * from all_tables t where t.owner = upper(trim('SYSTEM'));
select * from all_tables t where t.owner = upper(trim('SCOTT'));select * from all_tables t where t.owner = upper(trim('SCOTT'));
select * from all_tables t where t.owner = upper(trim('HR'));select * from all_tables t where t.owner = upper(trim('HR'));
4)在plsql的command模型下执行

a)spool E:\tables-ip-sid.csv

b)复制以上表格拼接后的结果,会自动执行

c)spool off

这样就能在E盘下找到一个输出某一db下的所有用户的表的csv文件。

5)使用类似第3)步的方法将以下查询语句和表名进行拼接,形成如下样式:

select * from 1-Jul where rownum <= 20;
select * from A_BDQK where rownum <= 20;
select * from A_WHGXLQRY where rownum <= 20;
PS:因为没有字符串,所有没有使用另外的单元格拼接,但是要注意空格。

6)同样使用类似4)的方法,在plsql的command模型下执行spool,输出E:\datas-ip-sid.csv。

以上就能获取到每张表的前20条记录了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: