Oracle OCI8 설치 런타임 구성

이러한 함수의 동작은 php.ini의 설정에 영향을 받습니다.

OCI8 구성 옵션

Name Default Changeable Changelog
oci8.connection_class "" PHP_INI_ALL Available since PECL OCI8 1.3.
oci8.default_prefetch "100" PHP_INI_SYSTEM Available since PECL OCI8 1.1.
oci8.events Off PHP_INI_SYSTEM Available since PECL OCI8 1.3.
oci8.max_persistent "-1" PHP_INI_SYSTEM Available since PECL OCI8 1.1.
oci8.old_oci_close_semantics Off PHP_INI_SYSTEM Available since PECL OCI8 1.1. Deprecated as of PHP 8.1.0.
oci8.persistent_timeout "-1" PHP_INI_SYSTEM Available since PECL OCI8 1.1.
oci8.ping_interval "60" PHP_INI_SYSTEM Available since PECL OCI8 1.1.
oci8.prefetch_lob_size "0" PHP_INI_ALL Available since PECL OCI8 3.2.
oci8.privileged_connect Off PHP_INI_SYSTEM Available since PECL OCI8 1.1.
oci8.statement_cache_size "20" PHP_INI_SYSTEM Available since PECL OCI8 1.1.

다음은 구성 지시문에 대한 간단한 설명입니다.

oci8.connection_class string
이 사용자 정의 텍스트는 Oracle DRCP(데이터베이스 상주 연결 풀링)를 사용할 때 항상 설정해야 합니다. DRCP 연결 풀의 하위 분할을 허용하여 응용 프로그램의 OCI8 영구 연결이 이전 PHP 스크립트의 데이터베이스 세션을 재사용할 수 있도록 하여 더 나은 확장성을 제공합니다. 응용 프로그램이 이전에 다른 연결 클래스와 함께 사용된 데이터베이스 풀링 프로세스를 사용하는 경우 기본 Oracle 날짜 형식과 같은 세션 설정이 재설정됩니다. 이렇게 하면 서로 다른 응용 프로그램 간의 우발적인 정보 공유를 방지할 수 있습니다.

연결하기 전에 ini_set()을 사용하여 런타임에 값을 설정할 수 있습니다.

DRCP를 사용하려면 OCI8이 Oracle 11g(또는 그 이상) 라이브러리와 연결되어야 하고 데이터베이스는 Oracle 11g(또는 그 이상)이어야 합니다. DRCP 연결 풀은 데이터베이스에서 활성화되어야 하며, oci8.connection_class는 동일한 애플리케이션을 실행하는 모든 웹 서버에 대해 동일한 문자열로 설정되어야 하며, OCI8 연결 문자열은 풀링된 서버를 사용하도록 지정해야 합니다. 응용 프로그램은 영구 연결을 사용해야 합니다.

oci8.default_prefetch int
이 옵션은 데이터베이스에서 데이터에 대한 저수준 요청이 이루어질 때마다 자동으로 페치 및 캐시될 추가 행의 기본 수를 설정합니다. 값을 0으로 설정하면 프리페치가 해제됩니다.

프리페치 값은 oci_fetch_array()와 같은 기능이 사용자에게 반환하는 행 수를 변경하지 않습니다. 행의 프리페치 및 캐싱은 OCI8에서 내부적으로 처리됩니다.

명령문 실행 전에 oci_set_prefetch()를 사용하여 명령문별로 값을 설정할 수 있습니다.

PHP 5.3(PECL OCI8 1.3.4)에서는 기본값이 10에서 100으로 증가했습니다.

PHP 5.3.2(PECL OCI8 1.4)에서는 설정 가능한 최소값이 1에서 0으로 줄어들어 프리페칭을 끌 수 있습니다.

Oracle Database 12c(또는 그 이상)를 사용하는 경우 PHP에서 설정한 프리페치 값은 Oracle의 클라이언트 oraaccess.xml 구성 파일에 의해 재정의될 수 있습니다. 자세한 내용은 Oracle 설명서를 참조하십시오.

참고: 프리페치가 크면 메모리 사용량이 증가하는 대신 성능이 향상될 수 있습니다. 많은 양의 데이터를 반환하는 쿼리의 경우 성능상의 이점이 상당할 수 있습니다.

oci8.events bool
On을 사용하면 PHP가 데이터베이스 FAN(Fast Application Notification) 이벤트에 대한 알림을 받을 수 있습니다.

FAN이 없으면 데이터베이스 인스턴스 또는 시스템 노드가 예기치 않게 실패할 때 TCP 시간 초과가 만료될 때까지 데이터베이스 응답을 기다리는 PHP 애플리케이션이 차단될 수 있습니다. FAN 이벤트를 통해 PHP 애플리케이션은 설정된 데이터베이스 연결에 영향을 미치는 오류에 대해 신속하게 알립니다. OCI8 확장은 영구 연결 캐시에서 사용할 수 없는 연결을 정리합니다.

On을 사용하는 경우 FAN 이벤트를 게시하도록 데이터베이스도 구성해야 합니다.

FAN 지원은 OCI8이 Oracle 10gR2(또는 이후 버전) 라이브러리와 연결되고 Oracle Database 10gR2(또는 이후 버전)에 연결된 경우 사용할 수 있습니다.

