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

 

댓글()

php 쿼리결과에 대한 결과 행이 있는지 여부, sqlsrv_has_rows / sqlsrv_num_rows

Progmming/PHP|2018. 4. 26. 11:02
반응형

mysql 을 오랜만에 사용할 기회가 있어서 처리중에...


데이터 갯수를 체크해야 했는데 mssql 에서 하던대로 count 해서 데이터 갯수를 체크하려고 했으나


sqlsrv_num_rows 함수를 이용하니 결과 값이 빈값이 찍히는 상황.


확인해보니 sqlsrv_num_rows 결과 값을 리턴 받기 위해서는 커서 타입을 지정해야함.


단순 쿼리 결과 값이 있는지 여부를 체크하는 함수가 있더라는..



sqlsrv_has_rows 


- 쿼리결과에 대한 결과 행이 있는지 여부 .  return : bool


php manual : http://php.net/manual/en/function.sqlsrv-has-rows.php


<?php


    $server 
"serverName\sqlexpress";
    $connectionInfo = array( "Database"=>"dbName""UID"=>"username""PWD"=>"password" )
    $conn sqlsrv_connect$server$connectionInfo );

    $stmt sqlsrv_query$conn"SELECT * FROM Table_1");

    if (
$stmt) {
       
$rows sqlsrv_has_rows$stmt );
       if (
$rows === true)
          echo 
"There are rows. <br />";
       else 
          echo 
"There are no rows. <br />";
    }
?>




sqlsrv_num_rows

- 쿼리 결과에 대한 행의 갯수 .  
커서 타입을 SQLSRV_CURSOR_KEYSET 또는  SQLSRV_CURSOR_STATIC 으로  
지정해주어야 결과 값을 가져올 수 있음.


<?php
    $server 
"serverName\sqlexpress";
    $connectionInfo = array( "Database"=>"dbName""UID"=>"username""PWD"=>"password" );
    $conn sqlsrv_connect$server$connectionInfo );

    $sql "SELECT * FROM Table_1";
    $params = array();
    $options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
    $stmt sqlsrv_query$conn$sql $params$options );

    $row_count sqlsrv_num_rows$stmt );
   
    if (
$row_count === false)
       echo 
"Error in retrieveing row count.";
    else
       echo 
$row_count;
?>

댓글()

MS-SQL Linked Server 사용자 매핑 설정하는 방법 ( 접속자별 권한 설정 )

DataBase/MS-SQL|2018. 4. 24. 11:05
반응형

MS-SQL Linked Server  사용자 매핑 설정하는 방법 ( 접속자별 권한 설정 )



개요 


사용자 매핑을 사용하지 않고 단순 원격서버에 대한 로그인정보로 Linked Server를 연결하여 보안 셋팅 없이 경우 모든 사용자가 Linked Server에 대한 권한을 동일하게 갖게 되므로 보안 이슈가 발생할 수 있다.



▼ 흔히 인터넷상에서 알려주는 Linked Server 연결 방법.




문제점 확인 및 문제 발생 상황


위와 같은 방법으로 Linked Server를 설정 할 경우 모든 사용자가 같은 계정으로 원격 서버에 접속하기 때문에 여러 권한 관련 보안 이슈가 발생할 수 있게 된다.


DBA가 없는 규모가 작거나 사수가 없는 경우 혹은 별도 교육을 통하지 않는 경우 사실상 세부 옵션을 알아서 사용하기가 어렵기 때문에 위의 방법으로 연결해서 사용하던 때가 있었으나 외부에 뷰테이블 형태로 제공되는 서비스가 생기면서 해당 이슈가 발생되었다.



Linked Server 권한 문제 해결방법


해결방법은 이미 위에 옵션 화면에 노출되어있는데 

로컬 서버 로그인과 원격 서버 로그인 매핑 옵션을 이용해야한다.




이말은 SQL Server에 로그인된 사용자 별로 Linked Server 연결 아이디를 다르게 하고 매핑에 등록되지 않은 사용자의 경우 아래에 옵션에 해당하는 연결을 한다는 의미이다.

  • 연결안함.
  • 보안컨텍스트 없이 연결
  • 로그인의 현재 보안 컨텍스트를 사용하여 연결
  • 다음 보안 컨텍스트를 사용하여 연결




로컬 로그인 사용자를 선택하고 원격 사용자와 암호를 입력한다.

로컬 로그인의 경우 등록된 계정을 사용하기 때문에 콤보박스에서 선택하면 됨.




입력된 결과이며 여러개 중복 등록이 가능하므로 사용자 별로 Linked Server 의 접속 계정을 설정하여 권한 및 보안 설정이 가능하다.

