2012-01-24 2 views
1

회사 php 웹 사이트는 사용자, 암호 및 고객 레지스트리와 같은 필요한 모든 데이터가 저장되어있는 Advantage Database Server에 연결됩니다.Advantage 및 PHP - 오류 6303 : 최대 Advantage 데이터베이스 서버 연결 초과

경고 : SQL 오류 :

는 최근에 우리가 웹 페이지를 요청하는 오류가 발생하기 시작했다 [확장 시스템] [어드밴티지 SQL은] [ASA] 오류 6303 : 최대 장점 데이터베이스 서버 연결을 초과했습니다. axServerConnect, C : \ ... \ www \ ...의 SQLDriverConnect에있는 SQL 상태 HY000 ...

하루 중 중요 해지고 있으며 일주일에 한 번 또는 하루에 두 번 명백한 이유없이 발생할 수 있습니다. .

웹 사이트가 손상되면 데이터베이스 서비스가 계속 연결된 다른 응용 프로그램과 잘 작동하며 웹 서비스를 복원하는 유일한 방법은 Apache 웹 서버를 다시 시작하는 것입니다.

데이터베이스 서버에는 우리의 요구에 비해 "MAX_CONNECTIONS = 1000"으로 최대 연결 설정을 한 C : \ Windows 폴더에 ads.ini 구성 파일이 있습니다.

"RETRY_ADS_CONNECTS = 1"도 설정하면 유용 할 수 있습니까 ??

Is this a bug with Advantage Database?

이가 수정되었습니다 :

나는 R & D는 2009 년 5 월 버그를 확인이 게시물을 발견? 릴리스에서?

db의 아파치에서 열린 실제 연결 수는 어디에서 확인할 수 있습니까?

각 PHP 페이지가 바닥 글에 광고 연결을 닫습니다. 무엇이 연결을 초과 할 수 있습니까 ??

미리 도움을 청하십시오.

- 환경 정보

데이터베이스 : 윈도우 2003 서버에서 장점 데이터베이스 서버 10.10.0.6

웹 서버 : 아파치/2.0.59 (Win32에서)의 mod_ssl/2.0.59 OpenSSL을/0.9. Windows XP Professional에서 8d PHP/4.4.7

phpinfo() 페이지에서 "Advantage 버전" "8.00.0.0"을 얻습니다. 이유가 무엇인가요? php-advantage 확장을 업그레이드해야합니까?

답변

2

많은 질문이 있지만 각 주소를 시도해 보겠습니다.

1) 6303 오류. 이 문제를 해결하는 올바른 방법은 MAX_CONNECTIONS를 사용하는 것입니다.
[설정] 섹션에 MAX_CONNECTIONS가 있는지 확인하십시오. Apache/PHP/ADS 드라이버가 올바른 ads.ini 파일을 사용하는지 확인하십시오. Sysinternals의 프로세스 모니터를 사용하여 성공적으로 열렸던 ads.ini 파일을 확인할 수 있습니다. PHP 드라이버를 업그레이드하면 adsini가있는 디렉토리를 가리 키도록 환경 변수 adsini_path를 설정할 수 있습니다.

2) RETRY_ADS_CONNECTS = 1로 설정하면 도움이됩니다. 이것은 ads.ini의 [SETTINGS] 섹션에도 적용됩니다. ADS 클라이언트가 네트워킹 오류 (일반적으로 6000 클래스 오류)를 받으면 클라이언트 드라이버는 오류를 캐시에 저장하고 후속 연결 시도는 캐싱 된 오류 대 재 시도를 사용합니다.RETRY_ADS_CONNECTS를 설정하면 캐싱 된 오류를 무시하고 연결을 다시 시도합니다.

3) 버그 : http://devzone.advantagedatabase.com의 릴리스 정보를 기반으로 드라이버 9.10.0.9 버전에서 수정 된 것 같습니다.

Fixed an issue where the garbage collection reference count on a connection would be incorrect if multiple SQL statements were opened on it.

10.1 서버를 실행하고 있으므로 수정 사항이 포함 된 10.1 클라이언트로 업데이트 할 수 있습니다. 10.1 Advantage PHP Driver

4) 연결 의 실수를 참조하십시오 내가 저장 프로 시저 sp_mgGetConnectedUsers를 사용하는 것이 좋습니다, 당신은 ARC (어드밴티지 데이터 아키텍트를 사용할 수있는 것입니다)하지만 10.1을 사용하고 있기 때문에 그것은 등 그룹, 순서, 에 어려울 수 있습니다 당신은 당신은 또한 사용자 이름 (서버 이름)로 PHP 애플리케이션을 식별하는 다른 필드를 사용할 수있는 등

SELECT COUNT(*) FROM (EXECUTE PROCEDURE sp_mgGetConnectedUsers()) u WHERE ADDRESS='xxx.xxx.xxx.xxx' 

쿼리에서 저장 프로 시저의 결과를 포함 할 수 PHP 애플리케이션을 가정 DictionaryUser은 (고유를 사용 사용자), ApplicationID

5) PHPINFO는 Advantage PHP 클라이언트 드라이버의 Advantage 버전을 표시합니다. 위에서 언급 한 이유로 클라이언트 드라이버를 업그레이드 할 수 있습니다. DLL 파일 (ace32.dll, axces32.dll, adsodbc.dll 및 php_advantage.dll)을 스와핑하는 것만 큼 간단해야하지만, 모든 것을 얻을 수 있도록 먼저 테스트하는 것이 좋습니다.

+0

제발, 우리를 다시 도울 수 있습니까? 프로세스 모니터를 설치했지만 .ini 파일이 아닌 .dll 파일 만 보았습니다 - MAX_CONNECTIONS 번호는 어디에서 변경해야합니까? –

+0

ads.ini를 php 디렉토리 또는 windows 또는 windows \ system32 폴더에 배치 해 볼 수 있습니다. PHP 드라이버를 업그레이드 한 경우 시스템 환경 변수 adsini_path를 설정하여 ads.ini가있는 폴더를 가리킬 수 있습니다. – Edgar