레이블이 mssql인 게시물을 표시합니다. 모든 게시물 표시
레이블이 mssql인 게시물을 표시합니다. 모든 게시물 표시

2021년 4월 30일 금요일

Apache Zeppelin에서 jdbc 연동시 조회할때 TLS 관련 오류 발생

0. 현재 개발환경

    - OS : Ubuntu 20.4

    - Main DB : SQL Server on Linux 2019 Express

    - 보조 DB : SQL Server 2008, SQL Server 2014

    - Java : Apache Zeppelin 권장 버전 (OPENJDK 1.8)

1. 보다시피 버전차이가 엄청 남.

2. Zeppelin에 jdbc (9.2.1) 연결을 했을때, SQL Server 2014는 아무 문제가 없음

3. SQL Server 2008에 연결시 TLS 버전을 지원 안한다는 오류 발생함.

4. 해당 서버 버전의 TLS 1.0 프로토콜이 너무 오래되서 지원을 안함.

5. 일단.. 해당 서버의 OS인 Windows 2008 R2에 TLS 1.1 / TLS 1.2 설정을 해줌.

6. 동일 에러 발생 - SQL Server 2008 자체에서 TLS 1.0 통신만 지원하는 것으로 판단.

7. jdbc 4.2를 쓰면 된다는 개소리 믿고 삽질하다가.. 다음과 같은 글 발견..

https://blog.naver.com/PostView.nhn?blogId=hgp33&logNo=221293449287&from=search&redirect=Log&widgetTypeCall=true&directAccess=false

8. 뭐 내용은 Java jdbc 보안문제로 동일함.

9. 문득 깨닮음을 얻은 나는 Ubuntu의 JRE에 있는 security 설정을 건들면 되겠다는 생각이 듬.

10. 저 링크에는 싹 지우라고 했지만... 글 자체가 3년이 넘은지라.. 

    내 목적인 TLS 관련 부분만 지움..

    jdk.tls.disabledAlgorithms 에서 TLS 1.0, TLS 1.1을 지워주자..

11. 당근 바로 안된다.. 서버 재부팅!!!

12. 해결!

13. 끗! 뭘봐!

2021년 2월 10일 수요일

Apache Zeppelin jdbc 구축기

회사에 빅데이터 분석 툴을 위해 이것저것 알아보고 조언도 듣다가..

일단은 Apache Zeppelin 을 구축해 보기로 결심..

1. 처음에는 내 로컬에 구축해서 돌려보려고 시도함.

2. 최신 버전이 2021-02-10 기준 0.9 버전인데.. 공식적으로 윈도우즈를 지원하지 않는 것으로 보임.. 어떻게든 돌려볼려고 했으나, 온갖 별의별 오류가 나와서 실패.

3. 오류 찾다가 시간 다 갈꺼 같아서.. 회사 NAS에 구축 시도.

4. 처음에는 시놀로지 NAS에 구축하다가, 콘솔 명령어가 너무 부족해서, CentOS 6.6 쓰는 파일서버로 계획 변경

5. 패키지 설치보다는 편안하게 docker로 설치하기로 결심

6. 환경이 mssql이라 mssql jdbc 드라이버 준비 (다운로드) : 최신버전으로 함 (9.2)

7. Apache Zeppelin docker image는 여기서 받음 (가보자)

8. docker 설치는 너무 쉬워서 패스, 기본 구동도 쉬워서 패스.

9. 참고글을 보고 진행함. 참고에서는 명령어를 치라고 되어 있는데, 그냥 sh 파일 만들어서 진행함.

10. 내용에서 좀 다르게 한거는 artifacts 이 경로가 실제 구동되었을때 위치가 좀 다르더만.. artifacts 안에다가 jdbc 드라이버를 넣으면 됨.

11. 참고글에는 jTDS 드라이버로 했으나, 내 환경에서는 되지 않기에 MS에서 제공하는 것으로 변경함.

