sqlserver2014数据库导出与导入
写在前面
sqlserver数据库为数据的导入导出提供了很多途径,一般地我们在已经有数据源的情况下(即服务器已经安装了sqlserver),这时使用一个全新的数据库,需要创建数据库使用。在实际项目中,我们往往已经有数据库的初始化版本,这时候就需要将初始化的数据库文件导入新的数据源。这时候我们最常用的就是使用数据库的备份文件,在新的数据源文件中还原数据库。但是一般地生产环境不允许这样的方式恢复数据库,只能通过sql脚本方式来恢复。那么下面我将总结下使用备份文件还原数据库和sql文件恢复数据库的具体办法。
1.使用的备份文件
-
首先我们应备份数据库,选择要备份数据库,右键 任务 ->备份 如下图
-
选择数据库备份类型为完整,点击添加选择备份文件的存放路径,点击确定生成备份文件(以.bak结尾) 如下图
-
当我们在另一个数据源需要恢复数据库时,选择数据库,右键 选择还原数据库 如下图
-
将备份文件.bak放在本地某路径,点击 选择 设备->添加 ,选择对应的路径下的.bak文件进行还原 如下图
2.使用SQL文件
-
首先我们选择要导出的数据库,右键选择 任务->生成脚本,然后点击下一步。如下图
- 选择特定的数据库对象,勾选所有选项(是要导出当前数据库的所有表、存储过程、函数等),点击下一步。如下图
- 在文件名中选择导出SQL文件的存放地址,点击 高级 ,在弹出框中找到 要编写脚本的数据类型 一项,选择架构和数据,即可导出结构和数据。如下图
至此已经完成了把数据库导出为SQL脚本的操作,接下来就是如何在另一个数据源下恢复这个数据库。因为我们导出数据库如有存量数据的情况下,SQL文件一般较大,直接执行会很就慢甚至造成数据库卡顿。如果我们恢复较大的sql文件,可以使用windows自带的sqlcmd,使用命令导入。具体步骤如下:
先新建一个数据库,用于存放这个sql文件的数据和结构,如在生产中,为了使用方便,要建立和测试环境相同账户名称数据库。建立数据库可以使用客户端直接创建,具体做法是选择数据库 ,右键 ,选择新建数据库即可创建,使用sql创建,语句如下:
IF EXISTS(SELECT * FROM sysdatabases WHERE name='student')
DROP DATABASE student
GO
CREATE DATABASE student --创建数据库
ON PRIMARY --定义在主文件组上的文件
(NAME=stu_date, --逻辑名称
FILENAME='E:\TEST\student.mdf', --物理名称
SIZE=10, --初始大小为10mb
MAXSIZE=unlimited, --最大限制为无限大
FILEGROWTH=10%) --主数据文件增长幅度为10%
LOG ON --定义事务日志文件
(NAME=stu_log, --逻辑名称
FILENAME='E:\TEST\student.ldf', --物理名称
SIZE=1, --初始大小为1mb
MAXSIZE=5, --最大限制为5mb
FILEGROWTH=1) --事务日志增长幅度为1mb`
有了数据库后,我们使用cmd命令行,键入如下命令
sqlcmd -S localhost -U sa -P 123456 -d les_traacc -i E:\test.sql
参数说明:
-S 后面 localhost指导入本地数据库,要导入服务器,应更换为服务器ip
-U 后面为数据源 账户名
-P后面为数据源 密码
-d 后面为需要导入的sql文件绝对路径
以下是实际使用后补充的注意事项:
1.在实际项目中,因为项目文件较大,导出的sql文件也较大,那么用命令行执行就会很慢,建议按照表、自定义函数、存储过程分别导出为单独的sql文件,这样导入时时间短,需要查看sql文件也不会因为很大而打开过慢。
2.如果导出的sql文件中,导出了创建数据库的用户信息,即sql开头有create database 的操作,此时如果数据库中已经有同名数据库的情况下,需要更改mdf、ldf的文件路径。如需手动创建用户,可以删除create database 这一段sql,即可导入成功。
3.导入数据库文件时发现了表中的数据中文乱码,发现导出的脚本默认格式为UTF-16,尝试更换为UTF-8后仍然乱码。因此判定导致乱码的原因应该和数据库创建有关系。最终解决方案如下:创建空数据库时,选项- 排序规则- Chineses_PRC_CI_AS .。这里需要注意的是我们建的新库要和导出这个sql文件的源数据库排序规则保持一致。
4.由于命令行导入大文件时,无法查看日志,需要添加 -o E:/text.txt 把命令行日志输出到文件中方便我们查看。完整命令如下:
sqlcmd -S localhost -U sa -P 112233 -d les_traacc -i E:\test.sql -o E:/text.txt