SQL Server Backup Script with TimeStamp

Posted by Alvin You
2015. 7. 2. 10:34 SQL Server

SQL Server를 운영하다보면 백업 스케쥴링에 대해서 고민하게 됩니다. 아래 스크립트는 SQL Server에 생성된 사용자 Database들에 대해서 TimeStamp를 찍어 일단위로 지정된 폴더 경로에 데이터 베이스를 백업하도록 하는 스크립트입니다.

 

Table의 사용량(RowCount, Size) 정보 보기

Posted by Alvin You
2015. 4. 24. 10:04 SQL Server

아래 스크립트는 Database내에 있는 모든 Table의 Row Count 정보와 Size 정보를 보여 주는 스크립트입니다.

  • Sp_MSForEachTable : Database내의 모든 테이블들을 돌며, 파라미터로 받은 SQL문을 수행
  • Sp_SpaceUsed : 파라미터로 받은 테이블의 사용량을 보여줌

 

exec sp_spaceused 'TBL_HOSP_Info'

 

CREATE TABLE #RowCountsAndSizes (TableName NVARCHAR(128),rows CHAR(11),

reserved VARCHAR(18),data VARCHAR(18),index_size VARCHAR(18),

unused VARCHAR(18))

 

EXEC sp_MSForEachTable 'INSERT INTO #RowCountsAndSizes EXEC sp_spaceused ''?'' '

 

SELECT TableName,CONVERT(bigint,rows) AS NumberOfRows,

CONVERT(bigint,left(reserved,len(reserved)-3)) AS SizeinKB

FROM #RowCountsAndSizes

ORDER BY NumberOfRows DESC,SizeinKB DESC,TableName

 

DROP TABLE #RowCountsAndSizes

Failed to initialize MSDB database for tuning (exit code: -1073741819). (DTAClient)

Posted by Alvin You
2015. 4. 15. 21:47 SQL Server

Analyze Query in Database Engine Tuning Advisor 실행시 아래와 같은 오류가 발생한다면, MSDB에 DTA 관련 Objects들을 생성해 주면 됩니다.

[오류 메시지]

 

[스크립트 실행]

 

DTA_Objects_SQL.txt

 

[Powershell]SQL Server 복원 작업

Posted by Alvin You
2015. 4. 7. 10:43 SQL Server

프로젝트를 진행하다 보면 운영 DB를 백업 받아, 다시 DEV/TEST 계에 데이터를 다시 올리는 경우가 빈번하게 발생합니다. 아래 Powershell 스크립트 내용은 Backup 받은 파일을 Powershell을 이용해 Restore 하는 내용을 담고 있습니다.

업무에 참고하세요.

 

 

Upgrading SQL Server 2012 License Edition

Posted by Alvin You
2015. 1. 7. 01:00 SQL Server

Dynamics AX의 Power BI가 SQL Server Enterprise에서 구동되는 관계로 로컬에 설치되어 있는 SQL Server의 License Edition을 변경해야 될 필요성이 생겼습니다. 그래서, 관련 자료를 찾아 보니 아래 방법을 통해서 License Edition을 변경 할 수 있습니다.

아래 절차는 Standard Edition à Enterprise Edition으로 변경하는 과정입니다.

1. SQL Server Enterprise Edition 설치 CD를 넣고 SQL Server Installation Center à Edition Upgrade를 실행합니다.

2. Product Key를 확인합니다.

3. 업그레이드 할 SQL Server Instance를 선택합니다.

4. 업그레이드 규칙을 확인합니다.

5. 업그레이드를 진행합니다.

6.Standard à Enterprise Edition 업그레이드가 완료되었습니다.

테이블들의 Row Count 가져오기!

Posted by Alvin You
2014. 3. 22. 22:20 SQL Server

SELECT [TableName] = so.name,
[RowCount] = MAX(si.rows)
FROM sysobjects so, sysindexes si
WHERE so.xtype = 'U' AND si.id = OBJECT_ID(so.name)
GROUP BY so.name ORDER BY 2 DESC

Object(SP, UDF 등) 검색

Posted by Alvin You
2014. 3. 22. 22:20 SQL Server

