어드민 7월 5일, 2022에 포스트됨 공유하기 7월 5일, 2022에 포스트됨 Docwiki에 있는 "Using ELC reporting log data"를 번역한 글 (번역 업데이트: 2022년 7월 5일) << 위로 가기: ELC (AppWave Enterprise License Center) 관리하기 로그 데이터는 여러 도구들 안으로 가져오기(import)할 수 있다. XML을 사용하여 마이크로소프트 액세스(Access) 안으로 가져오기 CSV 형식을 사용하여 마이크로소프트 엑셀(Excel)과 액세스(Access) 안으로 가져오기 목차 XML을 사용하여 로그 데이터를 마이크로소프트 액세스(Access) 안으로 가져오기 CSV를 사용하여 로그 데이터를 마이크로소프트 엑셀(Excel)과 액세스(Access) 안으로 가져오기 마이크로소프트 액세스(Access) 안에서 쿼리(query) 생성하기 쿼리(query) 예문 데이터베이스 테이블(table) 설명 기타 참고 (See Also) XML을 사용하여 로그 데이터를 마이크로소프트 액세스(Access) 안으로 가져오기 로그 데이터를 마이크로소프트 액세스(Access) 안으로 가져오기는 마이크로소프트 오피스 액세스(Access) 2020과 그 이상에서 가능하다. 마이크로소프트 액세스(Access)를 시작하고 새 데이터베이스를 하나 만든다. ELC에서 제공한 export.xml 파일과 lm_reporting_access.xsd 파일을 가져오기(import)한다. 이 파일들은 관리자가 exportLogs 로그를 실행할 때 지정한 디렉토리 안에 들어있다. 만약 디렉토리를 명시하지 않았다면, 내보내진(exported) 데이터는 <ELC가 설치된 폴더>/export/export_<timestamp>/xml 디렉토리 안에 있다. 액세스(Access)에서 File|Get External Data|Import를 선택한다. Import 대화 창이 나타나면, 파일 유형으로 XML (*.xml, *.xsd)를 선택한다. 임포트할 파일로 lm_reporting_access.xsd 파일을 선택한다. 이 파일에는 해당 데이터베이스 스키마(schema)가 들어있다. Import 버튼을 클릭한다. Import XML 대화 창이 나타나면, OK를 클릭한다. 이제 로그 데이터베이스 스키마 가져오기(import)가 완료되었다. 액세스(Access)에서 choose File|Get External Data|Import를 선택한다 (실제 데이터를 가져오는 것이다). Import 대화 창이 나타나면, 파일 유형 드롭-다운 리스트에서 XML을 선택한다. 임포트할 파일로 export.xml을 지정한다. Import 대화 창에서, Options >>를 선택하고 라디오 버튼 중에서 Append Data to Existing Table(s)를 선택한다. OK를 클릭한다. 이제 export.xml에서 데이터를 가져와서 해당 데이터베이스 테이블 안에 넣기가 완료되었다. CSV를 사용하여 로그 데이터를 마이크로소프트 엑셀(Excel)과 액세스(Access) 안으로 가져오기 ELC의 exportLogs 명령에 –csv 옵션을 붙여서 실행한다. <ELC가 설치된 폴더>\bin 디렉토리에서 csvConvert 스크립트를 실행한다. 이 스크립트는 내보내기(export)를 통해서 가져온 CSV 파일(들)을 모두 가져와서 엑셀(Excel) 워크북(workbook) 하나에 넣는다. > csvConvert <csv_export_directory> 스크립트를 실행한 후 화면에 표시되는 내용은 다음과 같다: Embarcadero ExportLogs Conversion Utility v1.0 Importing files into workbook.............. Successfully created C:\export\export_2004-2-23_6-29\csv\embarcadero_reporting_logs.xls. Embarcadero_reporting_logs.xsl 파일이 만들어지고 나면, 마이크로소프트 엑셀(Excel)에서 이 파일을 연다. 엑셀 안에는 .csv 파일 하나 당 워크시트(worksheet)가 하나씩 생긴다는 점을 알아두자. 로그 데이터를 쿼리하고 리포트를 생성하려면, 이 워크시트(worksheet)들을 마이크로소프트 액세스(Access) 안으로 가져오기(import) 해야 한다. 마이크로소프트 액세스(Access)를 시작하고 새 데이터베이스를 하나 만든다. ELC에서 제공한 Embarcadero_reporting_logs.xsl 파일을 가져오기(import)한다. 이 파일들은 관리자가 csvConvert utility command를 실행할 때 지정한 디렉토리 안에 들어있다. 액세스(Access)에서 choose File|Get External Data|Import를 선택한다. Import 대화 창이 나타나면, 파일 유형 드롭-다운 리스트의 파일들 중에 Microsoft Excel을 선택한다. Import 버튼을 클릭한다. 그러면, Import Spreadsheet 마법사가 열린다. 이 마법사에서는 Embarcadero_reporting_logs 엑셀 워크북에 있는 워크시트를 갯수에 관계없이 가져오기(import)할 수 있다. 가져오기 할 워크시트를 하나 선택한다. 쿼리(query) 예문을 참고하라. 가져오기 해야할 테이블은 lm_product, lm_pool_type_lu, lm_pool_entry, lm_entry_instance이다. First Row Contains Column Headings 체크박스를 클릭하여 활성화 한다. Finish를 클릭한다. 이제 액세스 테이블 안으로 이 워크시트를 가져오기가 완료되었다. 테이블 이름은 워크시트의 이름과 동일하다. 마이크로소프트 액세스(Access) 안에서 쿼리(query) 생성하기 액세스의 Database 창에서, Queries 링크를 클릭한다. Design View에서 Create Query를 더블-클릭하여 새 쿼리를 하나 생성한다. 제시된 모든 테이블을 선택한다 (이 예에서는 원본 워크시트에서 가져오기 한 테이블 4개가 보인다). Add를 클릭한다. Query Designer 창 안에 있는 Design Pane에서 오른쪽-클릭을 하고 SQL View를 선택한다. 아래 구문을 복사하여 Query Designer 창의 SQL View 안에 붙여 넣는다. SELECT LM_POOL_ENTRY.LM_REQ_USERNAME, LM_POOL_ENTRY.LM_HOST_NAME, LM_PRODUCT.LM_PRODUCT_NAME, LM_PRODUCT.LM_SKU_NAME, LM_POOL_TYPE_LU.LM_POOL_TYPE_DESC, LM_ENTRY_INSTANCE.LM_START_TIME, LM_ENTRY_INSTANCE.LM_FINISH_TIME FROM LM_POOL_ENTRY, LM_ENTRY_INSTANCE, LM_PRODUCT, LM_POOL_TYPE_LU WHERE (((LM_ENTRY_INSTANCE.LM_START_TIME)<[시작 일자 입력 (예 2/20/2004) ]) AND ((LM_POOL_ENTRY.LM_REQUESTED_TYPE)=1) AND ((LM_POOL_ENTRY.LM_POOL_ENTRY_ID)=[LM_ENTRY_INSTANCE].[LM_POOL_ENTRY_ID]) AND ((LM_PRODUCT.LM_PRODUCT_ID)=[LM_POOL_ENTRY].[LM_PRODUCT_ID]) AND ((LM_PRODUCT.LM_SKU)=[LM_POOL_ENTRY].[LM_SKU_ID]) AND ((LM_POOL_TYPE_LU.LM_POOL_TYPE)=[LM_POOL_ENTRY].[LM_REQUESTED_TYPE])); 이 쿼리를 concurrent_usage라는 이름으로 저장한다. Database 창에서, 새로 만든 concurrent_usage 쿼리를 오른쪽-클릭하고 Export를 클릭한다. 파일 유형 드롭-다운 리스트에서 Excel을 선택하면 이 쿼리 결과를 엑셀 형식으로 내보내기를 할 수 있다. 그러면 엑셀에서 차트, 리포트, 피봇 테이블 등을 만들 수 있다. 또한 액세스의 Report Designer 또는 Report Wizard에서 concurrent_usage query 쿼리 (또는 다른 쿼리) 결과를 바로 리포트로 생성할 수도 있다. 쿼리(query) 예문 쿼리 SELECT LM_POOL_ENTRY.LM_REQ_USERNAME, LM_POOL_ENTRY.LM_HOST_NAME, LM_PRODUCT.LM_PRODUCT_NAME, LM_PRODUCT.LM_SKU_NAME, LM_POOL_TYPE_LU.LM_POOL_TYPE_DESC, LM_ENTRY_INSTANCE.LM_START_TIME, LM_ENTRY_INSTANCE.LM_FINISH_TIME FROM LM_POOL_ENTRY, LM_ENTRY_INSTANCE, LM_PRODUCT, LM_POOL_TYPE_LU WHERE (((LM_ENTRY_INSTANCE.LM_START_TIME)<[시작 일자 입력 (예 2/20/2004) ]) AND ((LM_POOL_ENTRY.LM_REQUESTED_TYPE)=1) AND ((LM_POOL_ENTRY.LM_POOL_ENTRY_ID)=[LM_ENTRY_INSTANCE].[LM_POOL_ENTRY_ID]) AND ((LM_PRODUCT.LM_PRODUCT_ID)=[LM_POOL_ENTRY].[LM_PRODUCT_ID]) AND ((LM_PRODUCT.LM_SKU)=[LM_POOL_ENTRY].[LM_SKU_ID]) AND ((LM_POOL_TYPE_LU.LM_POOL_TYPE)=[LM_POOL_ENTRY].[LM_REQUESTED_TYPE])); 설명: 이 쿼리는 마이크로소프트 액세스에서 사용할 수 있으며, 동시-접속(concurrent) 라이선스(참고 1) 중 2004년 2월 20일 (알고 싶은 날짜를 넣어라) 이전에 사용하기 시작한 것들을 모두 조회한다. 여기에는 라이선스를 사용한 사용자명, 호스트명, 사용한 제품, 라이선스 유형, 시작 시간, 완료 시간(라이선스를 반환한 시점) 등이 조회된다. 쿼리 (참고 2) SELECT LM_REQ_USERNAME, LM_PRODUCT.LM_PRODUCT_NAME, LM_PRODUCT.LM_SKU_NAME, LM_ENTRY_INSTANCE.LM_START_TIME FROM LM_POOL_ENTRY, LM_ENTRY_INSTANCE, LM_PRODUCT WHERE LM_REQUESTED_TYPE=2 AND LM_DONE IS NULL AND LM_PRODUCT.LM_PRODUCT_ID=LM_POOL_ENTRY.LM_PRODUCT_ID AND ((LM_PRODUCT.LM_SKU)=[LM_POOL_ENTRY].[LM_SKU_ID]) AND LM_POOL_ENTRY.LM_POOL_ENTRY_ID=LM_ENTRY_INSTANCE.LM_POOL_ENTRY_ID 설명: 이 쿼리는 기명 사용자 중 현재 라이선스를 사용하고 있는 모든 사용자를 조회한다. 쿼리 (참고 3) SELECT LM_REQ_USERNAME, LM_PRODUCT.LM_PRODUCT_NAME, LM_PRODUCT.LM_SKU_NAME, LM_ENTRY_INSTANCE.LM_START_TIME FROM LM_POOL_ENTRY, LM_ENTRY_INSTANCE, LM_PRODUCT WHERE LM_REQUESTED_TYPE=1 AND LM_DONE IS NULL AND LM_PRODUCT.LM_PRODUCT_ID=LM_POOL_ENTRY.LM_PRODUCT_ID AND ((LM_PRODUCT.LM_SKU)=[LM_POOL_ENTRY].[LM_SKU_ID]) AND LM_POOL_ENTRY.LM_POOL_ENTRY_ID=LM_ENTRY_INSTANCE.LM_POOL_ENTRY_ID 설명: 이 쿼리는 동시-접속(concurrent) 사용자 중 현재 라이선스를 사용하고 있는 모든 사용자를 조회한다. 쿼리 SELECT LM_POOL_ENTRY.LM_REQ_USERNAME, LM_POOL_ENTRY.LM_HOST_NAME, LM_PRODUCT.LM_PRODUCT_NAME, LM_PRODUCT.LM_SKU_NAME, LM_ENTRY_INSTANCE.LM_START_TIME, LM_ENTRY_INSTANCE.LM_FINISH_TIME, (DateDiff("n",[LM_START_TIME],[LM_FINISH_TIME]) / 60 ) AS "TIMEUSED IN HOURS" FROM LM_POOL_ENTRY, LM_ENTRY_INSTANCE, LM_PRODUCT WHERE LM_ENTRY_INSTANCE.LM_START_TIME>[시작일자 입력 (예 2/20/2004) ] AND LM_ENTRY_INSTANCE.LM_FINISH_TIME<[종료일자 입력 (예 2/20/2004) ] AND LM_PRODUCT.LM_PRODUCT_ID=LM_POOL_ENTRY.LM_PRODUCT_ID AND ((LM_PRODUCT.LM_SKU)=[LM_POOL_ENTRY].[LM_SKU_ID]) AND LM_POOL_ENTRY.LM_POOL_ENTRY_ID=LM_ENTRY_INSTANCE.LM_POOL_ENTRY_ID 설명: 이 쿼리는 사용자와 제품을 요약하여 시작 시간, 종료 시간, 사용한 시간을 합쳐서 조회한다. 쿼리 SELECT LM_POOL_ENTRY.LM_REQ_USERNAME, LM_POOL_ENTRY.LM_HOST_NAME, LM_PRODUCT.LM_PRODUCT_NAME, LM_PRODUCT.LM_SKU_NAME, LM_ENTRY_INSTANCE.LM_START_TIME, LM_ENTRY_INSTANCE.LM_FINISH_TIME, HoursAndMinutes([LM_FINISH_TIME]-[LM_START_TIME]) AS ["TIMEUSED IN HOURS:MINUTES"] FROM LM_POOL_ENTRY, LM_ENTRY_INSTANCE, LM_PRODUCT WHERE LM_ENTRY_INSTANCE.LM_START_TIME>[시작일자 입력 (ie 2/20/2004) ] AND LM_ENTRY_INSTANCE.LM_FINISH_TIME<[종료일자 입력 (ie 2/20/2004) ] AND LM_PRODUCT.LM_PRODUCT_ID=[LM_POOL_ENTRY].[LM_PRODUCT_ID] AND ((LM_PRODUCT.LM_SKU)=[LM_POOL_ENTRY].[LM_SKU_ID]) AND LM_POOL_ENTRY.LM_POOL_ENTRY_ID=[LM_ENTRY_INSTANCE].[LM_POOL_ENTRY_ID]; 설명: 이 쿼리는 앞의 쿼리와 동일한데, 다만 HoursAndMinutes 함수를 사용한다는 점만 다르다. 이 함수는 아래 웹페이지에 있는 안내를 따라 생성할 수 있다. http://office.microsoft.com/assistance/preview.aspx?AssetID=HA011102181033&CTT=1&Origin=EC010227041033&QueryID=YIx4rFgBb0 위 아티클에서 설명하는 HoursAndMinutes 함수를 생성한 후에는, 시작 시간과 종료 시간 사이의 차이를 "시:분" 형식으로 명시할 수 있다. (참고 1) LM_REQUESTED_TYPE=1 은 동시-접속(concurrent) 유형을 의미하고, LM_REQUESTED_TYPE=2는 네트워크 기명 (network named) 사용자를 의미한다. (참고 2) MS 액세스에 있는 xml 가져오기 기능 상, 정수 값에 null이 있으면 올바로 가져오지 못한다. 우회 해결책: Access에서 XML Import를 사용할 때에는 LM_DONE IS NULL 표현을 LM_DONE = ""로 바꾼다. (참고 3) MS 액세스에 있는 xml 가져오기 기능 상, 정수 값에 null이 있으면 올바로 가져오지 못한다. 우회 해결책: Access에서 XML Import를 사용할 때에는 LM_DONE IS NULL 표현을 LM_DONE = ""로 바꾼다. 데이터베이스 테이블(table) 설명 데이터베이스 안에 있는 테이블(table)의 이름과 각 테이블에 담긴 데이터에 대한 설명은 아래 표와 같다. 테이블(table) 이름 설명 lm_denial_entry 라이선스 접속 요청 당시 사용할 수 있는 라이선스가 모두 사용 중이어서 거부된 시도. lm_entry_instance 라이선스가 언제부터 언제까지 사용되었는 지를 추적 기록한 시간(timestamp) 정보. lm_license 현재 사용 가능한 라이선스에 대한 정보. lm_license_pool 동시-접속과 기명 라이선스 풀(pool)에 대한 정보. lm_permission 동시-접속과 기명 라이선스 사용자의 권한(permission) lm_pool_entry 사용 데이터 (즉 사용자, 호스트, 제품 등)를 추적한 기록이며, 시간(timestamp) 데이터와 연결됨. lm_pool_type_lu 라이선스 풀(pool) 유형에 대한 설명. lm_product 사용 가능한 라이선스에 연관된 제품 정보. lm_timestamp 현재 시간(timestamp) lm_user 사용자 정보, userlist.txt 파일과 userlist-concurrent.txt 파일 안에 들어있는 사용자에 대한 정보만 해당됨. 기타 참고 (See Also) ELC (AppWave Enterprise License Center) 시작하기 ELC (AppWave Enterprise License Center) 명령 사용하기 네트워크 기명 사용자(named user) 라이선스를 사용하는 최종 사용자의 컴퓨터(클라이언트)에서 설정하기 네트워크 동시-접속(concurrent) 라이선스를 사용하는 최종 사용자의 컴퓨터(클라이언트)에서 설정하기 로그 해석하기 서버 문제 해결 클라이언트 문제 해결 사용 이력 리포트 로그 생성하기 질문과 답변 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.