你的位置:首页 > 数据库

[数据库]用SSMS连接Azure Sql Database 与连接本地库的一些操作区别


背景


我们知道Azure Sql Database 可以降低运维成本、是一种Pass模式,有资源弹性设置,可以自由调整资源自动对应不同业务高峰(当然也可以降低费用成本),也方便项目后期的资源扩展,以及一些其他优点或特性,这就不一一列出。那么数据库开发工程师来说,操作Azure Sql Database 与我们使用的SSMS(Microsoft Sql Server Management Studio)在本地库上操作有哪些区别。
 
我们简单从如下几部分进行比较
1.创建对象比较;(简单列一下Azure 上创建数据库操作,SSMS创建数据库默认省略)
2.连接库比较;
3.操作比较;
 

1.创建对象比较

 
 
 
 
 

 

 
 

 


2.链接库的比较

 



通过上述图可以看到,在azure sql database 中涉及到实例一级的对象都是没有了。
在azure sql database大概总结如下:

1.没有 AlwaysON,没有数据库镜像,没有日志传送,没有复制。 有异地复制可以直接添加数据库辅助副本(库大小是指数据文件大小);
2.没有 agent ;如需执行定时调度可以参考《通过本地Agent监控Azure_sql_database》
3.没有SSIS;
4.不支持实例一级的对象(如不支持全局临时表、没有Profiler等);如需监控可以参考《如何在Azure sql database 下监控正在运行的脚本或某个存储过程是否已运行》
 

3.具体操作方面比较

 
 通过上图发现azure sql database系统数据库中没有tempdb,那能否使用临时表之类的对象?

首先查看当前的azure sql database 版本号

 测试临时表(不是sql server 2016 temporal table)
 


可以使用临时表,不支持使用全局的临时表。


 Pass模式下,某些命令已不支持。


 注意默认的getdate()是UTC时间,与北京时间相差8小时。


 不能在本库显式调用其他库,如:use master

 
默认情况下,azure sql database 不支持跨库操作,需要创建扩展表,建同构同名的表,只能是只读且架构唯一。如要存储过程进行跨库操作,需使用sp_execute_remote调用。
 
ssms 2012界面下存储过程点右键如下图:


SSMS 2016界面下存储过程点右键如下图:


UI界面操作,建议安装最新版本SSMS.或者 exec sp_helptext 加具体的存储过程名称,执行,把执行结果拷出才是存储过程的脚本;
 

参考资料

如何创建扩展表
sp_execute_remote

总结

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.用户名限制,不能使用admin\administrator\sa\guest\root