SELECT *
FROM sys.procedures
WHERE OBJECT_DEFINITION(object_id) LIKE '%foobar%'

SELECT OBJECT_NAME(object_id)
FROM sys.sql_modules
WHERE Definition LIKE '%foobar%'
AND OBJECTPROPERTY(object_id, 'IsProcedure') = 1

SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%foobar%'
AND ROUTINE_TYPE = 'PROCEDURE'

MS SQL Server 2008 R2에서 Collation 변경하기

Posted by Alvin You
2014. 3. 22. 22:19 SQL Server

setup.exe
/QUIET
/ACTION=REBUILDDATABASE
/INSTANCENAME=instance_name
/SQLSYSADMINACCOUNTS= accounts
[/SAPWD=password]
[/SQLCOLLATION=collation_name]

setup /ACTION=REBUILDDATABASE /QUIET /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=Administrator /SAPWD=P@ssword /SQLCOLLATION=Korean_Wansung_CS_AS

http://blogs.msdn.com/b/psssql/archive/2008/08/29/how-to-rebuild-system-databases-in-sql-server-2008.aspx

주의)master 데이터베이스 변경작업이기 때문에 Backup은 필수... 테스트 해보니 모든 데이터베이스가 훌라당 날아감!

시스템 테이블을 이용한 Table Names, Column Names, Data Types 조회

Posted by Alvin You
2014. 3. 13. 11:26 SQL Server
프로젝트 산출물의 하나인 테이블 명세서나 DDL 스크립트를 참고해서 데이터를 분석하는 방법 보다는 아래 Query를 이용하는 방법! 강츄~

select SchemaName=SCHEMA_NAME(t.schema_id), TableName=t.name, ColumnName=c.name, DataType=ty.name, TextLength=c.max_length, c.precision, c.scale
from sys.tables t
join sys.columns c on c.object_id = t.object_id
join sys.types ty on ty.user_type_id =c.user_type_id
order by 1, 2, 3

모든 DB 테이블에서 특정값을 찾는 프로시저

Posted by Alvin You
2014. 3. 13. 11:24 SQL Server

SQL Server Database내의 모든 테이블의 'char', 'varchar', 'nchar', 'nvarchar' 값에 들어있는 특정값을 찾아서 출력해 주는 Stored Procedure입니다.

향후 데이터 변경 프로젝트에서 사용하면 유용할 듯 합니다.

--


CREATE PROC [dbo].[SearchAllTables]
(
    @SearchStr nvarchar(100)
)
AS
BEGIN

-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.
-- Purpose: To search all columns of all tables for a given search string
-- Written by: Narayana Vyas Kondreddi
-- Site: http://vyaskn.tripod.com
-- Tested on: SQL Server 7.0 and SQL Server 2000
-- Date modified: 28th July 2002 22:50 GMT

DECLARE @Results TABLE(ColumnName nvarchar(370), ColumnValue nvarchar(3630))

SET NOCOUNT ON

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET  @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')

WHILE @TableName IS NOT NULL
BEGIN
    SET @ColumnName = ''
    SET @TableName =
    (
        SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
        FROM    INFORMATION_SCHEMA.TABLES
        WHERE       TABLE_TYPE = 'BASE TABLE'
            AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
            AND OBJECTPROPERTY(
                    OBJECT_ID(
                        QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
                         ), 'IsMSShipped'
                           ) = 0
    )

    WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
    BEGIN
        SET @ColumnName =
        (
            SELECT MIN(QUOTENAME(COLUMN_NAME))
            FROM    INFORMATION_SCHEMA.COLUMNS
            WHERE       TABLE_SCHEMA    = PARSENAME(@TableName, 2)
                AND TABLE_NAME  = PARSENAME(@TableName, 1)
                AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
                AND QUOTENAME(COLUMN_NAME) > @ColumnName
        )

        IF @ColumnName IS NOT NULL
        BEGIN
            INSERT INTO @Results
            EXEC
            (
                'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630)
                FROM ' + @TableName + ' (NOLOCK) ' +
                ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
            )
        END
    END
END

SELECT ColumnName, ColumnValue FROM @Results
END