MSSQL, 테이블 및 인덱스 사이즈 구하기, Table and Index size in SQL Server

DataBase/MS-SQL|2019. 11. 5. 14:09
반응형
create table #t
(
  name nvarchar(128),
  rows varchar(50),
  reserved varchar(50),
  data varchar(50),
  index_size varchar(50),
  unused varchar(50)
)

declare @id nvarchar(128)
declare c cursor for
select '[' + sc.name + '].[' + s.name + ']' FROM sysobjects s INNER JOIN sys.schemas sc ON s.uid = sc.schema_id where s.xtype='U'

open c
fetch c into @id

while @@fetch_status = 0 begin

  insert into #t
  exec sp_spaceused @id

  fetch c into @id
end

close c
deallocate c

select * from #t
order by convert(int, substring(data, 1, len(data)-3)) desc

drop table #t

 

 

참고 URL : https://stackoverflow.com/questions/316831/table-and-index-size-in-sql-server

댓글()

database mdf 파일 사이즈 축소

DataBase/MS-SQL|2019. 10. 11. 10:52
반응형

 

로그 서버에 DB 파일 사이즈가 900기가에 육박하여 불필요한 로그를 삭제하고 

 

DBCC SHRINKFILE(DB명, TRUNCATEONLY)

 

위와 같이 축소를 했다.

 

하지만 크게 줄어들지 않은 mdf 파일 사이즈

 

왜 그렇지 하고 찾아보니 SHRINKFILE 옵션을 찾아보니 

 

(MS docs 링크)

 

NOTRUNCATE
target_percent의 지정 여부와 관계없이 데이터 파일의 끝에서 할당된 페이지를 파일 앞의 할당되지 않은 페이지로 이동합니다. 파일 끝의 사용 가능한 공간이 운영 체제에 반환되지 않고, 파일의 물리적 크기가 변경되지 않습니다. 그러므로 NOTRUNCATE를 지정하면 파일이 축소되지 않는 것처럼 보입니다. NOTRUNCATE는 데이터 파일에만 적용되며 로그 파일에는 영향을 주지 않습니다. 이 옵션은 FILESTREAM 파일 그룹 컨테이너에서 지원되지 않습니다.

 

TRUNCATEONLY
파일 끝의 모든 사용 가능한 공간을 운영 체제로 해제하지만 파일 내에서 페이지 이동을 수행하지 않습니다. 데이터 파일은 마지막으로 할당된 익스텐트까지만 축소됩니다. TRUNCATEONLY로 지정되면 target_size가 무시됩니다.
TRUNCATEONLY 옵션은 로그에 있는 정보를 이동시키지 않습니다. 하지만 로그 파일의 끝에서 비활성 상태의 VLF를 제거합니다. 이 옵션은 FILESTREAM 파일 그룹 컨테이너에서 지원되지 않습니다.

 

TRUNCATEONLY 옵션으로는 중간중간에 비어있는 공간에 대해서 해제를 하지 못한다는 것.

 

NOTRUNCATE 옵션으로 중간중간 비어있는 공간들을 당겨주고

TRUNCATEONLY 옵션으로 해제해주어야 원하는 결과를 얻을 수 있었다.

 

 


DBCC SHRINKFILE(DB명,NOTRUNCATE) 
-- DB 빈 공간 정리 마치 조각 모음과 같다. ( 빈 공간은 그대로 남아있다 )

DBCC SHRINKFILE(DB명, TRUNCATEONLY) 
-- 빈 여유 공간 제거 ( 사이즈 축소 )

 

 

 

댓글()

Database 목록을 확인하는 5가지 방법

DataBase/MS-SQL|2019. 9. 20. 10:08
반응형

SQL Server 2000 이상

SELECT * FROM dbo.sysdatabases

 

SQL Server 2005 이상

SELECT * FROM sys.databases

 

DB 이름만

EXEC sp_MSForEachDB 'SELECT ''?'' AS DatabaseName'

 

DB 이름 , 소유자 , 상태 , 크기  등과 함께

EXEC sp_helpdb

 

DB 이름 , 크기

EXEC sp_databases

 

댓글()

MSSQL 오프라인 안될 때 - 지연될 때

DataBase/MS-SQL|2019. 7. 4. 11:46
반응형

 

ALTER DATABASE 디비명 SET OFFLINE WITH ROLLBACK IMMEDIATE



불완전한 트랜잭션이 롤백되고 있습니다. 예상 롤백 완료율: 0%.
불완전한 트랜잭션이 롤백되고 있습니다. 예상 롤백 완료율: 100%.

 

오프라인 오래 걸려서 구글링 하니 나옴..

 

ALTER DATABASE 는 트랜잭션이 Commit , Rollback 되어야 실행되기 때문에 처리가 지연된다.

 

https://ribin.tistory.com/286

 

댓글()

sys.databases DB Status 확인하기

DataBase/MS-SQL|2019. 7. 3. 10:46
반응형

단순 DB status 를 확인하기 위해 찾았으나

collation , status , user Access 등.. 활용도 있는 값들이 있음.

 

state_desc : ONLINE / OFFLINE

