SQL Formatter SQL 자동 정렬 해주는 웹 사이트

추천 정보|2022. 4. 12. 18:36
반응형

SQL Formatter

 

https://www.dpriver.com/pp/sqlformat.htm

 

Instant SQL Formatter

 

www.dpriver.com

 

 

들어갈 때 마다 세팅 하는것이 번거로워서

 

위와 같이 즐겨찾기 등록 후 수정을 통해서 Javascript  로 설정값을 세팅하도록 했습니다.

 

URL 칸에는 아래와 같이..

 

javascript:document.all.dbvendor.value = 'mysql';document.all.keywordcs.value = 'Unchanged';document.all.tablenamecs.value = 'Unchanged';document.all.columnnamecs.value = 'Unchanged';document.all.functioncs.value = 'Unchanged';document.all.datatypecs.value = 'Unchanged';document.all.variablecs.value = 'Unchanged';document.all.aliascs.value = 'Unchanged';document.all.quotedidentifiercs.value = 'Unchanged';document.all.identifiercs.value = 'Unchanged';document.all.maxlenincm.value = 8000;document.all.salign[1].checked = true;

 

 

최종적으로는 아래와 같이 사이트 즐겨찾기와 세팅하기를 즐겨찾기해두고 사용합니다.

사이트 접속 후 세팅 클릭하면 자동으로 세팅값이 짠..

 

 

댓글()

저장하지 않은 쿼리 확인 하는 방법 , 강제 종료 시 쿼리 복구

DataBase/MS-SQL|2020. 9. 29. 23:34
반응형

때때로 ssms가 강제 종료 된다거나 저장하지 않고 닫았을 때

SQL 쿼리를 복구 해야하는 경우 아래의 쿼리에서 일정 시간동안 쿼리 확인이 가능합니다.

 

Use <database>
SELECT execquery.last_execution_time AS [Date Time], execsql.text AS [Script] FROM sys.dm_exec_query_stats AS execquery
CROSS APPLY sys.dm_exec_sql_text(execquery.sql_handle) AS execsql
ORDER BY execquery.last_execution_time DESC

 

 

참조 Url : qastack.kr/programming/15034832/recover-unsaved-sql-query-scripts

댓글()

SQL Server 에이전트에 등록된 작업 목록 조회

DataBase/MS-SQL|2020. 8. 5. 17:10
반응형

SQL Server 에이전트에 등록된 작업 목록을 조회 하는 SQL 입니다.

