曾经很早的时候用 SQL Server2000 时就见过我们老大,用 SQL Server2000 的导入导出功能,把数据都导入到了 Oracle9 里去,所以我也对导入导出数据有充分的信心,绝对能做好。
客户需要一个Oracle版本的通用权限管理系统组件的数据库,而且为此还支付了5000元的技术咨询费。最近一段时间Oracle用得不多,电脑里没也装Oracle,想来想去应该家里的移动硬盘里,有Oracle11G,就装了一个,装好后总感觉用户创建的不正确,折腾来折腾去,又卸载又重新装了一下,这个前后估计耗费了2-3个小时。
但是想从 SQL Server2005 导入到Oracle11G时总是出现错误,折腾了1-2个小时也没能搞定,接着又尝试从 SQL Server2008 导入到 Oracle11G还是不行照样有错无法正常导入,这时候简直有些绝望了,唉连微软的工具都无法正常导入导出数据。
这时候我就咨询群里的朋友,有一个做开发的朋友推荐用 Kettle ,这个数据库导入导出工具好不容易在网上下载了一个,无法正常运行,又下载了JDK什么的,接着还说缺这个文件缺哪个文件,然后朋友又发了那些缺的文件,但是程序还是无法正常运行,折腾这些,足足消耗了2个小时以上,家里的网络只有2M,下载的速度也不太快。
所以用一些不熟悉的东西,有一定的风险,同时可能还需要很多学习成本。我电脑用的是win7 32位的,始终没明白为啥 Kettle 没能正常运行。
有一个比较擅长开发Oralce的朋友又推荐我用sqldeveloper-3.0.03.45.zip,但是死活找不到相关下载,好不容易Oracle的下载里有一个,但是也无法下载,版本也过低,由于这个软件也比较庞大,客户也无法从网上很顺利的发过来,左找右找,又耗费了1-2个小时,顺便看看相关的文章,折腾了半死,结果没能突破,再次想用工具的想法被破灭了。
有朋友推荐用微软的SQL Server Business Intelligence Development Studio 来折腾导入导出,结果折腾1-2个小时,还是无法正确导入导出表结构及数据,又是失败告终,真是折腾人啊。
4次想用工具导入数据的尝试,均告失败后,真是有些绝望了,足足一天时间就被这么浪费掉了。只能硬这头皮自己上了,客户的问题总需要解决。
实在是没办法那就自己动手导入吧,从 PowerDesigner 15 的模型里把数据库表结构都折腾好,导入到 Oracle11G 结果发现表名被区别大小写了,又把所有创建好的表都删除了,折腾了1个小时,又把 表重新建立一遍, 把SQL语句里的“符号全部替换掉了,才把表结构建立好了。
实在忍无可忍了,自己写了程序写了1个小时不到,把导入导出的程序写了一遍,一执行,几分钟就搞定了,唉,早知道这个效果早就自己写个程序就好了,前后也就2-3个小时就可以了。
好不容易导入 Oracle11G 成功后,客户无法正确导入我提供的数据文件,客户用的是 Oracle10G, 我又在电脑里装了一个 Oracle10G 的客户端,又把数据用 Oracle10G 导出一次,客户才正确导入了数据,这么一来回折腾又耗费了好几个小时。
这期间程序的多数据库兼容性测试也耗费了几个小时调试,其实光把 SQL Server2005导入Oracle10G 的折腾过程,足足耗费了2天时间,人都有点儿累了,虽然嘴巴说说是很简单的事情,真的折腾起来真是不只是脑力活儿还更是体力活儿。
程序代码的参考如下:
//--------------------------------------------------------------------
// --------------------------------------------------------------------
using System.Data;
namespace DotNet.Example
{
using DotNet.BaseManager;
using DotNet.DbUtilities;
public class ImportExportData
{
/// <summary>
/// 导出数据库到Oralce
/// </summary>
public void Export()
{
// this.ExportTable("Items_Area");
// this.ExportTable("Items_AuditStatus");
// this.ExportTable("Items_Degree");
// this.ExportTable("Items_Duty");
// this.ExportTable("Items_Education");
// this.ExportTable("Items_Express");
// this.ExportTable("Items_Links");
// this.ExportTable("Items_MembershipLevels");
// this.ExportTable("Items_Nationality");
// this.ExportTable("Items_NewsCategory");
// this.ExportTable("Items_OnSale");
// this.ExportTable("Items_OrganizeCategory");
// this.ExportTable("Items_Party");
// this.ExportTable("Items_Pattern");
// this.ExportTable("Items_PayCategory");
// this.ExportTable("Items_PostCategory");
// this.ExportTable("Items_RoleCategory");
// this.ExportTable("Items_SalaryItemCategory");
// this.ExportTable("Items_SendCategory");
// this.ExportTable("Items_Sex");
// this.ExportTable("Items_Title");
// this.ExportTable("Items_Units");
// this.ExportTable("Items_UserAuditStates");
// this.ExportTable("Items_Wed");
// this.ExportTable("Items_WorkCategory");
// this.ExportTable("Items_WorkFlowCategories");
// this.ExportTable("Items_WorkingProperty");
// this.ExportTable("Base_Businesscard");
// this.ExportTable("Base_Comment");
// this.ExportTable("Base_Contact");
// this.ExportTable("Base_ContactDetails");
// this.ExportTable("Base_Exception");
// this.ExportTable("Base_File");
// this.ExportTable("Base_Folder");
// this.ExportTable("Base_Items");
// this.ExportTable("Base_Log");
// this.ExportTable("Base_Message");
// this.ExportTable("Base_News");
// this.ExportTable("Base_Organize");
// this.ExportTable("Base_Module", " SELECT * FROM BASE_MODULE ORDER BY PARENTID, ID ");
// this.ExportTable("Base_PermissionItem");
// this.ExportTable("Base_Role");
// this.ExportTable("Base_Staff");
// this.ExportTable("Base_Parameter");
// this.ExportTable("Base_Project");
// this.ExportTable("Base_Permission");
// this.ExportTable("Base_PermissionScope");
this .ExportTable( " Base_Sequence " );
// this.ExportTable("Base_StaffOrganize");
// this.ExportTable("Base_TableColumns");
// this.ExportTable("Base_User");
// this.ExportTable("Base_UserAddress");
// this.ExportTable("Base_UserOrganize");
// this.ExportTable("Base_UserRole");
// this.ExportTable("Base_StaffOrganize");
// this.ExportTable("Base_WorkFlowActivity");
// this.ExportTable("Base_WorkFlowCurrent");
// this.ExportTable("Base_WorkFlowHistory");
// this.ExportTable("Base_WorkFlowProcess");
System.Console.ReadLine();
}
public void ExportTable( string tableName)
{
ExportTable(tableName, tableName);
}
/// <summary>
/// 导出一个表
/// </summary>
/// <param name="tableName"> 表名 </param>
/// <param name="table"> 里面的数据 </param>
public void ExportTable( string tableName, string table)
{
// 这里是获取数据
SqlHelper sqlHelper = new SqlHelper( " Data Source=localhost;Initial Catalog=UserCenterV32;Integrated Security=SSPI; " );
sqlHelper.Open();
DataTable dataTable = new DataTable(tableName);
if (tableName.Equals(table))
{
dataTable = sqlHelper.Fill( " SELECT * FROM " + table);
}
else
{
dataTable = sqlHelper.Fill(table);
}
sqlHelper.Close();
// 这里是插入数据
OracleHelper oracleHelper = new OracleHelper( " Data Source=ORACLE11;user=DBO_USERCENTERV32;password=DBO_USERCENTERV32; " );
oracleHelper.Open();
oracleHelper.BeginTransaction();
SQLBuilder sqlBuilder = new SQLBuilder(oracleHelper);
try
{
// 清除表数据
oracleHelper.ExecuteNonQuery( " TRUNCATE TABLE " + tableName);
// 创建配套的序列
// oracleHelper.ExecuteNonQuery("create sequence SEQ_" + tableName + " minvalue 1 maxvalue 999999999999999999999999 start with 1 increment by 1 cache 20");
int r = 0 ;
for (r = 0 ; r < dataTable.Rows.Count; r ++ )
{
sqlBuilder.BeginInsert(tableName);
for ( int i = 0 ; i < dataTable.Columns.Count; i ++ )
{
sqlBuilder.SetValue(dataTable.Columns[i].ColumnName, dataTable.Rows[r][dataTable.Columns[i].ColumnName]);
}
sqlBuilder.EndInsert();
System.Console.WriteLine( " 表 " + tableName + " 已插入第 " + r.ToString() + " 行 " );
}
System.Console.WriteLine( " - - 表 " + tableName + " 共插入 " + r.ToString() + " 行 " );
oracleHelper.CommitTransaction();
}
catch (System.Exception exception)
{
oracleHelper.RollbackTransaction();
System.Console.WriteLine(tableName + " -- " + exception.Message);
}
finally
{
oracleHelper.Close();
}
}
}
}
About
吉日嘎拉(蒙古语为吉祥如意),2000年毕业于黑龙江大学计算机系软件专业,目前定居杭州,典型的IT软件土鳖一个,外号“软件包工头”。
通用权限管理系统组件(GPM - General Permissions Manager)自2003年开始发布,目前是国内注册用户和免费盗版用户最多的权限管理系统,是各种信息管理系统开发中彻底的权限解决方案。本组件支持多种主流数据库(Oracle、sqlsever、db2、mysql),功能强大,使用方便,代码简洁,思路严谨,被广大支持者称为权限管理系统中的“走火入魔级权限管理系统”。
精心维护通用权限管理系统组件(GPM - General Permissions Manager)有8年多,3年的不断推广,20万行经典的业务逻辑积累,经过上万次的调试修正,经历了四百个付费客户,上百软件公司的实战开发。
11年以上开发经验,外企工作5年,上市公司3年,独立经营软件公司2年,主持研发部门管理工作4年以上。
将权限管理、工作流做到我能力的极致,一个人只能做好那么很少的几件事情。
QQ:252056973,Mail:jirigala_bao@hotmail.com
通用权限管理模块的严谨设计定位、精心编码实现、不断维护推广、持续优化改进,主要是为了实现一个可以高度重复利用劳动成果的工具软件并有偿提供给所需的人们,另想成为国人值得骄傲的知名软件功能模块。
可供国内管理类开发人员在日常工作中进行灵活二次开发利用的模块,开发管理类软件的必备工具之一,我们的目标就是让程序员早点儿回家休息。