state : 0 = ONLINE 
         1 = RESTORING 
         2 = 복구 | SQL Server 2008 를 통해 SQL Server 2017
         3 = RECOVERY_PENDING | SQL Server 2008 를 통해 SQL Server 2017
         4 = SUSPECT 
         5 EMERGENCY = | SQL Server 2008 를 통해 SQL Server 2017
         6 = 오프 라인 | SQL Server 2008 를 통해 SQL Server 2017
         7 = 복사| Azure SQL 데이터베이스 활성 지리적 복제 
         10 = OFFLINE_SECONDARY | Azure SQL 데이터베이스 활성 지리적 복제 

 

SELECT name,state_desc,state,* FROM sys.databases 
WHERE state_desc = 'ONLINE'

 

자세한 추가 정보는 :

 

https://docs.microsoft.com/ko-kr/sql/relational-databases/system-catalog-views/sys-databases-transact-sql?view=sql-server-2017

 

sys.databases (TRANSACT-SQL) - SQL Server

sys.databases(Transact-SQL)sys.databases (Transact-SQL) 이 문서의 내용 --> 적용 대상: SQL Server(2008부터) Azure SQL Database Azure SQL Data Warehouse 병렬 데이터 웨어하우스 APPLIES TO: SQL Server (starting with 2008) Azure SQL Database Azure SQL Data Warehouse Parallel Data Wa

docs.microsoft.com

 

댓글()

sqlyog community 버전 다운로드 주소

DataBase/My-SQL|2019. 2. 13. 15:53
반응형



https://github.com/webyog/sqlyog-community/wiki/Downloads

댓글()

연결된 서버의 프로시저 실행시 "메시지 7411, 수준 16, 상태 1, 줄 3 서버 '000.000.000.000'이(가) RPC에 대해 구성되지 않았습니다."

DataBase/MS-SQL|2019. 1. 15. 15:16
반응형



연결된 서버 ( Linked Server )의 프로시저 실행 시 아래와 같은 오류 메시지가 뜸.



메시지 7411, 수준 16, 상태 1, 줄 3

서버 '000.000.000.000'이(가) RPC에 대해 구성되지 않았습니다.




해결 방법 :  아래와 같이 속성 변경 


1. 해당 연결된 서버 속성 > 서버 옵션 > RPC > True

2. 해당 연결된 서버 속성 > 서버 옵션 > RPC 내보내기 > True 



댓글()

대칭키 암호화 데이터 뷰테이블에서 복호화 하는 방법 / DecryptByKeyAutoCert

DataBase/MS-SQL|2018. 9. 12. 11:16
반응형

대칭키를 이용한 DB 암호화 처리 작업 시 


아래와 같이 대칭키와 인증서 OPEN 후 암복호화를 해야하는 것으로 알고 있었음.


OPEN SYMMETRIC 대칭키이름 DECRYPTION BY CERTIFICATE 인증서이름;


그런데 문제는 일반 프로시저나 웹 소스에서는 문제가 없으나


외부에 뷰테이블 형태로 제공하는 데이터가 있었는데 뷰테이블에서는 


그때까지만 해도.. OPEN SYMMETRIC 을 할수 없는게..아닌가..하고 난감했지만..




https://docs.microsoft.com/ko-kr/sql/t-sql/functions/decryptbykeyautocert-transact-sql?view=sql-server-2017


DecryptByKeyAutoCert 내장 함수를 사용하면 가능해진다는 것..





--Create the keys and certificate. USE AdventureWorks2012; CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'mzkvdlk979438teag$$ds987yghn)(*&4fdg^'; OPEN MASTER KEY DECRYPTION BY PASSWORD = 'mzkvdlk979438teag$$ds987yghn)(*&4fdg^'; CREATE CERTIFICATE HumanResources037 WITH SUBJECT = 'Sammamish HR', EXPIRY_DATE = '10/31/2009'; CREATE SYMMETRIC KEY SSN_Key_01 WITH ALGORITHM = DES ENCRYPTION BY CERTIFICATE HumanResources037; GO ----Add a column of encrypted data. ALTER TABLE HumanResources.Employee ADD EncryptedNationalIDNumber varbinary(128); OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037 ; UPDATE HumanResources.Employee SET EncryptedNationalIDNumber = EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber); GO -- --Close the key used to encrypt the data. CLOSE SYMMETRIC KEY SSN_Key_01; -- --There are two ways to decrypt the stored data. -- --OPTION ONE, using DecryptByKey() --1. Open the symmetric key --2. Decrypt the data --3. Close the symmetric key OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037; SELECT NationalIDNumber, EncryptedNationalIDNumber AS 'Encrypted ID Number', CONVERT(nvarchar, DecryptByKey(EncryptedNationalIDNumber)) AS 'Decrypted ID Number' FROM HumanResources.Employee; CLOSE SYMMETRIC KEY SSN_Key_01; -- --OPTION TWO, using DecryptByKeyAutoCert() SELECT NationalIDNumber, EncryptedNationalIDNumber AS 'Encrypted ID Number', CONVERT(nvarchar, DecryptByKeyAutoCert ( cert_ID('HumanResources037') , NULL ,EncryptedNationalIDNumber)) AS 'Decrypted ID Number' FROM HumanResources.Employee;


댓글()