12. 인터프리터 설정에서 jdbc 설정하듯이 하면 됨.. 쉽다..

13. 노트 생성하고 쿼리 날려보니 결과도 잘 나옴..

14. 자~~ 이제 뭘 해볼까...


끗!!


2018년 10월 31일 수요일

SQL 조건절에 CASE 문으로 여러 조건 결합하기...

오늘의 난관..

SQL 쿼리에서 기존에 프로시저를

8개 매장별로 조회하게 만들었는데..

오늘 요건이 인터넷 매장은 따로 보고...

전체 매장을 선택하면 인터넷 매장을 제외한 나머지들의 합산만 보고 싶다고 하여..

궁리...

프로시저에 임시테이블을 써서.. 분기문으로 나눌수가 없음..

조건절에서 제어해야 할 거 같아서.. 이리저리 구글링해 보니..

CASE WHEN을 OR로 연결해서 쓸 수 있다는 걸 알게 됨..

5000 이란 코드가 들어오면.. 인터넷 매장 (5040)을 제외한 나머지를 조회 시키고..

해당 매장코드가 들어오면 정상조회를 시키는 쿼리를 결국 완성..


  1. AND
  2.         (
  3.             (
  4.                 CASE WHEN @LOC = '5000' THEN '5010' END = 매장코드컬럼
  5.                 OR
  6.                 CASE WHEN @LOC = '5000' THEN '5020' END = 매장코드컬럼
  7.                 OR
  8.                 CASE WHEN @LOC = '5000' THEN '5030' END = 매장코드컬럼
  9.                 OR
  10.                 CASE WHEN @LOC = '5000' THEN '5060' END = 매장코드컬럼
  11.                 OR
  12.                 CASE WHEN @LOC = '5000' THEN '5070' END = 매장코드컬럼
  13.                 OR
  14.                 CASE WHEN @LOC = '5000' THEN '5080' END = 매장코드컬럼
  15.                 OR
  16.                 CASE WHEN @LOC = '5000' THEN '5090' END = 매장코드컬럼
  17.             )
  18.             OR 매장코드컬럼 LIKE ''+ @LOC + ''
  19.         )

또 쿼리 철인가... 쿼리만.. 죽어라 하게 되네...


======================================

2020-12-02 : 좀 나중에 덧붙임..

이렇게 쓰면.. 쿼리 처리는 쉽겠지만.. 성능은 포기해야 할지도..

지금 다시 짜라고 하면.. @LOC 별로 분기를 만들어서.. 귀찮지만(!!)

각각에 해당하는 쿼리를 짜는 것을 선택할 듯...

2018년 10월 22일 월요일

Java OpenJDK 10에서 MSSQL Connection 문제에 대해서...

Oracle의 삽질 덕분에..

혼자서 미리 피해보겠다고 OpenJDK 10으로 갈아탄 나...

덕분에 나의 최애 툴인 squirrel-sql에서 MS-SQL 접속 문제가 계속 발생한다..

로그 내용은 주로 연결 거부 또는 보안 문제로 접속을 할 수 없다인데...

웃긴건... 이클립스에도 비슷한 증상이 발생..

그래서..

운영 쪽은 JDK 1.8로 내리고.. mssql driver도 구버전으로 내렸다..

그래도 왠지 아쉬워서.. 개발환경은 어떻게든 해보려 했으나..

driver 버전과 상관없이 Java 쪽의 사정으로 연결 거부만 발생...

아마도 MS-SQL 서버의 구버전(경험상 2005 미만)들에는

동일한 문제가 발생하는 것으로 보인다..

결국은 http://jtds.sourceforge.net/ 라는 오픈소스 드라이버 적용하여 해결..

좀 허무하긴 한데.. 그래도 Java 버전 안 바꿔서 다행임..

끗!

2018년 8월 21일 화요일

Using SQuirreL SQL Client With OpenJDK 10.X

