背景
我们知道Azure Sql Database 可以降低运维成本、是一种Pass模式,有资源弹性设置,可以自由调整资源自动对应不同业务高峰(当然也可以降低费用成本),也方便项目后期的资源扩展,以及一些其他优点或特性,这就不一一列出。那么数据库开发工程师来说,操作Azure Sql Database 与我们使用的SSMS(Microsoft Sql Server Management Studio)在本地库上操作有哪些区别。
我们简单从如下几部分进行比较
1.创建对象比较;(简单列一下Azure 上创建数据库操作,SSMS创建数据库默认省略)
2.连接库比较;
3.操作比较;
1.创建对象比较
![](https://img2018.cnblogs.com/blog/1022370/201902/1022370-20190220135534464-991228861.png)
2.链接库的比较
通过上述图可以看到,在azure sql database 中涉及到实例一级的对象都是没有了。
在azure sql database大概总结如下:
1.没有 AlwaysON,没有数据库镜像,没有日志传送,没有复制。 有异地复制可以直接添加数据库辅助副本(库大小是指数据文件大小);
2.没有 agent ;如需执行定时调度可以参考《通过本地Agent监控Azure_sql_database》
3.没有SSIS;
4.不支持实例一级的对象(如不支持全局临时表、没有Profiler等);如需监控可以参考《如何在Azure sql database 下监控正在运行的脚本或某个存储过程是否已运行》
3.具体操作方面比较
![](https://img2018.cnblogs.com/blog/1022370/201902/1022370-20190220135936014-916847744.png)
通过上图发现azure sql database系统数据库中没有tempdb,那能否使用临时表之类的对象?
首先查看当前的azure sql database 版本号
![](https://img2018.cnblogs.com/blog/1022370/201902/1022370-20190220135953295-523007599.png)
测试临时表
(不是sql server 2016 temporal table)
![](https://img2018.cnblogs.com/blog/1022370/201902/1022370-20190220140009895-1202283192.png)
可以使用临时表,不支持使用全局的临时表。
![](https://img2018.cnblogs.com/blog/1022370/201902/1022370-20190220140054915-451638883.png)
Pass模式下,某些命令已不支持。
![](https://img2018.cnblogs.com/blog/1022370/201902/1022370-20190220140110066-1172175718.png)
注意默认的getdate()是UTC时间,与北京时间相差8小时。
![](https://img2018.cnblogs.com/blog/1022370/201902/1022370-20190220140127336-1557765538.png)
不能在本库显式调用其他库,如:use master
默认情况下,azure sql database 不支持跨库操作,需要创建扩展表,建同构同名的表,只能是只读且架构唯一。如要存储过程进行跨库操作,需使用sp_execute_remote调用。
ssms 2012界面下存储过程点右键如下图:
![](https://img2018.cnblogs.com/blog/1022370/201902/1022370-20190220140142936-2021723440.png)
SSMS 2016界面下存储过程点右键如下图:
![](https://img2018.cnblogs.com/blog/1022370/201902/1022370-20190220140158806-1843126947.png)
UI界面操作,建议安装最新版本SSMS.或者 exec sp_helptext 加具体的存储过程名称,执行,把执行结果拷出才是存储过程的脚本;
参考资料
总结
azure sql database 与ssms相比:
1.没有 AlwaysON,没有数据库镜像,没有日志传送,没有复制。 有异地复制可以直接添加数据库辅助副本(库大小是指数据文件大小);
2.没有 agent ;如需执行定时调度可以参考《通过本地Agent监控Azure sql database》
3.没有SSIS;
4.不支持实例一级的对象(例如不支持全局变量、没有Profiler等);如需监控可以参考《如何在Azure sql database 下监控正在运行的脚本或某个存储过程是否已运行》
5.有些命令不支持,因azure sql database 是Pass模式;
6.注意默认getdate()是取UTC时间,与北京时间相差8小时;
7.不能在本库显式调用其他库;
8.默认情况下,azure sql database 不支持跨库操作,需要创建扩展表,建同构同名的表,只能是只读且架构唯一;
9.azure sql database 是基于v12的引擎,要在UI界面上操作建议安装ssms 2016版操作。
10.用户名限制,不能使用adminadministratorsaguest
oot