我必须将一堆数据从一个数据库表复制到另一个数据库表中。我无法使用 SELECT ... INTO 因为其中一列是标识列。另外,我还需要对架构进行一些更改。我能够使用导出数据向导创建一个 SSIS 包,然后在 Visual Studio 2005 中对其进行编辑以进行所需的更改等。它肯定比 INSERT INTO 更快,但对我来说,将数据下载到另一台计算机只是为了再次上传回来似乎很愚蠢。(假设我是正确的,这就是 SSIS 包正在做的事情)。是否有相当于 BULK INSERT 的功能,可以直接在服务器上运行,允许保留标识值并从表中提取数据?(据我所知,BULK INSERT只能从文件中提取数据)
\n\n编辑:\n我确实了解 IDENTITY_INSERT,但由于涉及大量数据,INSERT INTO ... SELECT 有点慢。SSIS/BULK INSERT 将数据转储到表中,而不考虑索引和日志记录等,因此速度更快。(当然,一旦填充表就在表上创建聚集索引并不快,但它仍然比我第一次尝试的 INSERT INTO...SELECT 更快)
\n\n编辑 2:\n架构更改包括(但不限于)以下内容:\n1. 将一张表拆分为两张新表。将来每个表都会有自己的 IDENTITY 列,但对于迁移,我认为最简单的方法是使用原始表中的标识作为两个新表的标识。迁移完成后,其中一个表将与另一个表建立一对多关系。\n2. 将列从一个表移动到另一个表。\n3. 删除一些仅一对一交叉引用的交叉引用表。相反,引用将是两个表之一中的外键。\n4. 将使用默认值创建一些新列。\n5. 有些表\xe2\x80\x99根本没有改变,但由于“将其全部放入新的数据库”请求,我必须将它们复制过来。
\n我正在尝试编写数据迁移 pl/sql 脚本,以将一个架构中的某些数据传输到另一台服务器上的不同架构。第二个数据库作为原始数据库的一个子集开始,但我们已经修改了架构。所以我不能只对每个表使用以下内容:
Insert into DB2.table_name select * from DB1.table_name2;
Run Code Online (Sandbox Code Playgroud)
我尝试搜索显示如何执行此操作的示例脚本,但找不到任何内容。
我正在使用SQL Server 2005.
我正在将数据从当前数据库(单个表)迁移到新数据库(规范化 - 许多表).在新数据库中,我有一个基表(我们称之为"BaseTable"),以及其他多个表(让我们调用它们"DependentA",和"DependentB").旧数据库中的一些数据将转到BaseTable,而另一些将转到另外两个.BaseTable与DependentA和DependentB都有一对一的关系,使用它们的Id作为外键.
所以这是我的问题.我应该如何迁移数据?这是我一直在尝试的一个查询,除了一件事之外它是有效的:BaseTable中的其他两个外键是相同的,而不是每个都有不同的.
Begin SQL:
BEGIN TRANSACTION
DECLARE @dep1Id int
DECLARE @dep2Id int
INSERT INTO DependentA (column1, column2)
SELECT c1, c2
FROM OldDatabase.OldTable
SELECT @dep1Id = Scope_Identity()
INSERT INTO DependentB (column3, column4)
SELECT c3, c4
FROM OldDatabase.OldTable
SELECT @dep2Id = Scope_Identity()
INSERT INTO BaseTable (column5, dependentTable1Id, dependentTablr2Id)
SELECT c5, @dep1Id, @dep2Id
FROM OldDatabase.OldTable
COMMIT
Run Code Online (Sandbox Code Playgroud) 我们有一个使用通用表设计的规范化 SQL Server 2008 数据库。因此,我们有通用表(实体、实例、关系、属性等),而不是为每个实体(例如产品、订单、订单项等)设置单独的表。
我们决定使用一个单独的非规范化数据库来快速检索数据。假设它们具有不同的架构,您能否告诉我同步这两个数据库的各种技术?
干杯,莫什
database sql-server synchronization data-migration data-synchronization
我遇到了同样的问题:django - "manage.py test"失败"表已经存在"
模式迁移/迁移工作正常(虽然确实有一些问题需要我 - 假,但所有随后的迁移与南方工作).但是,当我进行单元测试时,我得到:
(1050, "Table '{tablename}' already exists")
Run Code Online (Sandbox Code Playgroud)
我只是好奇我怎么能绕过这个,以及为什么会这样.在上面链接的问题中给出的唯一答案是,南方可以被排除在单元测试之外,如果我这样做,这是否意味着我无法对南方管理的表进行单元测试?
解释非常感谢:)
亚当
我是Oracle的新手,我正在努力将特定数据从一台服务器上的数据库移动到另一台服务器上的数据库.
这两个DB具有相同的模式,但我想拉出其键引用的特定列,并将数据移动到其他服务器中.我想弄清楚对此最好的攻击方案是什么.
一种允许命令行的方法,我可以输入我想要移动的数据的键.是否有可能用PLSQL脚本完成?
谢谢.
我有一个 Oracle 数据库,其中包含大量数据,我需要将其迁移到 noSQL 环境(我正在使用 MongoDB)。有什么工具可以做到这一点吗?
所以我目前正在研究 CQRS 架构和 EventStore“模式”。
它将应用程序打开到可扩展性和灵活性以及测试的新维度。
但是我仍然坚持如何正确处理数据迁移。
这是一个具体的用例:
假设我想管理一个包含文章和评论的博客。
在写入端,我使用 MySQL,在读取端 ElasticSearch,现在每次处理命令时,我都会在写入端持久化数据,在读取端调度一个事件来持久化数据。
现在让我们说我有某种 ViewModel 被调用ArticleSummary,它包含一个 id 和一个标题。
我有一个新的功能请求,要将文章标签包含到我的 中ArticleSummary,我会向模型添加一些字典以包含标签。
鉴于我的写入层中已经存在标签,我需要更新或使用新的“表”来正确使用新包含的数据。
我知道 EventLog Replay 策略包括重放所有事件以“更新”所有 ViewModel,但是,严肃地说,当我们有十亿行时它是否可行?
有没有经过验证的策略?任何反馈?
我有一个包含相对静态内容的语言数据库表:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Language(db.Model):
__tablename__ = 'languages'
# Fields
code = db.Column(db.String(2), primary_key=True)
name = db.Column(db.String(40))
native = db.Column(db.String(60))
rtl = db.Column(db.Boolean()) # right to left
Run Code Online (Sandbox Code Playgroud)
该数据是一个CSV。我想把它插入到数据库中。我可以用 Alembic 做到这一点吗?
我初始化所有表(结构,而不是数据)
$ flask db init
$ flask db migrate
$ flask db update
Run Code Online (Sandbox Code Playgroud)
(附带问题:这应该首先在数据库中,还是作为代码中的 CSV 文件?我在 CMS 中使用它以允许用户指定他们说的语言/页面是哪种语言创建。)
提供一个端点,在调用时添加内容:
@app.route('/secret_init_languages')
def db_init_languages():
from mpu.string import str2bool
import csv
path = resource_filename('my_package', 'static/languages.csv')
nb_languages = 0
with open(path, 'rt', newline='') as csvfile:
csvreader …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来控制 mongodb 中的分片集合迁移阈值。这些阈值在https://docs.mongodb.com/manual/core/sharding-balancer-administration/#sharding-migration-thresholds 中有描述
我在这些值中看到的是,他们针对少量块 (0-20: 2, 20-80: 4, 80+: 8) 调整了大约 10% 的块计数的迁移阈值。在此之上,它被锁定在 8 个块:只有 8 个块计数在分片成员之间不同才会触发迁移活动。
对于我们具有高活动率和大量数据的集合,这会导致平衡抖动 - 几乎总是有 8 个块的差异,一直。由于分片集合的高交易率,有一系列完全可以接受的暂时不平衡的原因(我不会在这里讨论)。当我们关闭平衡器时,随着整个集群的活动发生变化,小的临时不平衡通常会被有机地纠正。开启平衡器后,当它完成一个迁移时,另一个(或多个并行)会立即触发。
像这样锁定阈值,我们更大的集合一直在颠簸 - 消耗我们真正想以其他方式使用的 IOPS 和网络带宽。这些微小的迁移也没有任何实际好处:如果我们谈论的是大型集合,那么相对于任何实际工作负载而言,8 个块可能是微不足道的数据量。因此,我们花费了大量精力来移动大量小片段,以实现零有效收益。
我很想找到一个配置文件设置 - 至少 - 允许我重新定义这些值。更好的是强制使用分数策略,例如集合中块数量的 10%。我在 mongo 文档中没有看到任何这种类型的控件,但可能会丢失它。
如果做不到这一点,我将不得不启动代码并自己重新调整它以从源代码构建,所以我希望有人已经解决了这个问题,而我只是看不出在哪里可以控制它。提前致谢!
data-migration ×10
database ×2
mongodb ×2
oracle ×2
plsql ×2
python ×2
sql ×2
sql-server ×2
alembic ×1
cqrs ×1
django-south ×1
events ×1
nosql ×1
oracle10g ×1
sqlalchemy ×1