Sql Server 数据迁移问题的解决

  在工作中遇到一个数据迁移的问题。是通过Sql Server 2008 Management studio产生的scripts来解决的。现在来说说此实际问题:生产环境的配置是数据文件有20GB大,log文件有10GB大,实际数据只占用了500MB,所以大部分空间是空的。而测试环境因硬盘小,数据文件所在的驱动器总共只有28GB。现在想做的是把生产环境的数据拷贝到测试环境上来。之前的办法都是完整备份。即从生产上做一个完整备份,然后到测试环境上恢复,就可以将数据很好地复制到测试环境。完整备份有挺多好处,比如,数据和log都和生产环境保持一样,权限,还有自增属性等都是和生产环境一样。可是在这里却不能用,因为测试环境的驱动器空间不够。完整备份要求目标驱动器有至少30GB,而现在只有28GB,这就注定了完整备份再恢复是在此处做不了的。和DBA聊了这些限制后,DBA建议我们将新的硬盘或者其他的存储空间加到该服务器上,这样问题就解决了。但是我们当初的策略就是利用现有的服务器,不增加硬盘,不增加存储空间,所以DBA的建议我们没有办法采用。只有另外寻找办法。DBA说也许可以通过将生产环境的数据库压缩一下,再来进行备份和恢复操作。比如将现有数据库压缩到数据文件10GB,log文件5GB,那么就可以继续用备份和恢复操作来进行。测试环境上也可以容纳得下总共15GB的数据+log的空间占用(有28GB)。这办法行的通,但问题是,刚好有一个年底封闭期,不让对生产环境做改动。这就有点难办了。必须得想别的办法才行。找了一下,一种办法是用数据引入或者数据输出,另一种办法是将所有用户对象都变成脚本,再在测试环境中执行一下,就复制了所有数据。以前用过一些数据引入或者数据输出,觉得问题比较多,有些问题还比较棘手。于是选择了将所有用户对象都变成脚本。但是印象中Sql Server似乎没有这个功能的,找了一下,居然有点发现:Sql Server 2008支持将用户对象都变成脚本。

  下面说一下怎么做:找到数据库这一级,右键点该数据库,选“Tasks”,再“Generate Scripts”。

选数据库,

选择输出脚本的选项。上下看了一遍,稍微改几个就可以了。

“Include If NOT EXISTS”,“Script drop”都选了True。因为我们要复制数据,“Script data”也选了True,另外我们也需要索引,所以“Script Indexes”也选了True。据我们说知,这个数据库没有用触发器,所以有些选项就直接用默认的。然后是选择表,视图,存储过程,自定义函数等。(以下示例的图只有表)

再选择具体的表,视图,存储过程,自定义函数等。我们这里是全选。

将脚本产生到一个文件中去。

 

最后完成。检查一下产生的脚本。

 