Java가 유료화 된다는 소식을 접하고..

나중에 생길수도 있는 불필요한 문제를 피하고자 OpenJDK로 갈아탔다..

요즘엔 Java 개발할 일이 없어서 일단... 환경설정만 OpenJDK 10.2 버전에 맞게 설정했음.

그런데!!!

두둥!!!!

Squirrel SQL Client 3.7.X 버전이 니가 JRE를 10 버전 이상 쓰고 있다고 안된다고 오류 발생.

OpenJDK 버전을 상위버전에서 지원할까 하여 3.8.1 버전 다운로드해서 설치했지만..

여전히 같은 오류 발생...

로그를 봤을때는 JRE 버전체크를 통과 못하는 것으로 보인다..

실행 배치 파일을 열어서 확인..


다음과 같은 줄이 보였다..

@REM "%LOCAL_JAVA%" -cp "%SQUIRREL_SQL_HOME%\lib\versioncheck.jar" JavaVersionChecker 1.8 9


@REM는 내가 주석처리 한 거임.. 위의 명령 대신...

"%LOCAL_JAVA%" -cp "%SQUIRREL_SQL_HOME%\lib\versioncheck.jar" JavaVersionChecker 10

요렇게 바꿔주니까 통과!!

그런데.. 기존 설정에서 MS-SQL JDBC 드라이버를 6.2 버전쓰고 있었는데..

이번엔 Class가 없다는 오류가 발생..

역시 요딴거에 패치가 있을듯 하여.. 검색하니..

https://docs.microsoft.com/ko-kr/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-2017

에서 7.0 버전 발견..

설치해 보니.. JRE 8 버전과 JRE 10 버전 두가지 드라이버가 있드라..

그래서.. 10버전으로 드라이버 교체해서 성공!!

끗!


2018년 3월 19일 월요일

MSSQL에서 특정 컬럼을 SPLIT 해서 값을 구하고 싶을때.

일반 예제들을 보면.. split의 기능 구현만 되어 있다..

지금 내가 하려는 도서 크기의 X * Y 값에 대해서 split을 하면

테이블 반환 함수 형태가 되어 2건의 결과가 나온다..

더 중요한건 내가 원한 것은 상품코드 당 split 한 결과들이 각각 연결되야 하는데..

잘 안되더라~~

그래서 구글링~~

https://dba.stackexchange.com/questions/86143/how-to-join-a-table-with-a-table-valued-function


SELECT

M.상품코드,

M.상품크기,

U.*

FROM

상품테이블 M

CROSS APPLY dbo.fnSplit(M.상품크기,'*') U

WHERE 1=1

AND ITEM_SIZE IS NOT NULL

AND (LEN(ITEM_SIZE)-LEN(REPLACE(ITEM_SIZE,'*',''))) > 0


요딴식으로 하면

A000200752  72*105  1   72

A000200752  72*105  2   105

A000200753  83*118  1   83

A000200753  83*118  2   118

이런식으로 결과가 각각 나뉘어서 출력된다.. 오늘 CROSS APPLY란거 하나 배웠네..

나머진 알아서 요리 시작!

끗!


2017년 10월 18일 수요일

DB에서 구분자가 들어간 파라메터를 한줄로 출력

업무를 하다 보니...

DB 프로시저 등에 파라메터를 여러개 전달해서

구분자로 분해해서 쿼리의 IN 문장에 쓰고 싶은 경우가 많은데..

정작 찾아보니... 없다!!

split 구현한것들은 내가 원하는 형태가 안 나오길래.. 직접 구현..

목표는 '5040:5050:5060:' --->'5040','5050','5060' 요 딴식이다!!

이하 mssql 스칼라 함수!!

