如果我需要将数据库从 SQL Server 2012(32 位)移动到 SQL Server 2005(64 位),我有哪些选择?
我知道我不能:
我知道我可以:
有没有更简单的选择?
根据我的分析,我们数据仓库的完整维度模型需要从 200 多个源表中提取。其中一些表将作为增量加载的一部分提取,而其他表将作为完整加载。
需要注意的是,我们有大约 225 个具有相同架构的源数据库。
据我所知,在 SSIS 中构建一个带有 OLE DB 源和 OLE DB 目标的简单数据流需要在设计时确定列和数据类型。这意味着我最终会得到 200 多个数据流,仅用于提取。
从可维护性的角度来看,这对我来说是一个大问题。如果我需要对提取代码进行某种彻底的更改,我将不得不修改 200 个不同的数据流。
另一种选择是,我编写了一个小脚本,用于读取我想从一组元数据表中提取的源数据库、表名和列。代码在多个循环中运行,并使用动态 SQL 通过链接服务器和 OPENQUERY 从源表中提取。
根据我的测试,这仍然不如使用带有 OLEDB 源和目标的 SSIS 数据流快。所以我想知道我有什么样的选择。到目前为止的想法包括:
解决这个问题的最佳方法是什么?当谈到 .NET 编程时,我是一个初学者,所以仅仅学习基础知识所需的时间也是一个问题。
我们的用户想要从生产中刷新 QA 数据库,但想要两个表(我们称它们为 T1 和 T2)来保留原始 QA 数据。因此,我将两个表从 QA (DB1) 复制到临时 QA 数据库 (DB2)。然后从生产中刷新 DB1。刷新后,我想将 T1 和 T2 数据从 DB2 覆盖到 DB1,以便它可以包含预刷新 QA 值。
我做了以下工作:
用
select *
INTO D1.dbo.T1
FROM D2.dbo.T1
Run Code Online (Sandbox Code Playgroud)然后从 prod 刷新 D1
然后使用以下步骤截断 T1:
SELECT COUNT(*) AS BeforeTruncateCount
FROM T1;
GO
TRUNCATE TABLE T1;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM T1;
GO
Run Code Online (Sandbox Code Playgroud)现在,当我返回将数据从 D2.T1 复制到 D1.T1 时,我收到错误消息,即数据库中已存在名为 T1 的对象。
我应该放下桌子并复制吗?
或者整个过程有没有更好的方法?
架构表归 dbo 和另一个架构名称所有。下面的代码没有在任何表格上移动。我还需要添加其他东西才能传输表格吗?没有需要移动的存储过程或视图。
$xfr1 = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Transfer($prodServerDB.Databases[$devDatabase])
#Set this objects properties
$xfr1.DestinationLoginSecure = $false
$xfr1.DestinationServer = $devServer
$xfr1.DestinationLogin = $devUsername
$xfr1.DestinationPassword = $devPassword
$xfr1.DestinationDatabase = $devDatabase
$xfr1.BatchSize = 10485760
$xfr1.CopyData = $true
$xfr1.CopyAllTables = $true
$xfr1.CopyAllObjects = $true
$xfr1.CopyAllDatabaseTriggers = $true
$xfr1.CopyAllLogins = $false
$xfr1.CopyAllRoles = $false
$xfr1.CopyAllUsers = $false
$xfr1.CopySchema = $true
$xfr1.PreserveDbo = $true
$xfr1.PreserveLogins = $true
$xfr1.Options.AllowSystemObjects = $false
$xfr1.Options.ContinueScriptingOnError = $true
$xfr1.Options.Indexes = $true
$xfr1.Options.IncludeIfNotExists = $true
$xfr1.Options.DriAll = $true
$xfr1.Options.SchemaQualify = $true
$xfr1.Options.ScriptSchema = …Run Code Online (Sandbox Code Playgroud)