SELECT
	A.name,
	case description when '설명이 없습니다.' then '' else description end as description,   
  CASE convert(
    nvarchar(3), 
    [freq_type], 
    3
  ) WHEN 4 THEN N' 매일' WHEN 8 THEN N' 매주 ' + CASE WHEN [freq_interval] & 1 = 1 THEN N'일' ELSE '' END 
	+ CASE WHEN [freq_interval] & 2 = 2 THEN ' 월' ELSE '' END + CASE WHEN [freq_interval] & 4 = 4 THEN ' 화' ELSE '' END + CASE WHEN [freq_interval] & 8 = 8 THEN ' 수' ELSE '' END + CASE WHEN [freq_interval] & 16 = 16 THEN N' 목' ELSE '' END + CASE WHEN [freq_interval] & 32 = 32 THEN N' 금' ELSE '' END + CASE WHEN [freq_interval] & 64 = 64 THEN N' 토' ELSE '' END WHEN 16 THEN N'하루 한번 ' 
	+ CAST(
    [freq_interval] AS VARCHAR(3)
  ) + N' 매달 ' + CAST(
    [freq_recurrence_factor] AS VARCHAR(3)
  ) + N' 매달' WHEN 32 THEN N'발생 ' + CASE [freq_relative_interval] WHEN 1 THEN N'첫째' WHEN 2 THEN N'둘째' WHEN 4 THEN N'셋째' WHEN 8 THEN N'넷째' WHEN 16 THEN N'마지막' END + ' ' + CASE [freq_interval] WHEN 1 THEN N'일' WHEN 2 THEN N'월' WHEN 3 THEN N'화' WHEN 4 THEN N'수' WHEN 5 THEN N'목' WHEN 6 THEN N'금' WHEN 7 THEN N'토' WHEN 8 THEN N'일' WHEN 9 THEN N'평일' WHEN 10 THEN N'주말' END + N' 모든 ' + CAST(
    [freq_recurrence_factor] AS VARCHAR(3)
  ) + N' 매달' END AS [Recurrence], 
  CASE convert(
    nvarchar(3), 
    [freq_subday_type], 
    3
  ) WHEN 1 THEN  STUFF(
    STUFF(
      RIGHT(
        '000000' + CAST(
          [active_start_time] AS VARCHAR(6)
        ), 
        6
      ), 
      3, 
      0, 
      ':'
    ), 
    6, 
    0, 
    ':'
  ) WHEN 2 THEN N'주기적 발생 ' + CAST(
    [freq_subday_interval] AS VARCHAR(3)
  ) + N' 초(s) 간격 ' + STUFF(
    STUFF(
      RIGHT(
        '000000' + CAST(
          [active_start_time] AS VARCHAR(6)
        ), 
        6
      ), 
      3, 
      0, 
      ':'
    ), 
    6, 
    0, 
    ':'
  ) + ' & ' + STUFF(
    STUFF(
      RIGHT(
        '000000' + CAST(
          [active_end_time] AS VARCHAR(6)
        ), 
        6
      ), 
      3, 
      0, 
      ':'
    ), 
    6, 
    0, 
    ':'
  ) WHEN 4 THEN N'주기적 발생 ' + CAST(
    [freq_subday_interval] AS VARCHAR(3)
  ) + N' 분(s) 간격 ' + STUFF(
    STUFF(
      RIGHT(
        '000000' + CAST(
          [active_start_time] AS VARCHAR(6)
        ), 
        6
      ), 
      3, 
      0, 
      ':'
    ), 
    6, 
    0, 
    ':'
  ) + ' & ' + STUFF(
    STUFF(
      RIGHT(
        '000000' + CAST(
          [active_end_time] AS VARCHAR(6)
        ), 
        6
      ), 
      3, 
      0, 
      ':'
    ), 
    6, 
    0, 
    ':'
  ) WHEN 8 THEN N'주기적 발생 ' + CAST(
    [freq_subday_interval] AS VARCHAR(3)
  ) + N' 시간(s) 간격 ' + STUFF(
    STUFF(
      RIGHT(
        '000000' + CAST(
          [active_start_time] AS VARCHAR(6)
        ), 
        6
      ), 
      3, 
      0, 
      ':'
    ), 
    6, 
    0, 
    ':'
  ) + ' & ' + STUFF(
    STUFF(
      RIGHT(
        '000000' + CAST(
          [active_end_time] AS VARCHAR(6)
        ), 
        6
      ), 
      3, 
      0, 
      ':'
    ), 
    6, 
    0, 
    ':'
  ) END [Frequency],  D.step_id, D.step_name, D.command 
FROM msdb.dbo.sysjobs A 
	INNER JOIN msdb.dbo.sysjobschedules B ON A.job_id = B.job_id 
	INNER JOIN msdb.dbo.sysschedules C ON B.schedule_id = C.schedule_id 
	INNER JOIN msdb.dbo.sysjobsteps D ON A.job_id = D.job_id  
ORDER BY A.name

 

실행 결과는 대략 아래와 같이 조회가 됩니다.

 

댓글()

백업 혹은 복구중인 데이터베이스 진행률 확인

DataBase/MS-SQL|2020. 8. 5. 10:03
반응형

백업 혹은 복구 중인 데이터 베이스의 진행 상태나 진행률을 확인하는 SQL 입니다.

 

경과된 시간 , 남은 시간 , 예상 소요 시간등을 확인 할 수 있습니다.

 