(
P.S. 기껏 만들어 놨더니.. 생각대로 안됨... 내가 상상한 사용법으로 안됨..

https://stackoverflow.com/questions/2944511/sql-server-in-clause-with-a-declared-variable

위의 링크대로 해야 함..
)


  1. SET ANSI_NULLS ON
  2. GO
  3. SET QUOTED_IDENTIFIER ON
  4. GO
  5. -- =============================================
  6. -- Author:     
  7. -- Create date: <2017-10-18>
  8. -- Description: <특정구분자로 결합된 문자 집합을 IN에 사용할 수 있는 형식으로 변경 반환 '5040:5050:5060:' --->'5040','5050','5060' >
  9. -- 구분자 마지막까지 붙일것!!!
  10. -- SELECT dbo.UFN_CONVERT_PARAMS('5040:5050:5060:',':')
  11. -- =============================================
  12. ALTER FUNCTION dbo.UFN_CONVERT_PARAMS(
  13.     @PARAMS VARCHAR(5000),
  14.     @TOKKEN VARCHAR(10)
  15. )
  16. RETURNS VARCHAR(5000)
  17. AS
  18. BEGIN
  19.     DECLARE @RTN    VARCHAR(5000)
  20.     DECLARE @TMP_CNT    INT
  21.     DECLARE @loop INT
  22.     SET @TMP_CNT = LEN(@PARAMS)-LEN(REPLACE(@PARAMS,@TOKKEN,''))    -- 슬래시 갯수 추출
  23.     SET @loop = 0
  24.    
  25.     DECLARE @SPLIT_SP   VARCHAR(500)    --분리한 값 저장
  26.     DECLARE @SPLIT_REMAINS  VARCHAR(500)
  27.     DECLARE @SPLIT_TMP_CD   VARCHAR(5)
  28.     SET @SPLIT_SP = ''
  29.     SET @SPLIT_TMP_CD = ''
  30.     SET @SPLIT_REMAINS = @PARAMS
  31.     WHILE(@loop < @TMP_CNT)
  32.     BEGIN
  33.         SET @SPLIT_TMP_CD = LEFT(@SPLIT_REMAINS,CHARINDEX(@TOKKEN,@SPLIT_REMAINS)-1)
  34.         SET @SPLIT_SP = @SPLIT_SP + '''' + @SPLIT_TMP_CD + '''' + ','
  35.         SET @SPLIT_REMAINS = REPLACE(@SPLIT_REMAINS,LEFT(@SPLIT_REMAINS,CHARINDEX(@TOKKEN,@SPLIT_REMAINS)),'')
  36.         SET @loop = @loop + 1      
  37.     END
  38.     RETURN LEFT(@SPLIT_SP, LEN(@SPLIT_SP) - CHARINDEX(',', reverse(@SPLIT_SP)))
  39. END
  40. GO

2017년 7월 4일 화요일

SQL AGENT 에서 Application Name 으로 프로시저 찾기

먼저 하단 함수 생성


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[GetJobIdFromProgramName] (
   @program_name nvarchar(128)
)
RETURNS uniqueidentifier
AS
BEGIN
DECLARE @start_of_job_id int
SET @start_of_job_id = CHARINDEX('(Job 0x', @program_name) + 7
RETURN CASE WHEN @start_of_job_id > 0 THEN CAST(
      SUBSTRING(@program_name, @start_of_job_id + 06, 2) + SUBSTRING(@program_name, @start_of_job_id + 04, 2) + 
      SUBSTRING(@program_name, @start_of_job_id + 02, 2) + SUBSTRING(@program_name, @start_of_job_id + 00, 2) + '-' +
      SUBSTRING(@program_name, @start_of_job_id + 10, 2) + SUBSTRING(@program_name, @start_of_job_id + 08, 2) + '-' +
      SUBSTRING(@program_name, @start_of_job_id + 14, 2) + SUBSTRING(@program_name, @start_of_job_id + 12, 2) + '-' +
      SUBSTRING(@program_name, @start_of_job_id + 16, 4) + '-' +
      SUBSTRING(@program_name, @start_of_job_id + 20,12) AS uniqueidentifier)
   ELSE NULL
   END