USE [learn]
GO
/****** Object:  Table [dbo].[Student]    Script Date: 12/21/2010 21:42:46 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Student]') AND type in (N'U'))
DROP TABLE [dbo].[Student]
GO
/****** Object:  Table [dbo].[Student]    Script Date: 12/21/2010 21:42:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Student]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Student](
    [StudentID] [int] IDENTITY(1,1) NOT NULL,
    [StudentName] [nvarchar](50) NOT NULL,
    [Gender] [nchar](10) NOT NULL,
    [BirthDate] [date] NOT NULL,
    [Address] [nvarchar](100) NULL,
CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED
(
    [StudentID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET IDENTITY_INSERT [dbo].[Student] ON
INSERT [dbo].[Student] ([StudentID], [StudentName], [Gender], [BirthDate], [Address]) VALUES (1, N'王超', N'男         ', CAST(0x89F90A00 AS Date), N'北京东城区万台路1300号')
INSERT [dbo].[Student] ([StudentID], [StudentName], [Gender], [BirthDate], [Address]) VALUES (2, N'李然', N'男         ', CAST(0x0FFD0A00 AS Date), N'西安二碗区')
INSERT [dbo].[Student] ([StudentID], [StudentName], [Gender], [BirthDate], [Address]) VALUES (3, N'张三', N'男         ', CAST(0x7CF70A00 AS Date), N'廊坊店村区')
INSERT [dbo].[Student] ([StudentID], [StudentName], [Gender], [BirthDate], [Address]) VALUES (4, N'梅雨', N'女         ', CAST(0xD1040B00 AS Date), N'西村区')
INSERT [dbo].[Student] ([StudentID], [StudentName], [Gender], [BirthDate], [Address]) VALUES (5, N'陈骏', N'男         ', CAST(0x69090B00 AS Date), N'一号地区')
INSERT [dbo].[Student] ([StudentID], [StudentName], [Gender], [BirthDate], [Address]) VALUES (6, N'马欣', N'女         ', CAST(0xB3120B00 AS Date), N'石家庄端区仓防')
INSERT [dbo].[Student] ([StudentID], [StudentName], [Gender], [BirthDate], [Address]) VALUES (7, N'丁一若', N'男         ', CAST(0x01E60A00 AS Date), N'太原')
INSERT [dbo].[Student] ([StudentID], [StudentName], [Gender], [BirthDate], [Address]) VALUES (8, N'冷丁', N'男         ', CAST(0x30F30A00 AS Date), N'乌鲁木齐')
INSERT [dbo].[Student] ([StudentID], [StudentName], [Gender], [BirthDate], [Address]) VALUES (9, N'诸葛健文', N'女         ', CAST(0x7C150B00 AS Date), N'贵阳')
INSERT [dbo].[Student] ([StudentID], [StudentName], [Gender], [BirthDate], [Address]) VALUES (10, N'东格', N'男         ', CAST(0xCB040B00 AS Date), N'合肥')
INSERT [dbo].[Student] ([StudentID], [StudentName], [Gender], [BirthDate], [Address]) VALUES (11, N'马波涛', N'男         ', CAST(0xB30D0B00 AS Date), N'福州')
SET IDENTITY_INSERT [dbo].[Student] OFF

 

 

似乎满足我们的要求。再拿到测试环境一执行。好,测试环境就都有数据了,视图,存储过程等也都有了。问题解决。

时间: 2024-09-19 00:51:07

Sql Server 数据迁移问题的解决的相关文章

sqlserver-关于oracle向sql server数据迁移问题

问题描述 关于oracle向sql server数据迁移问题 请教各位大神怎么让这个接口程序出来呢 解决方案 在 SQL Server 服务器上要装 Oracle 的客户端,并且做好配置. 其实所有的数据库都需要有客户端才能访问,谁叫SQL Server是微软的呢,装系统的时候就偷偷地把客户端装上去了. 如果是一次性迁移,不如Oracle生成脚本,人工修改一下,到SQL Server中执行. 解决方案二: 可以参考一下这个链接 Microsoft OLE DB Provider for Orac

将SQL Server数据迁移到MySQL的方法

一.SQL Server中常用数据类型与MySQL不同的地方     二.将SQL Server数据迁移到MySQL需要注意的一些问题     1.唯一索引的不同,sql server的唯一索引的字段只能允许存在一个null值,而mysql,一直oracle中唯一索引对应的字段都允许存在多个null值.   2.存储过程的语法存在很大的不同,存储过程的迁移是最麻烦的,需要仔细修改.   3.程序中部分写的SQL语句由于语法的不同也要相应的修改.   三.将SQL Server数据迁移到MySQL

navicat工具来将SQL Server数据迁移到MySQL

下面来说说用navicat工具来将SQL Server数据迁移到MySQL上: 1. 新建需要迁移的数据库 2. 打开数据库,点击导入向导 3.  选择数据导入格式 4. 选择数据源 5. 连接属性 6. 选定要迁移的表 7. 定义目标表 8. 更改实际情况对目标表进行更改 9.  选择导入模式 10. 开始导入 11. 导入后结果 至此,迁移完成,可以更改实际情况再对迁移后的表进行更改. 顶 0 踩

SQL Server数据迁移至PostgreSQL出错的解释以及解决方案_PostgreSQL

问题重现: 1.PG客户端: postgres=# create table text_test (id int,info text); CREATE TABLE postgres=# insert into text_test values (1,E'\0x00'); ERROR: invalid byte sequence for encoding "UTF8": 0x00 2.SQL Server产生数据 create table test_varchar(id int,name

如何将SQL Server数据迁移到MySQL

一.背景 由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Server的数据转移到MySQL:由于涉及的表比较多,所以想在MySQL中生成对应表并导入数据: 上网找了些资料,如:将ACCESS和MSSQL导入MYSQL中.MySQL Migration 实现 MSSQL 到 MySQL数据迁移,虽然不知道里面的做法是否可以成功转移,但是里面的过程比较复杂,没有去尝试,后来自己找到了方法,最重要就是简单和准确(暂时没发现明显的BUG),这里

SQL Server利用HashKey计算列解决宽字段查询的性能问题

SQL Server利用HashKey计算列解决宽字段查询的性能问题 主人翁        本文主人翁:MSSQL菜鸟和MSSQL老鸟. 问题提出        某年某月某日,某MSSQL菜鸟满脸愁容的跑到老鸟跟前,心灰意懒的对老鸟说"我最近遇到一个问题,很大的问题,对,非常大的问题".老鸟不急不慢的推了推2000度超级近视眼镜框,慢吞吞的说:"说来听听".        "我有一个100万数据量的表,有一个宽度为7500字段,不幸的是现在我需要根据这个字

SQL SERVER 2000 9003错误的解决方法(只适用于SQL2000)_MsSql

关于SQLSERVER 9003错误解决方法 只适用于SQL2000: "无法打开新数据库 'POS'.CREATE DATABASE 中止. (Microsoft SQL Server,错误: 9003)" 看是9003错误,就想到可能是由于日志文件的原因,再看数据库文件可能损坏,于是想到dbcc checkdb指令. 方法如下: 1.我们使用默认方式建立一个供恢复使用的数据库(如pos).可以在SQL Server Enterprise Manager里面建立. 2.停掉数据库服务

SQL SERVER 2000 9003错误的解决方法(只适用于SQL2000)

关于SQLSERVER 9003错误解决方法 只适用于SQL2000: "无法打开新数据库 'POS'.CREATE DATABASE 中止. (Microsoft SQL Server,错误: 9003)" 看是9003错误,就想到可能是由于日志文件的原因,再看数据库文件可能损坏,于是想到dbcc checkdb指令. 方法如下: 1.我们使用默认方式建立一个供恢复使用的数据库(如pos).可以在SQL Server Enterprise Manager里面建立. 2.停掉数据库服务

小结SQL Server连接失败错误的解决

server|错误|解决     在使用 SQL Server 的过程中,用户遇到的最多的问题莫过于连接失败了.一般而言,有以下两种连接 SQL Server 的方式:    一是利用 SQL Server 自带的客户端工具,如企业管理器.查询分析器.事务探查器等.     二是利用用户自己开发的客户端程序,如ASP 脚本.VB程序等,客户端程序中又是利用 ODBC 或者 OLE DB 等连接 SQL Server.下面,我们将就这两种连接方式,具体谈谈如何来解决连接失败的问题.     一.客