数据库数据复制

数据|数据库

/*--数据库数据复制

 将一个数据库中的数据复制到另一个数据库
 如果某列在目标数据库中为标识列,将不会被复制

 适用范围:数据库结构发生了变化,想将旧数据库进行升级
  这样就可以根据新的数据库结构创建一个空库,然后
  将旧数据库的所有数据复制到新库中
--*/

/*--调用示例

 exec p_copydb '源数据库','目标数据库'
 exec p_copydb 'acc_五医','acc_演示数据8'
--*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_copydb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_copydb]
GO

create proc p_copydb
@o_dbname sysname,  --要复制数据的数据库--源数据库
@n_dbname sysname,  --接收数据的数据库--目标数据库
@cleardb bit=0   --清空目标数据库
as
declare @sql nvarchar(4000)

--禁用约束,防止复制时的数据冲突
set @sql='declare #tbc cursor for select name,tbname=object_name(parent_obj)
 from '+@n_dbname+'..sysobjects where xtype in(''C'',''F'')'
exec(@sql)
declare @name sysname,@tbname sysname
open #tbc
fetch next from #tbc into @name,@tbname
while @@fetch_status=0
begin
 set @sql='alter table '+@n_dbname+'..['+@tbname+'] NOCHECK CONSTRAINT ['+@name+']'
 exec(@sql)
 fetch next from #tbc into @name,@tbname
end
close #tbc

--复制数据
declare @sql1 varchar(8000)
set @sql='declare #tb cursor for select a.name from '
 +@o_dbname+'..sysobjects a inner join '
 +@n_dbname+'..sysobjects b on a.name=b.name
  where a.xtype=''U'' and b.xtype=''U'''
exec(@sql)
open #tb
fetch next from #tb into @tbname
while @@fetch_status=0
begin
 select @sql1=''
  ,@sql='select @sql1=@sql1+'',[''+a.name+'']'' from(
  select name from '+@o_dbname+'..syscolumns where id in
  (select id from '+@o_dbname+'..sysobjects where name='''+@tbname+''')
 ) a inner join (
  select name from '+@n_dbname+'..syscolumns where status<>0x80 and id in
  (select id from '+@n_dbname+'..sysobjects where name='''+@tbname+''')
 ) b on a.name=b.name'
 exec sp_executesql @sql,N'@sql1 nvarchar(4000) out',@sql1 out

 select @sql1=substring(@sql1,2,8000)
 exec('insert into '+@n_dbname+'..['+@tbname+']('+@sql1
  +') select '+@sql1+' from '+@o_dbname+'..['+@tbname+']')
 if @@error<>0
  print('insert into '+@n_dbname+'..['+@tbname+']('+@sql1
   +') select '+@sql1+' from '+@o_dbname+'..['+@tbname+']')
 fetch next from #tb into @tbname
end
close #tb
deallocate #tb

--数据复制完成后启用约束
open #tbc
fetch next from #tbc into @name,@tbname
while @@fetch_status=0
begin
 set @sql='alter table '+@n_dbname+'..['+@tbname+'] CHECK CONSTRAINT ['+@name+']'
 exec(@sql)
 fetch next from #tbc into @name,@tbname
end
close #tbc
deallocate #tbc
go

时间: 2024-09-26 05:49:27

数据库数据复制的相关文章

把mmapv1存储引擎存储的mongodb3.0数据库数据复制到WiredTiger存储引擎的mongodb3.2中

mongodb3.0在mmapv1的存储引擎基础上添加了一个新的存储引擎WiredTiger.但是3.0的默认存储引擎依旧是mmapv1,因此我们项目之前也就用的默认方式. 但是mongodb更新实在太快,转眼间,从3.0直接跳到3.2,默认的存储引擎也改成了WiredTiger.据说这个引擎具有占用磁盘空间更小,占用内存空间更小,查询效率更高等一系列特点. 为了防患于未然,今天尝试了一下把3.0的数据复制到3.2中.由于以前都是用mongovue直接复制,但是新的存储引擎,mongovue连表

MySQL快速复制数据库数据表的方法_Mysql

某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库.使用以下方法,可以非常简单地实现. 假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb.步骤如下: 1. 首先创建新的数据库newdb #mysql -u root -ppassword mysql>CREATE DATABASE `newdb` DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI; 2. 使用mysqldump及mysql的

mssql数据同步实现数据复制的步骤第1/2页_数据库其它

一 配置发布服务器 在发布服务器上执行以下步骤: (1) 从[工具]下拉菜单的[复制]子菜单中选择[配置发布.订阅服务器和分发]出现配置发布和分发向导 (2) [下一步] 选择分发服务器 可以选择把发布服务器自己作为分发服务器或者其他sql的服务器 (3) [下一步] 设置快照文件夹 一般采用默认\\servername\d$\Program Files\Microsoft SQL Server\MSSQL\ReplData **(4) [下一步] 自定义配置 可以选择: 是,让我设置分发数据库

在ORCAL中实现数据库的复制

数据|数据库 在Internet上运作数据库经常会有这样的需求:把遍布全国各城市相似的数据库应用统一起来,一个节点的数据改变不仅体现在本地,还反映到远端.复制技术给用户提供了一种快速访问共享数据的办法. 一.实现数据库复制的前提条件 1.数据库支持高级复制功能 您可以用system身份登录数据库,查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能:否则不支持. 2.数据库初始化参数要求 ①.db_domain = test.com.cn 指明

Oracle数据库数据文件位置修改方法

 数据文件就是以dbf结尾的文件也也就是用来存储我们数据的一个文件了,此文件通常比较大所以我们一般存储在空间比较大的目录了,下面一起来看看Oracle数据库数据文件位置修改方法   如何更改Oracle数据文件的位置 A:归档模式下 1.在sqlplus中连接到要移动文件的Oracle数据库,然后执行如下SQL语句查看Oracle数据库文件位置: SQL>select file_name   from   sys.dba_data_files; FILE_NAME ---------------

log explorer-为恢复sql server2005数据库数据,安装Log Explorer时报错,求大神帮忙看看。

问题描述 为恢复sql server2005数据库数据,安装Log Explorer时报错,求大神帮忙看看. 解决方案 1.Lumigent Log Explorer for SQL Server v4.0.2 特别版下载地址http://down.chinaz.com/soft/7887.htm Log Explorer for SQL Server 4.2 注册码 wv5rc-uxvpz-e33-nr4694qs2 2.Log Explorer for SQL Server v4.0.2 安

【MySql】mysql 数据库数据订正

   工作过程中时常遇到数据订正的需求,该操作本身不难.操作时要求能够保持回滚~对于能够满足回滚的要求,我通常执行备份表,然后执行变更!如果发送订正错误或者用户要求回滚的时候,就完全恢复整个表,这样做会有多余的操作,因为我们只要 实际上可以选择备份要进行更正的数据!比如如下需求: 将表resource中usage_type='unused' 并且 user_id=166 的记录更新为user_id=169 !更新100条! 1 首先备份表 create table test.resource_2

判断数据复制完毕-access +VB 数据复制如何判断是否复制完毕

问题描述 access +VB 数据复制如何判断是否复制完毕 access +VB 中在一个数据库中把一个表的内容复制到另一个内容需要时间如何判断是否复制完毕

使用InfoSphere CDC for DB2 for i实现DB2 for i之间的实时数据复制

本文从实际应用的角度,阐述如何使用 InfoSphere CDC for DB2 for i 实现 DB2 for i 之间的实时数据复制.与此同时,还深入分析了 InfoSphere CDC for DB2 for i 的体系结构与工作原理. IBM i 平台的特色之一是集成数据库 DB2 for i.IBM InfoSphere Change Data Capture( 简称 InfoSphere CDC) 作为一款跨数据库复制解决方案,支持不同 DB2 for i 之间,甚至是异构数据库之