END --FUNCTION


에이전트 로그에서

SELECT *
FROM msdb.dbo.sysjobs
WHERE
job_id = dbo.GetJobIdFromProgramName ('SQLAgent - TSQL JobStep (Job 0xC8FAC217480CAB478E3BB07AB02962E9 : Step 2) ') 

같이 검색하면 짜잔~~! 나옴.

이거 땜시로 오늘 완전 개고생 함..


2017년 4월 20일 목요일

회사 DB를 튜닝할때 참고한 글...

확실하게 효과 본 링크글..

http://blog.daum.net/wowratm/8486613

여기서 제일 효과가 괜찮은건

"비용이 높은 누락된 인덱스"

이것만 적용해도 속도가 엄청 좋아짐!

2016년 10월 28일 금요일

회사에서 DB의 컬럼값에 대한 유사성을 대조하는 로직을 찾던 중..

http://stackoverflow.com/questions/8518695/t-sql-get-percentage-of-character-match-of-2-strings

위의 로직을 발견..

상당히 괜찮다!!


SELECT  [dbo].[GetPercentageOfTwoStringMatching]('valentin123456'  ,'valnetin123456')



CREATE FUNCTION [dbo].[GetPercentageOfTwoStringMatching]
(
    @string1 NVARCHAR(100)
    ,@string2 NVARCHAR(100)
)
RETURNS INT
AS
BEGIN

    DECLARE @levenShteinNumber INT

    DECLARE @string1Length INT = LEN(@string1)
    , @string2Length INT = LEN(@string2)
    DECLARE @maxLengthNumber INT = CASE WHEN @string1Length > @string2Length THEN @string1Length ELSE @string2Length END

    SELECT @levenShteinNumber = [dbo].[LEVENSHTEIN] (   @string1  ,@string2)

    DECLARE @percentageOfBadCharacters INT = @levenShteinNumber * 100 / @maxLengthNumber

    DECLARE @percentageOfGoodCharacters INT = 100 - @percentageOfBadCharacters

    -- Return the result of the function
    RETURN @percentageOfGoodCharacters

END




-- =============================================     
-- Create date: 2011.12.14
-- Description: http://blog.sendreallybigfiles.com/2009/06/improved-t-sql-levenshtein-distance.html
-- =============================================

CREATE FUNCTION [dbo].[LEVENSHTEIN](@left  VARCHAR(100),
                                    @right VARCHAR(100))
returns INT
AS
  BEGIN
      DECLARE @difference    INT,
              @lenRight      INT,
              @lenLeft       INT,
              @leftIndex     INT,
              @rightIndex    INT,
              @left_char     CHAR(1),
              @right_char    CHAR(1),
              @compareLength INT

      SET @lenLeft = LEN(@left)
      SET @lenRight = LEN(@right)
      SET @difference = 0

      IF @lenLeft = 0
        BEGIN
            SET @difference = @lenRight

            GOTO done
        END

      IF @lenRight = 0
        BEGIN
            SET @difference = @lenLeft

            GOTO done
        END

      GOTO comparison

      COMPARISON:

      IF ( @lenLeft >= @lenRight )
        SET @compareLength = @lenLeft
      ELSE
        SET @compareLength = @lenRight

      SET @rightIndex = 1
      SET @leftIndex = 1

      WHILE @leftIndex <= @compareLength
        BEGIN
            SET @left_char = substring(@left, @leftIndex, 1)
            SET @right_char = substring(@right, @rightIndex, 1)

            IF @left_char <> @right_char
              BEGIN -- Would an insertion make them re-align?
                  IF( @left_char = substring(@right, @rightIndex + 1, 1) )
                    SET @rightIndex = @rightIndex + 1
                  -- Would an deletion make them re-align?
                  ELSE IF( substring(@left, @leftIndex + 1, 1) = @right_char )
                    SET @leftIndex = @leftIndex + 1

                  SET @difference = @difference + 1
              END

            SET @leftIndex = @leftIndex + 1
            SET @rightIndex = @rightIndex + 1
        END

      GOTO done

      DONE:

      RETURN @difference
  END 

