728x90
반응형
728x90
반응형

ERP와 연동하는 기능이 있는데 ERP를 고도화하면서 DB 버전이 업그레이드 되었습니다.

(window server 2008 -> SQL Server 2017, ERP는 mssql을 사용)

아래와 같은 문제가 발생하여 기존 연동하는 기능이 안되는 증상이 발생했습니다.

 

오류 내용

com.microsoft.sqlserver.jdbc.SQLServerException: 드라이버가 SSL(Secure Sockets Layer) 암호화를 사용하여 SQL Sever로 보안 연결을 설정할 수 없습니다. 원인: java.lang.RuntimeException: Could not generate DH keypair

상세 오류

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 드라이버가 SSL(Secure Sockets Layer) 암호화를 사용하여 SQL Sever로 보안 연결을 설정할 수 없습니다. 원인: java.lang.RuntimeException: Could not generate DH keypair
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(Unknown Source)
	at com.microsoft.sqlserver.jdbc.TDSChannel.throwSSLConnectionFailed(Unknown Source)
	at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(Unknown Source)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(Unknown Source)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.loginWithoutFailover(Unknown Source)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(Unknown Source)
	at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(Unknown Source)
	at com.caucho.sql.DriverConfig.createDriverConnection(DriverConfig.java:596)
	at com.caucho.sql.ManagedConnectionImpl.initDriverConnection(ManagedConnectionImpl.java:242)
	at com.caucho.sql.ManagedConnectionImpl.<init>(ManagedConnectionImpl.java:131)
	at com.caucho.sql.ManagedFactoryImpl.createManagedConnection(ManagedFactoryImpl.java:121)
	at com.caucho.jca.ConnectionPool.create(ConnectionPool.java:780)
	at com.caucho.jca.ConnectionPool.allocatePool(ConnectionPool.java:649)
	at com.caucho.jca.ConnectionPool.allocate(ConnectionPool.java:608)
	at com.caucho.jca.ConnectionPool.allocateConnection(ConnectionPool.java:505)
	at com.caucho.sql.DataSourceImpl.getConnection(DataSourceImpl.java:65)
	at com.caucho.sql.DBPool.getConnection(DBPool.java:624)

원인은 구글링해보니 JDBC호환 문제라고 하네요.

기존에 사용하는 sqljdbc4.jar를 jtds-1.2.5.jar파일로 변경하였습니다.

JDBC 드라이버를 변경했으니 was config설정도 변경해주어야 합니다.

 

MSSQL JDBC 드라이버 설정 방법

Driver [com.microsoft.sqlserver.jdbc.SQLServerDriver]
URL [jdbc:sqlserver://localhost:1433;DatabaseName=DBNAME]
* JDBC드라이버 : sqljdbc.jar 또는 sqljdbc4.jar (MS-SQL 2008까지 지원)

 
Driver [net.sourceforge.jtds.jdbc.Driver]
Driver [net.sourceforge.jtds.jdbcx.JtdsDataSource]
URL [jdbc:jtds:sqlserver://localhost:1433/DBNAME;tds=8.0;lastupdatecount=true]
* JDBC드라이버 : jtds-1.2.jar
728x90
반응형
728x90
반응형

본인이 설치한 mssql의 버전을 까먹는 경우가 있죠

제가 그랬습니다...ㅎㅎ

 

구글링해보니 쿼리로 설치된 MSSQL 버전을 확인할 수 있더라구요.

바로 알아보도록 하겠습니다.

 

select @@VERSION

 

조회 결과

Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) 
Oct 20 2015 15:36:27 
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.3  (Build 9600: ) (Hypervisor)

Microsoft SQL Server 2012버전이 설치된 것을 확인할 수 있습니다.

 

추가로 자세한 버전에 대한 함수 정보는 아래 URL을 통해 확인하시면 될 것 같습니다.

https://docs.microsoft.com/ko-kr/sql/t-sql/functions/version-transact-sql-configuration-functions?redirectedfrom=MSDN&view=sql-server-ver15

728x90
반응형
728x90
반응형

테이블 내 컬럼을 조회하려나 아래와 같은 메세지가 발생하였습니다.

키워드 'lineno' 근처의 구문이 잘못되었습니다.

구글링 결과 mssql에서 lineno를 키워드로 사용하고 있어 발생하였습니다.

키워드를 컬럼명으로 사용을 원한다면 "" 따옴표를 붙여 조회하시면 됩니다.

ex) select "lineno" from dual;

 

예약어

https://docs.microsoft.com/ko-kr/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-ver15

728x90
반응형
728x90
반응형

mssql 다국어 입력하는 법에 대해 알아보겠습니다.

일본어 데이터 입력중 メンバ (회원) 이라는 값을 입력해보니 メンバ? 물음표로 나타나였습니다.

 

1. 데이터 타입

 -기존 : char, varchar, text

 -변경 : Nchar, Nvarchar, Ntext

 

2. 쿼리 수정

 -기존 : update 테이블명 set 컬럼명='メンバー' 

 -변경 : update 테이블명 set 컬럼명=N'メンバー'

insert문 역시 동일하며 값을 입력할때 N을 붙여주면 됩니다.

대문자 N은 National을 의미합니다.

728x90
반응형
728x90
반응형

MSSQL을 사용하다 보면 select를 하고 싶은데 조회 결과가 나오지 않거나 타임아웃에 걸려 커넥션이 끊어지는 경우가 잇습니다.

테이블에 락이 걸려서 이런 현상이 발생하곤 하는데요.

MSSQL의 경우 여러 사용자 중 한명이 락이 걸린 경우 역시 조회가 되지 않는다고 하네요.


락 걸린 쿼리를 조회하여 강제로 kill하는 방법에 대해 알아보겠습니다.


1. sp_lock 실행

 Mode값이 X인 경우 락이 걸린 것인데 이때 spid를 확인합니다.

 


2. 락 걸린 쿼리 조회

 dbcc inputbuffer(87)


3. spid이용하여 kill하기

 kill 87


락으로 의심되는 spid 조회하기


SELECT p.status ,p.program_name ,p.hostname ,p.spid ,p.blocked ,p.kpid

    ,p.cpu ,p.physical_io ,p.waittype ,p.waittime ,p.lastwaittype

    ,p.waitresource ,p.dbid ,p.uid ,p.memusage ,p.login_time ,p.last_batch

    ,p.ecid ,p.open_tran ,p.sid ,p.hostprocess

    ,p.cmd ,p.nt_domain ,p.nt_username ,p.net_address

    ,p.net_library ,p.loginame ,p.context_info ,p.sql_handle

    ,p.stmt_start ,p.stmt_end

FROM master..sysprocesses p

WHERE (

        STATUS LIKE 'run%'

        OR waittime > 0

        OR blocked <> 0

        OR open_tran <> 0

        OR EXISTS (

            SELECT *

            FROM master..sysprocesses p1

            WHERE p.spid = p1.blocked

                AND p1.spid <> p1.blocked

            )

        )

    AND spid > 50

    AND spid <> @@spid

ORDER BY CASE

        WHEN STATUS LIKE 'run%'

            THEN 0

        ELSE 1

        END

    ,waittime DESC

    ,open_tran DESC

728x90
반응형
728x90
반응형

+ Recent posts