身为运维的你,是不是偶尔需要从生产库将数据DOWN下来,再导入到测试库?
普通青年一般都从生产环境exp->下载到本地->上传到测试机->imp到测试库,操作少量数据,如某一张或几张表时,步骤繁琐稍显麻烦。
2B青年一般都用pl/sql查询数据->select all rows->copy to Excel->另存为本地->PL/SQL登陆测试机,然后select for update->复制粘贴到测试库对应的表,这样操作,如果数据量大,容易让pl/sql没有响应。且操作比较缺乏安全感。
好吧,文艺青年的你会怎么做?
普通青年一般都从生产环境exp->下载到本地->上传到测试机->imp到测试库,操作少量数据,如某一张或几张表时,步骤繁琐稍显麻烦。
2B青年一般都用pl/sql查询数据->select all rows->copy to Excel->另存为本地->PL/SQL登陆测试机,然后select for update->复制粘贴到测试库对应的表,这样操作,如果数据量大,容易让pl/sql没有响应。且操作比较缺乏安全感。
好吧,文艺青年的你会怎么做?
一、如果要导出/导入的文件不太大。
1. 利用pl/sql查询数据,获取最后页。
2. 待数据全部查出来后,copy to excel,保存起来。
2. 待数据全部查出来后,copy to excel,保存起来。
二、文件实在太大了。
那就写脚本导吧。
1. vi main.sql
set linesize 200
set term off verify off feedback off pagesize 0
set markup html on entmap on spool on preformat off
spool tables.xls
@get_data.sql
spool off
exit
1. vi main.sql
set linesize 200
set term off verify off feedback off pagesize 0
set markup html on entmap on spool on preformat off
spool tables.xls
@get_data.sql
spool off
exit
//PS,重点说明一下pagesize参数,这里设置的是0,即不会产生列头。如果设置为1,则一行产生一个列头,设置100,则100行产生一个列头。除非你知道要导出的数据是多少行,否则还是建议把pagesize设置为0,最后自行添加列头吧,否则数据里出现多余的列头会导致导入时误将列头当数据导入进去。
//举手:如果想一次导出多个excel行不行?行,只需要spool时,写成多个就行了,例如:
spool a.xls
@get a.sql
spool off
spool b.xls
@get b.sql
spool off
...
//举手:如果想一次导出多个excel行不行?行,只需要spool时,写成多个就行了,例如:
spool a.xls
@get a.sql
spool off
spool b.xls
@get b.sql
spool off
...
2. vi get_data.sql
select surr_key,curr_deal,time_period,time_val,dms_cl
,dms01,dms01_cht01,dms01_cht02,dms02,dms02_cht01,dms02_cht02,kpi_id,kpi_value
from bam.bam_baln_cube_bill_lv3 where curr_deal >= '201112' and dms_cl like '1010074%';
3. sqlplus username/password@db
4. SQL>@main.sql
5. 下载tables.xls
6. 这时候得到的tables.xls其实是个网页格式的,用excel工具打开后,另存为excel工作簿,变成一个真正的excel文件即可。
select surr_key,curr_deal,time_period,time_val,dms_cl
,dms01,dms01_cht01,dms01_cht02,dms02,dms02_cht01,dms02_cht02,kpi_id,kpi_value
from bam.bam_baln_cube_bill_lv3 where curr_deal >= '201112' and dms_cl like '1010074%';
3. sqlplus username/password@db
4. SQL>@main.sql
5. 下载tables.xls
6. 这时候得到的tables.xls其实是个网页格式的,用excel工具打开后,另存为excel工作簿,变成一个真正的excel文件即可。
至此,导出完成,下一步是导入,步骤如下:
1. pl/sql连接欲导入的数据库。
2. 工具->ODBC导入器
3. 选择“来自ODBC的数据”页,设置如下内容:
用户系统dsn: Excel Files
用户名:要导入的表在哪个用户下
口令:对应的口令
4. 点击“连接”,在弹出的选择框中,选择你刚才导出来的数据源,如tables.xls,如果这里导入报错,说明你的文件不是真正的EXCEL文件。
5. 选择“到ORACLE的数据”页面,设置如下内容:
所有者:导入的表在哪个用户下
表:导入的表名
选择了表名后,ORACLE会自动生成源->目标的mapping,如果确认无误,即可执行导入了。
另外还有:清除表、每次提交行数、覆盖重复、忽略重复等对数据有效性和效率进行选择,就不多说了。
6. 点击“导入”,待完成后,可以自行验证结果。
1. pl/sql连接欲导入的数据库。
2. 工具->ODBC导入器
3. 选择“来自ODBC的数据”页,设置如下内容:
用户系统dsn: Excel Files
用户名:要导入的表在哪个用户下
口令:对应的口令
4. 点击“连接”,在弹出的选择框中,选择你刚才导出来的数据源,如tables.xls,如果这里导入报错,说明你的文件不是真正的EXCEL文件。
5. 选择“到ORACLE的数据”页面,设置如下内容:
所有者:导入的表在哪个用户下
表:导入的表名
选择了表名后,ORACLE会自动生成源->目标的mapping,如果确认无误,即可执行导入了。
另外还有:清除表、每次提交行数、覆盖重复、忽略重复等对数据有效性和效率进行选择,就不多说了。
6. 点击“导入”,待完成后,可以自行验证结果。
各位文艺青年,再也不要等着DBA给你们导数据了,DBA也很忙的,有权限的话,自己玩玩也挺好。:)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10356975/viewspace-751813/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10356975/viewspace-751813/