-- Server Role 추가
EXEC sp_addsrvrolemember  '로그인이름' , '역할이름'
 
-- Database Role 추가
EXEC sp_addrolemember  '역할이름' , '데이터베이스 사용자이름' 

참고 자료

http://egloos.zum.com/totoriver/v/3158687

 

[MS-SQL] ▣ 로그인, 사용자, 사용권한, 역할

로그인- SQL Server에 접속할 수 있는 것을 말함- Windows의 'administrator' = '컴퓨터이름\Administrator'- 'Administrator' 그룹의 사용자들= 'BUILTIN\Administrators'- 'sa'는 디폴트로 사용할 수 없게 되어있지만 하위

egloos.zum.com

 

-- MSSQL Hostname은 캐시되고 있기 때문에, OS상 hostname이 변경되면 수동으로 변경해 주어야함.

-- 확인
select @@servername
select host_name()

-- 변경
exec sp_dropserver '기존 hostname명'
exec sp_addserver '변경된 hostname명', 'local'

-- DB 재시작
-- 아래 스크립트를 사용하여 Long Running Check Job을 '[DBA] Long Running Job Check' 이름으로 생성

declare @JOB_INTERVAL_SEC table
(
	job_id   uniqueidentifier
,	run_interval_sec int
)

insert into @JOB_INTERVAL_SEC
select	job_id, datediff(SECOND, min(run_datetime_2), min(run_datetime_1)) as run_interval_sec
from 
(
	select	job_id
		,	case when job_num = 1 then run_datetime else getdate() end AS run_datetime_1
		,	case when job_num = 2 then run_datetime else getdate() end AS run_datetime_2
	from 
	(
		select	job_id
			,	convert(datetime, format(run_date,'####-##-##') + ' ' + format(run_time,'####:##:##'), 120) AS run_datetime
			,	row_number() over(partition by job_id order by  instance_id desc ) AS job_num
		from [msdb].[dbo].[sysjobhistory]
		where step_id = 0
	) AS T
	where job_num in (1,2)
) TT
group by job_id

--select * from @JOB_INTERVAL_SEC

declare	@cur_job_name sysname
	,	@cur_job_id uniqueidentifier
	,	@cur_start_execution_date datetime
	,	@cur_stop_execution_date datetime
	,	@cur_last_executed_step_date datetime
	,	@cur_next_scheduled_run_date datetime
	,	@cur_run_interval_sec int
	,	@cur_running_second int
	,	@cur_error_message varchar(1024)

declare cur cursor for

select	jam.job_name, jam.job_id
	,	sja.start_execution_date, sja.stop_execution_date, sja.last_executed_step_date, sja.next_scheduled_run_date
	,	JIS.run_interval_sec
	,	datediff(second, start_execution_date, getdate()) AS running_second
from
(
	select max(sa.session_id) AS session_id_max, sa.job_id, sj.name AS job_name from msdb.dbo.sysjobactivity sa
	inner join msdb.dbo.sysjobs sj
	on sa.job_id = sj.job_id
	where sj.enabled = 1
	group by  sa.job_id, sj.name
)  jam
inner join  msdb.dbo.sysjobactivity sja
on jam.session_id_max = sja.session_id
and jam.job_id = sja.job_id
inner join @JOB_INTERVAL_SEC JIS
on sja.job_id = JIS.job_id
where sja.stop_execution_date IS NULL
and datediff(second, start_execution_date, getdate()) > JIS.run_interval_sec

open cur
fetch next from cur into @cur_job_name, @cur_job_id, @cur_start_execution_date, @cur_stop_execution_date, @cur_last_executed_step_date, @cur_next_scheduled_run_date, @cur_run_interval_sec, @cur_running_second
		
while @@fetch_status = 0
begin
	set @cur_error_message = '[error] : the job schedule has not yet ended !!   ';
	set @cur_error_message = @cur_error_message + '[job_name] : ' + convert(varchar(100),@cur_job_name) + ' [cur_job_id] : ' + convert(varchar(100),@cur_job_id) + ' [cur_start_execution_date] : ' + convert(varchar(100),@cur_start_execution_date,121)
							+ ' [cur_run_interval_sec] : ' + convert(varchar(100),@cur_run_interval_sec) + ' [cur_running_second] : ' + convert(varchar(100),@cur_running_second)
							--+ ' cur_stop_execution_date : ' + convert(varchar(100),@cur_stop_execution_date,121) + ' cur_last_executed_step_date : ' + convert(varchar(100),@cur_last_executed_step_date) + ' cur_next_scheduled_run_date : ' + convert(varchar(100),@cur_next_scheduled_run_date)							
	
	--select @cur_job_name, @cur_run_interval_sec, @cur_running_second
	--select @cur_error_message
	if @cur_job_name <>  '[DBA] Long Running Job Check'
	BEGIN
		RAISERROR(@cur_error_message, 16,1) 
	END

	fetch next from cur into @cur_job_name, @cur_job_id, @cur_start_execution_date, @cur_stop_execution_date, @cur_last_executed_step_date, @cur_next_scheduled_run_date, @cur_run_interval_sec, @cur_running_second
