我有一个将SQL Server表(30-40个表)迁移到Oracle的方案。我不能依赖SSIS,因为要迁移到Oracle的表的数目会定期更改,并且架构发生变化时,我也不能始终创建或更新DFT。 还有其他方法可以动态处理数据移动并使其有效工作吗?像使用Python或其他任何编程语言一样?
答案 0 :(得分:2)
由于您愿意使用编程语言来解决方案,因此我认为您可以从SchemaMapper class library中受益,Start the SQL Server Import and Export Wizard是在GitHub上发布的一个开源项目。在上面的链接的自述文件中可以找到完整的说明。
重要说明:昨天,我添加了从数据库(SQL Server,Oracle ...)读取数据的支持以及将数据导出到Oracle的功能。
在此答案中,我将提供有关导入SQL Server表,为每个创建适当的SchemaMapper类的信息(因为它们具有不同的架构,并且您需要将它们导入到不同的架构)将数据导出到Oracle。
//First of all list the tables names need to import
string[] TableNameFilter = new[] { "Table1", "Table2" };
//Create an instance of the oracle import class
SchemaMapper.Exporters.OracleExport expOracle = new SchemaMapper.Exporters.OracleExport(oracleconnectionstring);
//Create an SQL Server import class
using (SchemaMapper.Converters.SqlServerCeImport ssImport = new SchemaMapper.Converters.SqlServerCeImport(sqlconnectionstring))
{
//Retrieve tables names
ssImport.getSchemaTable();
//loop over tables matching the filter
foreach(DataRow drRowSchema in ssImport.SchemaTable.AsEnumerable().Where(x =>
TableNameFilter.Contains(x["TABLE_NAME"].ToString())).ToList())
{
string SQLTableName = drRowSchema["TABLE_NAME"].ToString();
string SQLTableSchema = drRowSchema["TABLE_SCHEMA"].ToString();
DataTable dtSQL = ssImport.GetDataTable(SQLTableSchema, SQLTableName);
//Create a schema mapping class
using (SchemaMapper.SchemaMapping.SchemaMapper sm = new SchemaMapper.SchemaMapping.SchemaMapper(SQLTableSchema, SQLTableName))
{
foreach (DataColumn dc in dtSQL.Columns)
{
SchemaMapper_Column smCol = new SchemaMapper_Column();
smCol.Name = dc.ColumnName;
smCol.Name = dc.ColumnName;
smCol.DataType = smCol.GetCorrespondingDataType(dc.DataType.ToString(), dc.MaxLength);
sm.Columns.Add(smCol);
}
//create destination table in oracle
expOracle.CreateDestinationTable(sm);
//Insert data
expOracle.InsertUsingOracleBulk(sm, dtSQL);
//there are other methods such as :
//expOracle.InsertIntoDb(sm, dtSQL);
//expOracle.InsertIntoDbWithParameters(sm, dtSQL);
}
}
}
注意:这是一个开源项目:尚未完全测试,并且不支持所有数据类型,如果遇到一些错误可以随时提供反馈或在GitHub中添加问题
如果可以在不计划作业的情况下执行此操作,则可以使用“导入和导出向导”,该向导允许您将多个表导入Oracle,而无需手动构建软件包。它将创建包,目标表,地图列和导入数据。
答案 1 :(得分:1)
这是我决定考虑时间限制的方法(使用C#会花费更多时间)。对于8 GB的表,将数据SQL移至Oracle需要11分钟。
步骤: