---恢复内容开始---
没有共享存储和仲裁盘的SQL Server 2012HADR故障手动切换TSQL
因为一些原因有些SQLSERVER集群中没有配置仲裁盘,只有一主一辅两个实例。
配置如下:
USE [master] GO CREATE AVAILABILITY GROUP [ak51DB] WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY) FOR DATABASE [ak51Activity],[ak51Load] REPLICA ON N'ak51-DB35' WITH (ENDPOINT_URL = N'TCP://ak51-DB35.580top.com:5022', FAILOVER_MODE = MANUAL, AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, SESSION_TIMEOUT = 10, BACKUP_PRIORITY = 100, PRIMARY_ROLE(ALLOW_CONNECTIONS = ALL), SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)), N'ak51-DB36' WITH (ENDPOINT_URL = N'TCP://ak51-DB36.580top.com:5022', FAILOVER_MODE = MANUAL, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, SESSION_TIMEOUT = 10, BACKUP_PRIORITY = 50, PRIMARY_ROLE(ALLOW_CONNECTIONS = ALL), SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)); GO
这时候是不具备SQL Server 2012 Always on的自动故障转移条件的 但是它万一出现主机故障时,需要手动强起辅机的 脚本很简单:
ALTER AVAILABILITY GROUP [ak51db] FORCE_FAILOVER_ALLOW_DATA_LOSS;
需要注意的是:如果是异步提交,强起辅机可能会有数据丢失
当主机重新连线时,再切回来后,会发现高可用性组处于“未同步"状态
这时候需要运行TSQL重新恢复可用性组:
ALTER DATABASE [ak51Load] SET HADR RESUME; ALTER DATABASE [ak51Activity] SET HADR RESUME;
至于我为什么不选用高可用性侦听组和仲裁盘的原因,这里很复杂。。。
原文:http://www.580top.com/html/201303/dba_2129.htm
---恢复内容结束---
---恢复内容开始---
没有共享存储和仲裁盘的SQL Server 2012HADR故障手动切换TSQL
因为一些原因有些SQLSERVER集群中没有配置仲裁盘,只有一主一辅两个实例。
配置如下:
USE [master] GO CREATE AVAILABILITY GROUP [ak51DB] WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY) FOR DATABASE [ak51Activity],[ak51Load] REPLICA ON N'ak51-DB35' WITH (ENDPOINT_URL = N'TCP://ak51-DB35.580top.com:5022', FAILOVER_MODE = MANUAL, AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, SESSION_TIMEOUT = 10, BACKUP_PRIORITY = 100, PRIMARY_ROLE(ALLOW_CONNECTIONS = ALL), SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)), N'ak51-DB36' WITH (ENDPOINT_URL = N'TCP://ak51-DB36.580top.com:5022', FAILOVER_MODE = MANUAL, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, SESSION_TIMEOUT = 10, BACKUP_PRIORITY = 50, PRIMARY_ROLE(ALLOW_CONNECTIONS = ALL), SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)); GO
这时候是不具备SQL Server 2012 Always on的自动故障转移条件的 但是它万一出现主机故障时,需要手动强起辅机的 脚本很简单:
ALTER AVAILABILITY GROUP [ak51db] FORCE_FAILOVER_ALLOW_DATA_LOSS;
需要注意的是:如果是异步提交,强起辅机可能会有数据丢失
当主机重新连线时,再切回来后,会发现高可用性组处于“未同步"状态
这时候需要运行TSQL重新恢复可用性组:
ALTER DATABASE [ak51Load] SET HADR RESUME; ALTER DATABASE [ak51Activity] SET HADR RESUME;
至于我为什么不选用高可用性侦听组和仲裁盘的原因,这里很复杂。。。
原文:http://www.580top.com/html/201303/dba_2129.htm
---恢复内容结束---
本文链接
一.需要分析
查询各班各门课程的考试人数和及格人数,要求将查询结果显示在同一个表中,包括班级,课程号,考试人数和及格人数
二.实现步骤
--1.创建临时表 "#考试人数"
create table #考试人数(
班级 char(20),
课程号 char(3),
考试人数 int
)
--2.查询各班各门课程的考试人数,并保存在临时表"#考试人数"中
insert into #考试人数
select 班级,课程号,COUNT(选修.学号) as 考试人数
from 学生 inner join 选修 on 学生.学号=选修.学号
group by 班级,课程号
--3.创建临时表"#及格人数"
create table #及格人数(
班级 char(20),
课程号 char(3),
及格人数 int
)
--4.查询各班各门课程的及格人数,并保存在临时表"#及格人数"中
insert into #及格人数
select 班级,课程号,COUNT(选修.学号) as 及格人数
from 学生 inner join 选修 on 学生.学号=选修.学号
where 成绩>60
group by 班级,课程号
--5.将两个临时表进行左连接,得出最后的查询结果
select #考试人数.班级,#考试人数.课程号,考试人数,及格人数
from #考试人数 left join #及格人数 on #考试人数.班级=#及格人数.班级 and #考试人数.课程号=#及格人数.课程号
三.查询结果如图所示
本文链接
包括改变字段的位置,增加列,更改列名称,更改列数据类型,列长度,增加标识列,增加主键,约束
上面这些在做数据库升级或者迁移的时候很多时候都要用到的
1.改变字段位置,只需要在表设计器中拖动字段到其他地方
2.添加新列
例如为adventurworks数据库中employees表添加备注列(Comment),数据类型为字符型(变长型,长度50字符),该列允许为空
1 ALTER TABLE table_name
2 ADD column_name data_type NULL
1 USE [AdventureWorks]
2 GO
3 ALTER TABLE [HumanResources].[Employee]
4 ADD Comment CHAR(50) NULL
5 GO
3.更改列名称
更改列名称不会影响列中的数据,但如果其他数据库对象引用了已修改的列,则用户必须同时做相应的修改
1 --将表test13中的列名由e重命名为x
2 --语法:exec sp_rename '表名.原列名','新列名','column';
3 USE [pratice]
4 GO
5 exec sp_rename 'dbo.test13.e','x','column';
4.更改列的数据类型以及长度
当表中有数据的时候,要注意转换的时候的长度和精度,以及转换的规则
1 --语法
2 ALTER TABLE table_name
3 ALTER COLUMN column_name data_type
1 --例如:将Employees表中的备注列Remark的数据类型更改为字符型(变长型,长度为255字符)
2 USE [AdventureWorks]
3 GO
4 ALTER TABLE [HumanResources].[Employee]
5 ALTER COLUMN Remark VARCHAR(255)
5.增加标识列
一个表只能有一个列定义为IDENTITY属性,而且该列必须以tinyint,smallint,int,bigint,numeric,decimal数据类型定义,标识符列
不允许空值。按需指定种子和增量值,二者默认值均为1。
1 --给Employees表添加一个员工编号(EmployeesCode)列,并将其设置为标识列
2 USE [AdventureWorks]
3 GO
4 ALTER TABLE [HumanResources].[Employee]
5 ADD EmployeesCode INT IDENTITY(1,1) NOT NULL
6.定义主键
每张表都应该有一个主键,主键可以由一列或者多列组成(复合主键),标识数据的唯一性,提高查询和排序速度
如果是复合主键,那么这些列的里的数据都不能重复,不单只是某一列
1 --使用TSQL语句为表定义主键约束保证数据完整性
2 --为Employees表添加主键约束,将EmployeeID,LoginID,ManagerID列设置为复合主键
3 USE [AdventureWorks]
4 GO
5 ALTER TABLE [HumanResources].[Employee]
6 ADD CONSTRAINT PK_EMPLOYEES
7 PRIMARY