end

close cur
deallocate cur

'DB Skill > MSSQL' 카테고리의 다른 글

MSSQL 계정에 Role 추가  (0) 2021.06.06
MSSQL 서비스 도중 Hostname 변경  (0) 2021.06.06
MSSQL Database 암호화 키 삭제  (0) 2021.06.06
MSSQL CPU 선호도 설정  (0) 2021.06.06
MSSQL Table Constraints Check 비활성화  (0) 2021.06.06
-- 데이터 베이스 암호화 제거
ALTER DATABASE AdventureWorks2012  
SET ENCRYPTION OFF;  

-- 암호화 키 삭제
DROP DATABASE ENCRYPTION KEY  

-- 데이터베이스 암호화 확인
SELECT db_name(database_id), encryption_state  
FROM sys.dm_database_encryption_keys;  


---------------------------
---------------------------

ALTER DATABASE AdventureWorks2012  
SET ENCRYPTION OFF;  
GO  
/* Wait for decryption operation to complete, look for a   
value of  1 in the query below. */  
SELECT encryption_state  
FROM sys.dm_database_encryption_keys;  
GO  
USE AdventureWorks2012;  
GO  
DROP DATABASE ENCRYPTION KEY;  
GO  

---------------------
ALTER DATABASE AdventureWorksPDW2012  
    SET ENCRYPTION OFF;  
GO  
/* Wait for decryption operation to complete, look for a   
value of  1 in the query below. */  
WITH dek_encryption_state AS   
(  
    SELECT ISNULL(db_map.database_id, dek.database_id) AS database_id, encryption_state  
    FROM sys.dm_pdw_nodes_database_encryption_keys AS dek  
        INNER JOIN sys.pdw_nodes_pdw_physical_databases AS node_db_map  
           ON dek.database_id = node_db_map.database_id AND dek.pdw_node_id = node_db_map.pdw_node_id  
        LEFT JOIN sys.pdw_database_mappings AS db_map  
            ON node_db_map .physical_name = db_map.physical_name  
        INNER JOIN sys.dm_pdw_nodes AS nodes  
            ON nodes.pdw_node_id = dek.pdw_node_id  
    WHERE dek.encryptor_thumbprint <> 0x  
)  
SELECT TOP 1 encryption_state  
       FROM  dek_encryption_state  
       WHERE dek_encryption_state.database_id = DB_ID('AdventureWorksPDW2012 ')  
       ORDER BY (CASE encryption_state WHEN 3 THEN -1 ELSE encryption_state END) DESC;   
GO  
USE AdventureWorksPDW2012;  
GO  
DROP DATABASE ENCRYPTION KEY;  
GO  

참고 자료

https://docs.microsoft.com/ko-kr/sql/t-sql/statements/drop-database-encryption-key-transact-sql?view=sql-server-ver15 

 

DROP DATABASE ENCRYPTION KEY(Transact-SQL) - SQL Server

DROP DATABASE ENCRYPTION KEY(Transact-SQL)

docs.microsoft.com

'DB Skill > MSSQL' 카테고리의 다른 글

MSSQL 서비스 도중 Hostname 변경  (0) 2021.06.06
MSSQL Long Running Job Check  (0) 2021.06.06
MSSQL CPU 선호도 설정  (0) 2021.06.06
MSSQL Table Constraints Check 비활성화  (0) 2021.06.06
MSSQL backup history delete  (0) 2021.06.06
-- 1번 NUMA Node CPU 사용하지 않도록 설정
ALTER SERVER CONFIGURATION SET PROCESS AFFINITY NUMANODE = 1
GO

-- CPU 선호도를 Auto로 설정
ALTER SERVER CONFIGURATION  
SET PROCESS AFFINITY CPU=AUTO;  

GUI 설정

참고 자료

https://docs.microsoft.com/ko-kr/sql/t-sql/statements/alter-server-configuration-transact-sql?view=sql-server-ver15#Affinity

 

ALTER SERVER CONFIGURATION(Transact-SQL) - SQL Server

