programing

연결 테스트를 위한 범용 SELECT 쿼리

powerit 2023. 10. 30. 21:20
반응형

연결 테스트를 위한 범용 SELECT 쿼리

당사의 애플리케이션은 MySQL, MS SQL Server 및 Oracle DB와 함께 작동합니다.

우리의 C3P0 구성은preferredTestQuery연결을 테스트하는 옵션입니다.여기 우리의 Spring 구성이 있습니다.

<b:bean id="phoenixDataSource" 
               class="com.mchange.v2.c3p0.ComboPooledDataSource"
               destroy-method="close">

            <b:property name="driverClass" value="${database.driver}"/>
            <b:property name="jdbcUrl" value="${database.connectionURL}"/>
            <b:property name="user" value="${database.user}"/>
            <b:property name="password" value="${database.password}"/>

            <b:property name="initialPoolSize"><b:value>${database.initialPoolSize:10}</b:value></b:property>
            <b:property name="minPoolSize"><b:value>${database.minPoolSize:1}</b:value></b:property>
            <b:property name="maxPoolSize"><b:value>${database.maxPoolSize:25}</b:value></b:property>
            <b:property name="acquireRetryAttempts"><b:value>${database.acquireRetryAttempts:10}</b:value></b:property>
            <b:property name="acquireIncrement"><b:value>${database.acquireIncrement:5}</b:value></b:property>
            <b:property name="idleConnectionTestPeriod"><b:value>${database.idleConnectionTestPeriod:60}</b:value></b:property>
            <b:property name="maxIdleTime"><b:value>${database.maxIdleTime:10800}</b:value></b:property>
            <b:property name="maxConnectionAge"><b:value>${database.maxConnectionAge:14400}</b:value></b:property>
            <b:property name="preferredTestQuery"><b:value>${database.preferredTestQuery:SELECT 1}</b:value></b:property>
            <b:property name="testConnectionOnCheckin"><b:value>${database.testConnectionOnCheckin:false}</b:value></b:property>
            <b:property name="testConnectionOnCheckout"><b:value>${database.testConnectionOnCheckout:false}</b:value></b:property>

        </b:bean>

SELECT 1는 Oracle에 대해 유효한 쿼리가 아니지만,SELECT 1 FROM DUAL를 생성하지 않는 한 SQL Server에 대해 유효한 쿼리가 아닙니다.DUAL물건.

매우 간단한 질문: 연결을 테스트하기 위해 모든 플랫폼에서 보편적으로 사용할 수 있는 SELECT 또는 무해한 쿼리가 있습니까?

데이터베이스를 덮어쓸 수 있습니다.Oracle 설치를 위해 속성 파일의 TestQuery를 선호했지만 실행 가능한 범용 솔루션이 있는지 여전히 궁금합니다.

[편집] 커넥티비티 체크는 내 코드와 독립적으로 C3P0에서 이루어집니다.쿼리가 실패하면(디버그 로깅이 활성화된 경우) 로그에 오류를 기록합니다.제가 알기로는 해당 쿼리를 사용하는 코드는 없습니다. 시설이 연결 설정 여부를 자체적으로 확인하기 때문에 C3P0 구성의 일부입니다.그러면 저는 다른 일을 할 수 없습니다.현재 오라클 설치에 대한 쿼리를 구성만으로 재정의할 수 있었습니다.

그런데 코드를 통해 방언 구현을 테스트할 수 있다고 해도 "연결성을 테스트하기 위해 범용 쿼리를 실행할 수 있습니까? 아니면 DBMS에 특화된 무해한 쿼리를 실행해야 합니까?"와 같은 질문이 반복될 수 있습니다.

연결을 테스트하기 위해 모든 플랫폼에서 보편적으로 사용할 수 있는 무해한 쿼리?

연결성을 테스트하기 위해서?내 생각엔 너의SELECT * FROM DUAL연결을 테스트하기 위해 3개의 데이터베이스 모두가 괜찮을 것입니다. 인.SQL Server, 오류가 나타납니다. 잘못된 개체 이름 'dual'..데이터베이스에 연결되어 있음을 의미하며 테이블이 존재하지 않는다는 오류를 반환했습니다.

연결되어 있지 않으면 다른 오류가 발생하고 테이블에 대한 표준 오류 스택이 존재하지 않기 때문입니다.

다행히 SQL Server에서 dual이라는 이름의 테이블이 생성되면 좋을 것 같습니다.

하지만 나는 궁금해요, 그것을 갖는 것이 얼마나 어려운지.IF-ELSE코드에서 데이터베이스 연결을 확인하고 다른 데이터베이스에 대해 다른 쿼리를 가질 수 있도록 조건을 지정합니다.

백엔드에 여러 개의 데이터베이스 제품을 사용하는 대부분의 애플리케이션은 연결을 확인하기 위한 속성이 정의되어 있다고 생각합니다.

여기서 설명한 것처럼 Spring Configuration 파일에서 ternary 연산자를 시도하거나 DB 프로바이더를 기반으로 적절한 쿼리를 사용하여 테스트 DB에 논리를 적용하는 순수 Java 구성을 시도할 수 있습니다.

희망이 당신을 도와줬습니다!

언급URL : https://stackoverflow.com/questions/29818881/universal-select-query-for-testing-connectivity

반응형