2016년 2월 15일 월요일

상품 목록에서 같은 품목이 여러개 있는데.. 가격이 각각일때.. 최소값 찾는 로직을 생각해 보았다..

회사 업무중..

상품 목록에서 같은 품목이 여러개 있는데.. 가격이 각각일때.. 최소값 찾는 로직을 생각해 보았다..

NEW_GOODS라는 상품 목록 테이블이 있고.. 분류가 'C'로 시작하는 넘들을

MASTER_ITEM 이란 테이블에서 근사 값으로 가장 차이가 작은 넘들을 찾는 로직을

짜 봄...

한 쿼리로 해볼라고 했으나.. 실력 부족인지..

임시테이블을 사용해서 함..

일단.. NEW_GOODS와 MASTER_ITEM의 값 차이를 절대값으로 나열하는 테이블 생성..


SELECT 구바코드,
       Min(absval) AS ABSVAL
INTO   #tbl_abs
FROM   (SELECT A.구바코드,
               A.판매가,
               A.도서명,
               B.item_cd,
               B.item_nm,
               B.jung_unit,
               Abs(A.판매가 - B.jung_unit) AS ABSVAL
        FROM   new_goods A,
               master_item B
        WHERE  1 = 1
               AND LEFT(소분류, 1) = 'C'
               AND A.구바코드 = B.ean_cd) X
WHERE  1 = 1
GROUP  BY 구바코드 


그 다음.. 절대값 테이블에서 최소값만 매칭해서 검색하면 끝! 참 쉽죠??

SELECT DISTINCT X.구바코드,
                X.판매가,
                Min(item_cd) AS ITEM_CD
FROM   (SELECT A.구바코드,
               A.판매가,
               A.도서명,
               B.item_cd,
               B.item_nm,
               B.jung_unit ,
               Abs(A.판매가 - B.jung_unit) AS ABSVAL
        FROM   new_goods A,
               master_item B
        WHERE  1 = 1
               AND LEFT(소분류, 1) = 'C'
               AND A.구바코드 = B.ean_cd) X,
       #tbl_abs Y
WHERE  1 = 1
       AND X.absval = Y.absval
GROUP  BY X.구바코드,
          X.판매가
ORDER  BY 1 

2016년 2월 2일 화요일

MS SQL Express Profiler

회사 DB가 Express 2005 버전 사용 중..

프로파일러 돌릴 일이 있는데..

MSSM 아무리 찾아도 없네..

구글링 해보니..

Express 에는 없다고 전해라~~~


어떤 천사같은 유저가 만든거 찾음..

다운로드

버전이 14 하고 12가 있는데..

내 경우에는 12가 동작하였음..

2016년 1월 7일 목요일

MSSQL에서 소숫점 입력하다가... 에러 발생..

decimal로 컬럼을 설정하고..

사이즈는 그냥 디폴트로 했더니.. 8.8 이 기본으로 잡혔다..

그런데.. 3.5 란 값을 없데이트 했더니..

아래와 같은 오류 발생..

numeric을(를) 데이터 형식 numeric(으)로 변환하는 중 산술 오버플로 오류가 발생했습니다.


흠?? 이상하네.. 그냥 같은 타입인데.. casting 안 한거 같은 오류가 날까? 하다가..

이것 저것 찾아봐도.. 그냥 데이터 유형 잘못이라고 하는데..

컬럼의 Precision을 다시 수정해 봄.. 8.2 로.. 변경 하니..


된다...

뭐지??

일단 예상은.. squrrel에서 meta 정보를 보니.. 처음에는

