Sql Server 数据迁移问题的解决

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:   在工作中遇到一个数据迁移的问题。是通过Sql Server 2008 Management studio产生的scripts来解决的。现在来说说此实际问题:生产环境的配置是数据文件有20GB大,log文件有10GB大,实际数据只占用了500MB,所以大部分空间是空的。

  在工作中遇到一个数据迁移的问题。是通过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”。

Generate scripts

选数据库,

image

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

image

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

image

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

image

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

image

 

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

 

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

 

 

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

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
5天前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
13天前
|
SQL DataWorks NoSQL
DataWorks产品使用合集之如何将SQL Server中的数据转存到MongoDB
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
241 1
|
1月前
|
SQL API 流计算
实时计算 Flink版产品使用合集之在Mac M1下的Docker环境中开启SQL Server代理的操作步骤是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
161 1
|
6天前
|
SQL 存储 关系型数据库
关系型数据库中的SQL Server
【6月更文挑战第11天】
43 3
|
5天前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
6天前
|
SQL 弹性计算 API
云服务器 ECS产品使用问题之如何通过API调用阿里云服务器上SQL Server数据库中的数据
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
1月前
|
SQL 关系型数据库 数据库
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
|
2天前
|
SQL 存储 关系型数据库
ArcGIS Engine连接ArcSDE SQL Server(获得所有SDE图层)
ArcGIS Engine连接ArcSDE SQL Server(获得所有SDE图层)
|
1月前
|
SQL 关系型数据库 数据库
阿里云数据库 RDS SQL Server版实战【性能优化实践、优点探析】
本文探讨了Amazon RDS SQL Server版在云数据库中的优势,包括高可用性、可扩展性、管理便捷、安全性和成本效益。通过多可用区部署和自动备份,RDS确保数据安全和持久性,并支持自动扩展以适应流量波动。可视化管理界面简化了监控和操作,而数据加密和访问控制等功能保障了安全性。此外,弹性计费模式降低了运维成本。实战应用显示,RDS SQL Server版能有效助力企业在促销高峰期稳定系统并保障数据安全。阿里云的RDS SQL Server版还提供了弹性伸缩、自动备份恢复、安全性和高可用性功能,进一步优化性能和成本控制,并与AWS生态系统无缝集成,支持多种开发语言和框架。
171 2
|
1月前
|
SQL XML Linux
SQL Server的版本
【5月更文挑战第14天】SQL Server的版本
36 3