>>윤지영 님께서 쓰시길<<
:: openldap를 사용하고 있습니다.
::
:: 사이베이스 DB에서 openldap 서버로
::
:: 데이타를 주기적으로 한꺼번에 몽땅(9000건정도)입력하고 있습니다.
::
:: 그래서 주기적으로 openldap 서버에서 데이타를 몽땅 삭제, 몽땅 입력을
::
:: 하려고 합니다.
::
:: openldap 서버에서 입력한 데이타를 몽땅 삭제하려면 어떻게 해야하느지 알고
::
:: 싶습니다.
::
안녕하세요.
OpenLDAP의 데이타를 몽땅 삭제 하려면 다음과 같은 방법을 이용하면됩니다.
1. 콘솔로 들어가서 데이타 디렉토리(slapd.conf의 directory에 명시된)에
데이타를 완전히 지우면 됩니다. 그리고 slapd를 다시 시작시키면 됩니다.
(디렉토리 통째로 묶어놓는 것도 백업이 됩니다.)
2. ldapdelete 명령으로 삭제를 합니다. 이때 openldap 버전 2대의 ldapdelete
에 -r 옵션이 있어서 recursive하게 서브트리까지 지워줍니다. 이 옵션을 쓰지
않으면 leaf entry만을 지울수가 있습니다. openldap 1.2대를 쓰신다면
-r옵션을 쓰실수 있는 패치를 구하셔서 패치를 가하신후 쓰시면 됩니다.
(OpenLDAP사이트에 search메뉴로 들어가서 "subtree delete" 검색을 하시면
패치를 구할수 있습니다.
3. 아무래도 위의 말씀을 들어보면 자동으로 그렇게 되도록 하고 싶으시다는
뜻같이 보입니다. 만일 modify가 가능한 데이타들이라면(즉, 새로 입력되는 데이
타가 기존의 데이타와 중복되는 것이 많다면) modify프로그램 루틴을 작성하시면
될것이고 그렇지 않다면 완전히 지워주는 프로그램을 작성하시면됩니다.
만일 전체 트리를 지우시려면 위의 방법을 수행하는 스크립트를 작성하시면
될것이고 만일 특정 서브트리 아래의 내용만 지워야 하는 일이 생긴다면
다음과 같이 합니다.
a) 자바로 작성할 경우 : JNDI api함수를 참고하여 엔트리를 지우는데 이때 또
주의할것이 Context클래스의 destroySubcontext()함수나 unbind()함수가 둘다
서브트리가 있는 intermediate context일경우에는 exception을 내게됩니다.
그러므로 프로그램적으로 해당서브트리가 있는지를 검색하고 있으면 말단leaf까지
가서 지우면서 트리를 거슬러 올라오는 프로그램을 작성하셔야 합니다.
b) C api로 작성할 경우: 찾아봐도 위와 마찬가지로 ldap_delete()함수가
서브트리까지 지워주는 옵션이 없군요.
c) PHP로 작성할 경우 : ^^; 마찬가지 입니다.
OpenLDAP v2대의 ldapdelete.c소스를 찾아서 -r 옵션에 어떻게 하는지 보시면
간단히 처리할수 있겠군요. 물론 그냥 만드셔도 되지만요. ^^;
그럼 즐거운 하루보내세요.
|