SELECT r.session_id,r.command
,cast(CONVERT(NUMERIC(6,2),r.percent_complete)  as varchar) + ' %' AS [Percent Complete]
,CONVERT(VARCHAR(20),DATEADD(ms,r.estimated_completion_time,GetDate()),20) AS [ETA Completion Time]
,CONVERT(NUMERIC(10,2),r.total_elapsed_time/1000.0/60.0) AS [Elapsed Min]
,CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0) AS [ETA Min]
,CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0/60.0) AS [ETA Hours]
,CONVERT(VARCHAR(1000),(SELECT text FROM sys.dm_exec_sql_text(sql_handle))) AS [SQL] 
FROM sys.dm_exec_requests r WHERE command IN ('RESTORE DATABASE','BACKUP DATABASE')

 

댓글()

프로시저(sp)에서 사용하는 테이블 목록 , 특정 테이블을 참조하는 프로시저 목록

DataBase/MS-SQL|2020. 8. 4. 18:05
반응형

테이블의 속성이 변경되었을 때

혹은 컬럼 속성이 변경되었을 때 

아니면 테이블의 용도나 정체(?)를 알 수 없을 때

관련된 sp를 확인하기 위해서 개인적으로 자주 사용하는 SQL 입니다.

 

특정 프로시저에서 사용하는 테이블 목록을 조회하는 SQL 문입니다.

 

-- 프로시저에서 사용하는 테이블 목록
;WITH stored_procedures AS 
(   

    SELECT oo.name AS table_name,   o.name,
		ROW_NUMBER() OVER(partition by o.name,oo.name ORDER BY o.name,oo.name) AS row   
    FROM sysdepends d   
	    INNER JOIN sysobjects o ON o.id=d.id   
	    INNER JOIN sysobjects oo ON oo.id=d.depid   
    WHERE o.xtype = 'P' AND o.name LIKE '%프로시저명%' 
)  

SELECT name,Table_name FROM stored_procedures  
WHERE row = 1

 

반대로 특정 테이블을 참조하는 프로시저 목록을 조회하는 SQL문 입니다.

 

-- 특정 테이블을 참조하는 프로시저 목록
;WITH stored_procedures AS 
(   

    SELECT oo.name AS table_name,   o.name,
		ROW_NUMBER() OVER(partition by o.name,oo.name ORDER BY o.name,oo.name) AS row   
    FROM sysdepends d   
	    INNER JOIN sysobjects o ON o.id=d.id   
	    INNER JOIN sysobjects oo ON oo.id=d.depid   
    WHERE o.xtype = 'P' AND oo.name = '테이블명' 
)  

SELECT name,Table_name FROM stored_procedures  
WHERE row = 1

댓글()

MSSQL 차등백업 방법 및 SQL

DataBase/MS-SQL|2020. 4. 13. 17:01
반응형

차등 백업은 전체 백업 마지막 시점을 기준으로 이후에 수정된 내용을 백업는 방법입니다.

기본적인 내용과 SQL문을 공유합니다.

 

-- 전체 백업

BACKUP DATABASE [test] TO  DISK = N'D:\Backup\test_full.bak' WITH NOFORMAT, NOINIT,  NAME = N'test-전체 데이터베이스 백업', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO

 

 

-- 차등백업 1 

BACKUP DATABASE [test] TO  DISK = N'D:\Backup\test_1.bak' WITH  DIFFERENTIAL , NOFORMAT, NOINIT,  NAME = N'test-전체 데이터베이스 백업', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO

 

 

-- 차등백업 2 

BACKUP DATABASE [test] TO  DISK = N'D:\Backup\test_2.bak' WITH  DIFFERENTIAL , NOFORMAT, NOINIT,  NAME = N'test-전체 데이터베이스 백업', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO

 

 

 

-- 기본 전체 백업 + 차등 복구

문법

RESTORE DATABASE [디비명] FROM DISK = N'풀백업위치'

               WITH MOVE '논리적 DB명' TO 'mdf 복구위치'

                            ,MOVE '논리적 LOG명' TO 'ldf 복구위치',  NORECOVERY,  NOUNLOAD,  STATS = 5;

RESTORE DATABASE [tes디비명] FROM  DISK = N'차등백업위치' WITH  FILE = 1,  NOUNLOAD,  STATS = 5

 

 