Precision 이 8, Scale 이 8로 되어 있고, ColumnDisplaySize가 10으로 되어 있음..

이 상태에서 Scale이 2로 변경되니 문제 없음..

Precision과 Scale의 합이 커서 그런거 같다는 생각은 듬..

애초에 8.8로 설정을 안해줬음 되잖여!!!

2015년 12월 18일 금요일

MSSQL 쿼리 기록 조회...

어떤 쉐리가 데이터 지웠는데.. 안했다고 잡아 때는 중... 잡아서 고문해주마!!!

으흐흐흐흐흐흐흐흐흐!!!!





SELECT TOP 100 creation_time, 
               last_execution_time, 
               total_clr_time, 
               total_clr_time / execution_count         AS [Avg CLR Time], 
               last_clr_time, 
               execution_count, 
               Substring(st.text, ( qs.statement_start_offset / 2 ) + 1, 
               ( 
               ( CASE statement_end_offset 
               WHEN -1 THEN Datalength(st.text) 
               ELSE qs.statement_end_offset 
                                                                             END 
                 - 
                 qs.statement_start_offset ) / 2 ) + 1) AS statement_text 
FROM   sys.dm_exec_query_stats AS qs 
       CROSS apply sys.Dm_exec_sql_text(qs.sql_handle) AS st 
ORDER  BY total_clr_time / execution_count DESC; 

2015년 11월 26일 목요일

MSSQL + SOLR + Tomcat 구축 완료

생각보다 쉬웠네..

1. 준비물 : solr, mssql, tomcat, jdk1.6(반드시!!!!!)

2. 구축시 환경 : solr 4.3, mssql2000, tomcat 7, jdk1.6

3. 비고 : mssql jdbc driver 4.0을 구동 시키려면 jdk1.6 밖에 동작이 되지 않는다. solr 문제 같긴 한데.. jdk1.7이나 jdk1.6이나 차이가 별로 없으므로 그냥 jdk1.6 사용함.

4. 시작

4.1. solr 압축파일 해제 : 본인의 경우 --> D:\workspace\search\solr-4.3.0에 해제 함

4.2. solr 정상구동부터 시작

4.2.1. dist 디렉토리에 mssql jdbc driver를 넣는다(sqljdbc4.jar)

4.2.2. example 디렉토리에서 start.jar 실행(java -jar start.jar) --> 기본적으로 경량 WAS인 jetty가 실행된다. context의 경로는 example의 contexts의 solr-jetty-context.xml에서 설정 가능.

http://www.eclipse.org/jetty/configure.dtd
">
 
  /webapps/solr.war
  /etc/webdefault.xml
  /solr-webapp


4.2.3. http://localhost:8983/solr이 실행되면 1단계 성공!! 넌 이미 성공하고 있다!!

4.3 mssql과 solr 연결

4.3.0. CORE 추가(이걸 뺴먹었네..)

solr.xml안에 core를 추가한다...

 
   
    
 


4.3.1. D:\workspace\search\solr-4.3.0\example\example-DIH\solr\db 디렉토리를 D:\workspace\search\solr-4.3.0\example\solr에 복사해 놓는다. 요따구로..

4.3.2. D:\workspace\search\solr-4.3.0\example\solr\db\conf안의 db-data-config.xml와 schema.xml, solrconfig.xml를 편집한다.

4.3.2.1.  db-data-config.xml편집.
Sample
<dataconfig> <datasource driver="Java DB 드라이버" name="DB별칭" password="암호" url="JDBC연결문" user="계정"> <document> <entity deltaimportquery="DB질의어" name="item" pk="KEY커럼" query="업데이트시 사용할 쿼리"> <field column="상품코드" name="상품코드"> <field column="상품명" name="상품명"> </field></field></entity> </document> </datasource></dataconfig>

