从远程数据库复制全部数据到本地数据库
2009-02-08 17:12
459 查看
经常遇到这种情况:需要获得整个远程服务器上的SQLServer数据库,但是没有权限导出数据,而使用脚本生成的方法总有这样那样的问题,并且速度超慢。这两天查找了有关的工具,发现BCP 命令行工具适合大量导入导出,BULK INSERT (SQLServer2005之后支持)命令适合带有自动增长列的表数据导入。
首先要生成数据库的脚本,在本地建立数据库,这个了解SQL Server的基本上都知道。
然后使用下列脚本进行数据的复制了。
DECLARE @remoteServerNameOrIP VARCHAR(50); --远程服务器名称或IP
2SET @remoteServerNameOrIP = '205.100.100.100';
3DECLARE @remoteServerUserName VARCHAR(50); --远程服务器用户名
4SET @remoteServerUserName = 'user';
5DECLARE @remoteServerPassword VARCHAR(50); --远程服务器密码
6SET @remoteServerPassword = '123';
7DECLARE @remoteServerDatabaseName VARCHAR(50); --远程数据库名
8SET @remoteServerDatabaseName = 'global';
9DECLARE @localServerNameOrIP VARCHAR(50); --本地服务器名称或IP
10SET @localServerNameOrIP = '127.0.0.1';
11DECLARE @localServerDatabaseName VARCHAR(50); --本地数据库名
12SET @localServerDatabaseName = 'global';
13DECLARE @tableName VARCHAR(50); --远程\本地数据库中表名
14DECLARE @fileDir VARCHAR(50); --导出\导入文件目录
15SET @fileDir = 'D:\global\';
16DECLARE @isSimple bit; --是否单表
17SET @isSimple = 1;
18DECLARE @simpleTableName VARCHAR(50);
19SET @simpleTableName = 'NewsImages';
20
21exec('declare #tb cursor for select name from '+@localServerDatabaseName+'..sysobjects where xtype=''U''')
22open #tb
23fetch next from #tb into @tableName
24while @@fetch_status=0
25begin
26 --查看表数目
27 EXEC('SELECT '''+@tableName+''', COUNT(*) FROM '+@localServerDatabaseName+'.dbo.'+@tableName);
28 IF (@isSimple=0 OR (@isSimple=1 AND @tableName=@simpleTableName))
29 BEGIN
30
31 --导出远程数据库表数据到本地文件
32 DECLARE @bcp VARCHAR(500);
33 SET @bcp = 'BCP "'+@remoteServerDatabaseName+'.dbo.'+@tableName+'" out "'+@fileDir+@tableName+'.txt" -w -S"'+@remoteServerNameOrIP+'" -U"'+@remoteServerUserName+'" -P"'+@remoteServerPassword+'"';
34 --EXEC master..xp_cmdshell @bcp;
35
36 --导入数据文件到本地数据库
37 DECLARE @bulk VARCHAR(500);
38 SET @bulk = 'BULK INSERT '+@localServerDatabaseName+'.dbo.'+@tableName+' FROM "'+@fileDir+@tableName+'.txt"
39 WITH(
40 CHECK_CONSTRAINTS,
41 DATAFILETYPE = ''widechar'',
42 KEEPIDENTITY,
43 KEEPNULLS,
44 MAXERRORS = 1000,
45
46 ERRORFILE = '''+@fileDir+@tableName+'_err.txt''
47 )';
48 --EXEC(@bulk);
49 END
50fetch next from #tb into @tableName
51end
52close #tb
53deallocate #tb
首先要生成数据库的脚本,在本地建立数据库,这个了解SQL Server的基本上都知道。
然后使用下列脚本进行数据的复制了。
DECLARE @remoteServerNameOrIP VARCHAR(50); --远程服务器名称或IP
2SET @remoteServerNameOrIP = '205.100.100.100';
3DECLARE @remoteServerUserName VARCHAR(50); --远程服务器用户名
4SET @remoteServerUserName = 'user';
5DECLARE @remoteServerPassword VARCHAR(50); --远程服务器密码
6SET @remoteServerPassword = '123';
7DECLARE @remoteServerDatabaseName VARCHAR(50); --远程数据库名
8SET @remoteServerDatabaseName = 'global';
9DECLARE @localServerNameOrIP VARCHAR(50); --本地服务器名称或IP
10SET @localServerNameOrIP = '127.0.0.1';
11DECLARE @localServerDatabaseName VARCHAR(50); --本地数据库名
12SET @localServerDatabaseName = 'global';
13DECLARE @tableName VARCHAR(50); --远程\本地数据库中表名
14DECLARE @fileDir VARCHAR(50); --导出\导入文件目录
15SET @fileDir = 'D:\global\';
16DECLARE @isSimple bit; --是否单表
17SET @isSimple = 1;
18DECLARE @simpleTableName VARCHAR(50);
19SET @simpleTableName = 'NewsImages';
20
21exec('declare #tb cursor for select name from '+@localServerDatabaseName+'..sysobjects where xtype=''U''')
22open #tb
23fetch next from #tb into @tableName
24while @@fetch_status=0
25begin
26 --查看表数目
27 EXEC('SELECT '''+@tableName+''', COUNT(*) FROM '+@localServerDatabaseName+'.dbo.'+@tableName);
28 IF (@isSimple=0 OR (@isSimple=1 AND @tableName=@simpleTableName))
29 BEGIN
30
31 --导出远程数据库表数据到本地文件
32 DECLARE @bcp VARCHAR(500);
33 SET @bcp = 'BCP "'+@remoteServerDatabaseName+'.dbo.'+@tableName+'" out "'+@fileDir+@tableName+'.txt" -w -S"'+@remoteServerNameOrIP+'" -U"'+@remoteServerUserName+'" -P"'+@remoteServerPassword+'"';
34 --EXEC master..xp_cmdshell @bcp;
35
36 --导入数据文件到本地数据库
37 DECLARE @bulk VARCHAR(500);
38 SET @bulk = 'BULK INSERT '+@localServerDatabaseName+'.dbo.'+@tableName+' FROM "'+@fileDir+@tableName+'.txt"
39 WITH(
40 CHECK_CONSTRAINTS,
41 DATAFILETYPE = ''widechar'',
42 KEEPIDENTITY,
43 KEEPNULLS,
44 MAXERRORS = 1000,
45
46 ERRORFILE = '''+@fileDir+@tableName+'_err.txt''
47 )';
48 --EXEC(@bulk);
49 END
50fetch next from #tb into @tableName
51end
52close #tb
53deallocate #tb
相关文章推荐
- copy命令完成远程数据库、本地数据库或Oracle数据库与非Oracle数据库之间的数据复制
- sqlserver2005 远程服务器数据 完全拷贝 到本地数据库
- 本地数据复制到远程
- RMAN duplicate数据库复制技术解析,实现数据库到本地或远程的复制
- 本地不同数据库或远程服务器之间数据交换
- MySQL:将远程服务器的数据库拷到本地/复制他人数据库
- 利用数据泵导出远程数据到本地数据库!!!
- 将MSSQL数据库文件从本地机迁移到远程服务器(包括主键、默认值、表内数据)
- (数据库)sql2K 本地数据.远程数据导入导出
- 本地数据库和远程服务器中数据库的数据导入和导出
- 定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表
- SqlServer数据库将另一个数据的的存储过程复制到本地数据库的方法
- 用SQL语句将远程SQL Server数据库中表数据导入到本地数据库相应的表中
- 从远程服务器数据库中同步数据到本地数据库 sql server 2008 开启分布
- 定义服务器游标的属性 将远程表上的数据复制到本地
- 如何把本地的数据库,导入到远程的数据库呢? 如何把本地的数据库中的表的结构和数据库里面的数据传过去呢?数据库的一些版本号
- 用SQL语句将远程SQL Server数据库中表数据导入到本地数据库相应的表中
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- 远程MS SQL数据库和本地MS SQL数据库 WEB管理(1)-- 表结构和数据类型
- sql server 2008 把远程的数据库的数据转移到本地数据数据库里