그리고 그외의 접속에 대해서는 연결을 하지 않거나 하는 등의 설정이 아래 옵션에서 처리가 가능하니 참고.





상세한 내용은 아래 링크를..


https://docs.microsoft.com/ko-kr/previous-versions/sql/sql-server-2008-r2/ms188477(v%3dsql.105)

댓글()

[에러노트] 사용자 'sa'이(가) 로그인하지 못했습니다. 이 사용자는 트러스트된 SQL Server 연결과 관련되어 있지 않습니다. (Microsoft SQL Server, 오류: 18452)

에러노트|2017. 9. 21. 15:49
반응형

MS-SQL 설치 후 로그인 시 에러 메시지



아래와 같은 오류 메시지가 뜨고 로그인이 되지 않는 문제.


사용자 'sa'이(가) 로그인하지 못했습니다. 이 사용자는 트러스트된 SQL Server 연결과 관련되어 있지 않습니다. (Microsoft SQL Server, 오류: 18452)


도움말을 보려면 다음을 클릭하십시오: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&EvtSrc=MSSQLServer&EvtID=18452&LinkId=20476





 Login failed for user 'sa'. The user is not associated with a trusted SQL Server connection. (Microsoft SQL Server, Error: 18452) 


 For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&EvtSrc=MSSQLServer&EvtID=18452&LinkId=20476



초기 설치시에는 기본 MS-SQL 서버 인증 상태가 Window 인증 모드로 되어있기 때문에


Sa 로 로그인 하려면 옵션을 변경해주어야 합니다.


서버 속성에서 보안 > 서버 인증 >  SQL Server 및 Windows 인증모드로 설정해줍니다.

(SQL Server and Windows Authentication mode)






댓글()

[에러노트] [DBNETLIB][ConnectionOpen (Connect()).]SQL Server가 없거나 액세스할 수 없습니다.

에러노트|2017. 9. 19. 18:20
반응형

업무용 PC를 포맷하고 MS-SQL Express 2012 버전 설치 이후 연결하려고 하면 



아래와 같은 오류 메시지가 뜹니다.



[DBNETLIB][ConnectionOpen (Connect()).]SQL Server가 없거나 액세스할 수 없습니다.





해결 방법 : 


1. SQL Server 구성 관리자 실행.



2.  SQL Server 네트워크 구성 > SQLEXPRESS 에 대한 프로토콜 선택


( 아래 사진 참고 )




3. TCP / IP 속성 > IP 주소 > IPAll > TCP 동적 포트 입력란에 1433 입력.


( 아래 사진 참고 )







위와 같이 수정하면 접속이 됩니다.


매번 포맷하고 나서 설치 할때 마다 이러고 있는데


저장 / 공유용으로 기록을 남깁니다.


댓글()

[MS-SQL] 테이블 정의서 생성 쿼리

DataBase/MS-SQL|2017. 9. 8. 11:34
반응형

MS-SQL 테이블 정의서 HTML 생성 쿼리

 

초기 출처는 기억이 잘 안나네요.
몇년전쯤 인터넷에서 찾았던 것 같습니다.(문제될 경우 연락주시면 삭제하겠습니다.)
이후 이것저것 수정해서 사용해왔고 현 시점에서 아래 최종본으로 공유합니다.
2000 버전과 2005버전으로 구분되어 있으나 크게 다른바가 없어서 문제 없이 작동합니다.

 

 

테이블 정의서.sql
다운로드

 

 

댓글()

[MS-SQL] 두 데이터베이스의 테이블 및 컬럼 비교하는 쿼리

DataBase/MS-SQL|2017. 9. 7. 15:04
반응형

 

MS-SQL 두 데이터베이스 

테이블 및 컬럼 비교 하는 쿼리

 

A 와 B 두 데이터베이스의 테이블 및 컬럼속성(데이터 타입 , 길이)를 비교하는 쿼리 입니다.

두 데이터 베이스간의 데이터 동기화를 위해 비교하기 위해 사용.

 

그때 그때 코딩하거나 찾아보기 귀찮기 때문에

블로그에 포스팅 해둠!

 

select A.table_name,
       A.column_name,
       A.column_default,
       A.data_type,
       A.character_maximum_length,
       B.column_name,
       B.column_default,
       B.data_type,
       B.character_maximum_length
  from information_schema.columns A
       left outer join 디비명.information_schema.columns B
                    on A.table_name = B.table_name
                       and A.column_name = B.column_name
 where ( B.column_name is null
          or B.column_name = ''
          or A.column_default <> B.column_default
          or A.data_type <> B.data_type ) -- and (A.table_name like '%테이블 이름%' or A.table_name = '테이블 이름') 
          order by A.table_name, A.column_name

댓글()