以下是一些批量导出的方法:
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;
USERNAME | USER_ID | CREATED | |
SYSTEM | 1 | 2013/7/23 15:28 | |
SCOTT | 11 | 2013/7/23 15:28 | |
HR | 32 | 2013/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条记录了。