我们需要找到一种方法将某些数据从生产中复制到我们的开发区域,以便我们可以调试/修复任何问题。 有时单个用户相关数据会受到影响。我们必须在dev中复制相同的场景并找到解决方案。 目前我们遵循两种方法: -
1. Check the audit history and try to recreate the similar scenario
in dev. <50% sucess rate in recreating the exact same scenario.
2. Restore+Encrypt the "whole" production into dev and then continue
on the work. It is an overkill if issue impacts only a single user.
所以我试图找到一种方法,只从生产中选择一个用户数据并将其插入到dev区域。
我们只有Java和Oracle。无法使用任何外部工具。因为我们 由于安全问题,没有许可证,也无法下载免费软件。
我尝试了以下内容: -
select 'insert into TABLE1(C1,C2,C3,C4) values ('||''''||C1||''''||','||coalesce(to_char(C2),'null')||','||''''||C3||''''||','||coalesce(to_char(C4),'null'));'
from TABLE1 where ID='1006' union all
select 'insert into TABLE2(C1,C2,C3,C4) values ('||''''||C1||''''||','||coalesce(to_char(C2),'null')||','||''''||C3||''''||','||coalesce(to_char(C4),'null'));'
from TABLE2 WHERE TABLE1ID in ( select ID FROM TABLE1 where ID='1006') union all
select 'insert into TABLE3(C1,C2,C3,C4) values ('||''''||C1||''''||','||coalesce(to_char(C2),'null')||','||''''||C3||''''||','||coalesce(to_char(C4),'null'));'
from TABLE3 WHERE TABLE2ID in ( select ID FROM TABLE2 WHERE TABLE1ID in ( select ID FROM TABLE1 where ID='1006'));
2.在生产中使用这组选择,以便获得一组插入语句作为输出。
3.使用dev。中的insert语句
问题: - 选择查询变得越来越大。总共约25 MB :( 我们甚至无法在生产中执行那个大查询。
你能为这个用例建议更好的方法吗? oracle本身是否允许选择性数据导出?或者我应该编写我的java代码?
答案 0 :(得分:5)
我们使用类似的东西将记录从一个数据库移动到另一个数据库:
copy from username/password@database1 to username/password@database2 insert target_table using select * from source_table where where_clause_goes_here;
答案 1 :(得分:5)
使用数据泵移动所需表格的数据,并使用您想要的whereclause。数据库的直接和标准功能。
答案 2 :(得分:0)
如果两个DB都是Oracle,则可以在本地创建DBLINK 远程数据库的数据库和在本地数据库中创建查询的作业 来自远程数据库的所有数据使用DBLINK,并更新您的表中的表 本地数据库。 或者有大量的数据迁移API可用,你可以尝试其中一个。
下面是一些链接,看看他们,可能会解决你的问题
http://code.google.com/p/c5-db-migration/
http://flywaydb.org/documentation/migration/java.html
http://migrate4j.sourceforge.net/
http://flywaydb.org/ ---最好使用
http://www.operatornew.com/2012/11/automatic-db-migration-for-java-web.html