RESTORE DATABASE [test3] FROM DISK = N'D:\Backup\test_full.bak'

               WITH MOVE 'test' TO 'C:\DATABASE\MSSQL15.MSSQLSERVER\MSSQL\DATA\test3.mdf'

                            ,MOVE 'test_log' TO 'C:\DATABASE\MSSQL15.MSSQLSERVER\MSSQL\DATA\test3.ldf',  NORECOVERY,  NOUNLOAD,  STATS = 5;

RESTORE DATABASE [test3] FROM  DISK = N'D:\Backup\test_2.bak' WITH  FILE = 1,  NOUNLOAD,  STATS = 5

 

 

 

백업 및 복구 시점별 데이터 체크 

test : 풀백업  ,  test1 : 풀백업+차등1st ,  test2 : 풀백업+차등2nd

 

 

개인적인 생각에서

 

장점은 백업 용량이 데이터 변화에 비례하기 때문에 수정이 적다면 용량도 적어집니다.

수정된 데이터와 용량은 비례하게 됩니다.

 

단점은 전체 백업이 소실되면 복구가 불가능함. 전체 백업본이 있어야 차등백업본이 의미가 있기 때문에

무슨일이 있어도 전체 백업은 잘 보관해야합니다.

 

적당주기별 전체 백업과 차등백업을 처리한다면...스토리지가 좋아합니다.

댓글()

특정 컬럼명에 대한 테이블 및 속성 검색하는 쿼리 SQL

DataBase/MS-SQL|2020. 2. 6. 17:05
반응형

특정 컬럼명에 대한 테이블 및 속성 검색하는 쿼리 SQL


select table_name ,column_name ,column_default, data_type
	, character_maximum_length ,character_octet_length 
From information_schema .columns 
where column_name='cityCd' 
order by character_maximum_length desc

댓글()

PHP 보안코딩 - Prepared Statements MYSQL 샘플 소스

Progmming/PHP|2019. 2. 13. 15:35
반응형

Prepared Statements MYSQL 샘플 소스코드

기본적으로 보안을 위해 사용한다고만 알고있었으나 


w3schools 자료를 보면 Prepared Statements 는 3가지 장점을 갖습니다.


  1. 준비된 명령문은 쿼리 준비가 한 번만 수행되므로 구문 분석 시간을 줄입니다 (명령문이 여러 번 실행 되더라도)

  2. 바인딩 된 매개 변수는 전체 쿼리가 아닌 매번 매개 변수 만 보내야하므로 서버 대역폭을 최소화합니다.

  3. Prepared statements는 나중에 다른 프로토콜을 사용하여 전송되는 매개 변수 값이 올바르게 이스케이프 될 필요가 없으므로 SQL injection에 매우 유용합니다. 원래 명령문 템플리트가 외부 입력에서 파생되지 않으면 SQL 삽입이 발생할 수 없습니다.
$dbconn = new mysqli("디비 주소", "아이디", "비번", "디비명");

if ($dbconn->connect_errno) {
    echo "Failed to connect to MySQL: (" . $dbconn->connect_errno . ") " . $dbconn->connect_error;
}

if (!$dbconn->query("DROP TABLE IF EXISTS test") ||
    !$dbconn->query("CREATE TABLE test(id INT, label CHAR(1))") ||
    !$dbconn->query("INSERT INTO test(id, label) VALUES (1, 'a')")) {
    echo "Table creation failed: (" . $dbconn->errno . ") " . $dbconn->error;
}


$stmt = $dbconn->prepare("select a,b,c from tbl where a like CONCAT('%',?,'%') ");
$id = "abc";

$stmt->bind_param('s', $id);
$stmt->execute();

$stmt->bind_result($a, $b, $c);


//$stmt->fetch();  

while ($stmt->fetch()) {
	echo $a ."//".$b."//".$c;
}


$stmt->close();
$dbconn->close();



참고 사이트 : 

https://www.w3schools.com

http://php.net

https://stackoverflow.com

https://ko.wikipedia.org

댓글()