ALTER SERVER CONFIGURATION(Transact-SQL)

docs.microsoft.com

https://www.sqlpassion.at/archive/2017/10/02/setting-a-processor-affinity-in-sql-server-the-unwanted-side-effects/

 

Setting a Processor Affinity in SQL Server – the (unwanted) Side-Effects |

(Be sure to checkout the FREE SQLpassion Performance Tuning Training Plan - you get a weekly email packed with all the essential knowledge you need to know about performance tuning on SQL Server.) Today I want to talk about a very important topic in SQL Se

www.sqlpassion.at

 

-- Disable all table constraints
ALTER TABLE MyTable NOCHECK CONSTRAINT ALL

-- Enable all table constraints
ALTER TABLE MyTable WITH CHECK CHECK CONSTRAINT ALL

-- Disable single constraint
ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint

-- Enable single constraint
ALTER TABLE MyTable WITH CHECK CHECK CONSTRAINT MyConstraint

backup history delete

-- 2019년 1월 1일 이전 데이터 모두 삭제
EXEC SP_DELETE_BACKUPHISTORY '1/1/2019'


-- 삭제 시간이 너무 오래 걸리는 경우... 인덱스 생성.
CREATE INDEX [media_set_id] ON [dbo].[backupset] ([media_set_id])
CREATE INDEX [restore_history_id] ON [dbo].[restorefile] ([restore_history_id])
CREATE INDEX [restore_history_id] ON [dbo].[restorefilegroup] ([restore_history_id])

방법

데이터베이스 파일 (MDF, NDF)에 대해 초기화(Zeroing)하지 않고 즉시 생성되도록 하려면 SQL Server 서비스 시작계정에 대해 [볼륨 유지관리 작업 수행] (Perform Volume Maintenance Tasks) 권한이 부여되어 있어야 합니다.
권한을 부여해 준 후 SQL Server 서비스를 재시작해줘야 적용되며, ERRORLOG에서 권한 적용 여부를 확인할 수 있습니다

  1. 이터 파일을 생성할 컴퓨터에서 로컬 보안 정책 애플리케이션(secpol.msc)을 엽니다.
  2. 왼쪽 창에서 로컬 정책 을 확장한 다음 사용자 권한 할당 을 클릭합니다.
  3. 오른쪽 창에서 '볼륨 유지 관리 작업 수행'(Perform volumn maintenance tasks) 을 두 번 클릭합니다.
  4. 사용자 또는 그룹 추가 를 클릭하고 SQL Server 서비스를 실행하는 계정(Default: NT SERVICE\MSSQLSERVER)을 추가합니다.
  5. 적용 을 클릭한 다음 모든 로컬 보안 정책 대화 상자를 닫습니다.
  6. SQL Server 서비스를 다시 시작합니다

확인

SQLServer 재시작 이후 ERRORLOG에서 권한 적용 여부를 확인

sp_readerrorlog
Database Instant File Initialization: 사용. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.

참고 자료

[https://docs.microsoft.com/ko-kr/sql/relational-databases/databases/database-instant-file-initialization?view=sql-server-ver15\]

방법 1

EXEC sp_MSforeachtable @command1="print '?' DBCC DBREINDEX ('?', '', 90)"

--update stats

방법 2

-- Index Rebuild
DECLARE @i int, @sql varchar(1000)
DECLARE @tablename varchar(1000),@ownerName varchar(1000)
SET @i = 1
DECLARE DB_Cursor CURSOR FOR
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_SCHEMA, TABLE_NAME
OPEN DB_Cursor
FETCH NEXT FROM DB_Cursor
INTO @ownerName, @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql='ALTER INDEX ALL ON ' + @ownerName + '.' + @tablename + ' REBUILD WITH (PAD_INDEX = ON, FILLFACTOR = 90) '
EXEC (@sql)
PRINT CONVERT(VARCHAR, @i) + '__' + @ownerName + '.' + @tablename + '............ OK'
SET @i = @i + 1
FETCH NEXT FROM DB_Cursor
INTO @ownerName, @tablename
END
CLOSE DB_Cursor
DEALLOCATE DB_Cursor

PRINT N'1. Index Rebuild...';

--update stats

방법

USE master;
GO
ALTER DATABASE MyTestDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE MyTestDatabase MODIFY NAME = MyTestDatabaseCopy
GO 
ALTER DATABASE MyTestDatabaseCopy SET MULTI_USER 
GO

참고 자료

[https://docs.microsoft.com/ko-kr/sql/relational-databases/databases/rename-a-database?view=sql-server-2017]


to Top