기본적인 데이터만 일단 가져오게 설정함.. 
가. dataSource에는 연결할 db 설정.. 일반적인 jdbc db pool 설정과 동일하다
나. entity의 name은 solr 관리자에서 참고할 이름임.
다. query는 요거 말고 deltaQuery도 있고 그런데.. 일단 저것만 하시라..(귀찮다)
라. field에서는 불러올 column 설정.
끗~~!

4.3.2.2.  schema.xml편집. 안에 내용이 너무 많아서.. 필요한 부분만...
  
   
   
   
   
   
   
   

prma_pcode
prma_name

가. 알아서 재주껏 수정!
나. uniqueKey도 변경해야 할 듯하나.. 실제 연동시 문제가 생기는 듯 하다..
끗~~~!

4.3.2.3 solrconfig.xml편집. 라이브러리 경로설정만 해주면 된다. 구글링 해보니 절대경로는 안되는듯 하다..상대경로로 입력.. dist의 경로를 잘 찾게 하시라!!



4.3.2. 이제 다시 solr 재시작 : 검색 코어 선택기에 위에 설정한 이름이 보인다.


4.3.3. Dataimport 시작 : 체크는 해주는 센스.. 데이터 받자마자 바로 입력을 위해서...
Auto-Refresh Status 체크하면 실시간으로 데이터가 들어오는걸 볼 수 있다. complete가 뜰때까지 대기.. 완료화면은 생략.. 초록색 글자가 뜰것이다..

4.3.4. 실행 테스트 q 항목에 검색컬럼:검색어 를 입력하고 출력형식(여기선 json)을 선택후 쿼리 실행을 하면 json 형태의 데이터 출력 완료.

4.3.5. solr + mssql 연동 끗~~~!~!

4.4. Tomcat과 연동 : jetty자체로 윈도우 서비스에 등록하기에 무리가 있어서... 사실.. 방법이 있는데.. 난 귀찮은게 싫다!!!! Tomcat으로 묶어서 윈도우 서비스에 올릴꺼임.. 싫으면 꺼져!!

4.4.1. 톰캣 설치 : 이 정도는 다들 하잖아요??

4.4.2. D:\workspace\search\solr-4.3.0\example\solr-webapp\webapp 안에 있는 파일을 Tomcat의 webapps로 복사.. 사실.. D:\workspace\search\solr-4.3.0\dist안의 solr war를 그냥 넣으면 Tomcat이 알아서 압축을 풀지만.. 이거나 저거나 똑 같음.. 다들 war 배포는 하잖아요?? 그따위꺼~!

4.4.3. Tomcat의 lib에 mssql jdbc driver 잊지말고 넣어주기!!!

4.4.4. 톰캣 실행 옵션에 solr이 실제 구동하는 경로를 넣어준다.
-DSolr.Solr.home=D:\workspace\search\solr-4.3.0\example\solr

4.4.5. Tomcat의 solr 웹컨테이너로 가서.. web.xml을 열고 env-entry의 주석을 풀고 수정해 준다.
다른건 필요없고 env-entry-value 값만 넣어주면 된다!!!

       solr/home
       D:\workspace\search\solr-4.3.0\example\solr
       java.lang.String
 

4.4.6. 브라우저 주소창에 http://localhost:8080/solr/#/를 힘차게 입력!!
위에서 본 jetty 구동화면이 나오면 성공.. 이하는 생략한다.. 할게 없거든...ㅡㅡ;;




끗~~~~~~~~~~~~~~~!! 안뇽~~~~~!

[낯선] 2026.06.20 이태원 MZK MuzikBar 공연

간만의 공연 이태원 비틀즈가 이전하여 MZK MuzikBar 로 새 단장 오픈을 한 뒤로 2번째 공연 새 베이시스트가 합류한 뒤로 첫 공연이기도 함.. 이래저래 틀린 부분도 많지만.. 그래도 간만에 그럭저럭 잘했다.. https://www.youtub...