oci8.max_persistent int
PHP 프로세스당 최대 영구 OCI8 연결 수입니다. 이 옵션을 -1로 설정하면 제한이 없음을 의미합니다.
oci8.old_oci_close_semantics bool
이 옵션은 oci_close() 동작을 제어합니다. 활성화한다는 것은 oci_close()가 아무것도 하지 않는다는 것을 의미합니다. 스크립트가 끝날 때까지 연결이 닫히지 않습니다. 이것은 이전 버전과의 호환성만을 위한 것입니다. 이 설정을 활성화해야 하는 경우 이 옵션을 활성화하는 대신 애플리케이션에서 oci_close() 호출을 조정하는 것이 좋습니다.
oci8.persistent_timeout int
PHP 프로세스가 유휴 영구 연결을 열린 상태로 유지하는 데 허용되는 최대 시간(초)입니다. 이 옵션을 -1로 설정하면 PHP 프로세스가 종료되거나 oci_close()로 연결이 명시적으로 닫힐 때까지 유휴 영구 연결이 유지됩니다.

참고: PHP에서 유휴 리소스의 만료는 경보 기반이 아닙니다. PHP가 스크립트 처리를 완료하고 리소스의 마지막으로 사용된 타임스탬프를 확인할 때 발생합니다. 따라서 PHP 프로세스에 일부 활동(꼭 OCI8과 관련된 것은 아님)이 있을 때만 유휴 연결을 닫을 수 있다는 역설이 있습니다. 둘 이상의 PHP 프로세스가 있는 경우 유휴 리소스의 만료를 트리거하려면 각각을 개별적으로 활성화해야 합니다. Oracle 11g에 DRCP(데이터베이스 상주 연결 풀링)가 도입되면서 oci8.max_persistentoci8.persistent_timeout이 이전에 극복하려고 시도했던 메모리 및 리소스 문제가 해결되었습니다.

참고: PHP 5.3(PECL OCI8 1.3)에서는 oci_close()를 사용하여 영구 연결을 닫을 수 있습니다.

oci8.ping_interval int
oci_pconnect() 동안 ping을 발행하기 전에 통과해야 하는 시간(초)입니다. ping은 데이터베이스 연결이 유효한지 확인합니다. 0으로 설정하면 oci_pconnect()가 호출될 때마다 영구 연결이 ping됩니다. ping을 완전히 비활성화하려면 이 옵션을 -1로 설정하십시오.

참고: ping을 비활성화하면 oci_pconnect()가 가장 효율적으로 작동할 수 있지만 PHP는 네트워크 드롭아웃으로 인해 또는 PHP 연결 이후 Oracle 데이터베이스가 다운된 경우 연결이 사용될 때까지 사용할 수 없는 연결을 감지하지 못할 수 있습니다. 나중에 스크립트에서. 자세한 내용은 oci_pconnect() 설명서를 참조하십시오.

oci8.prefetch_lob_size int
LOB 데이터의 내부 버퍼링에 영향을 주는 튜닝 파라미터이다. 이 값을 높이면 PHP와 데이터베이스 간의 왕복을 줄여 더 작은 LOB를 가져오는 성능을 향상시킬 수 있습니다. 메모리 사용량이 변경됩니다.

값은 OCILob 인스턴스로 반환된 LOB와 OCI_RETURN_LOBS를 사용하여 반환된 LOB에도 영향을 줍니다.

값은 명령문 실행 전에 oci_set_prefetch_lob()을 사용하여 명령문별로 설정할 수 있습니다.

참고: Oracle Database 12.2 이상과 함께 사용하십시오.

oci8.privileged_connect bool
이 옵션을 사용하면 연결에서 권한 있는 외부 자격 증명 OCI_SYSOPER 또는 OCI_SYSDBA를 사용할 수 있습니다.

참고: 이것을 On으로 설정하면 적절한 OS 사용자 권한으로 실행되는 웹 서버의 스크립트가 데이터베이스 암호를 요구하지 않고 권한 있는 데이터베이스 사용자로 연결할 수 있습니다. 이는 보안 위험이 될 수 있습니다.

oci8.statement_cache_size int
이 옵션은 명령문 캐싱을 활성화하고 캐시할 명령문 수를 지정합니다. 명령문 캐싱을 비활성화하려면 이 옵션을 0으로 설정하면 됩니다.

명령문 캐싱을 사용하면 명령문 텍스트를 데이터베이스로 전송할 필요가 없고 명령문에 대한 메타 데이터를 PHP로 다시 전송할 필요가 없습니다. 이는 연결 수명 동안 명령문을 재사용하는 응용 프로그램의 전체 시스템 성능을 크게 향상시킬 수 있습니다. 명령문이 재사용된다는 가정하에 일부 추가 데이터베이스 "커서"가 열려 있을 수 있습니다.

이 값을 애플리케이션에서 사용하는 작업 명령문 세트의 크기로 설정하십시오. 값을 너무 작게 설정하면 명령문이 재사용되기 전에 캐시에서 플러시될 수 있습니다.

이 옵션은 영구 연결에 가장 많이 사용됩니다.

Oracle Database 12c(또는 이후 버전)를 사용하는 경우 이 값을 재정의하고 Oracle의 클라이언트 oraaccess.xml 파일에서 자동으로 조정할 수 있습니다. 자세한 내용은 Oracle 설명서를 참조하십시오.