CDR系统的改进.doc

上传人:新** 文档编号:559614990 上传时间:2023-10-21 格式:DOC 页数:33 大小:98.50KB
返回 下载 相关 举报
CDR系统的改进.doc_第1页
第1页 / 共33页
CDR系统的改进.doc_第2页
第2页 / 共33页
CDR系统的改进.doc_第3页
第3页 / 共33页
CDR系统的改进.doc_第4页
第4页 / 共33页
CDR系统的改进.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《CDR系统的改进.doc》由会员分享,可在线阅读,更多相关《CDR系统的改进.doc(33页珍藏版)》请在金锄头文库上搜索。

1、CDR系统的改进 市话的WLL CDR(Call Detail Recorder)是一个基于窗口的程序,它用于轮询WLL/V5WLL节点以收集所有CDR记录。每个相连WLL/V5WLL节点实时收集CDR信息。每完成四个或八个呼叫(依赖于WLL/V5WLL接的设置),WLL/V5WLL就向运行WLL CDR软件的计算机发送最近的CDR,计算机负责存储和整理CDR记录,CDR记录有两种存储方式:文本文件、MDB数据库。其中文本文件用于存档,作为辅助计费资料,MDB数据库被用于网管系统从中提取话务数据。MDB数据库有个缺点,就是稳定性差,特别是文件大小超过1GB,会使CDR系统退出运行,丢失大量话务

2、数据。 针对以上问题,采取标本兼治的方针,从标、本两个方面进行改进,提高其稳定性。一、治标:系统在退出后,WLL/V5WLL节点能保留一定数量的呼叫信息,在系统恢复后自动发送保存的信息,只要确保系统退出后在一定的时间内能够再次启动,就不会影响正常的呼叫信息收集。 因此,可以设计一个程序,能监视CDR程序的运行,一旦监测到CDR程序退出,就会自动重新启动CDR程序,保证CDR的不间断运行。 按照这个思路,我用WSH编了个程序,达到了目的。程序的框图如下:初始化检查CDR进程是否存在是否重新启动记录本次事件 首先,对程序初始化,设定记录文件的名称,需要监控的程序名称以及程序所在目录,并并检查记录文

3、件是否存在,若存在,则以追加方式打开文件,否则新建记录文件;接着进入程序主体运行,这是一个死循环的过程,程序检测CDR程序是否存在,若不存在,则重新启动,并在文件中记录这次事件发生的时间,重新返回执行再次检测,若存在,则休眠一段时间并返回,进行下一轮循环。二、治本 以上的方法只是解决了程序的不间断运行的问题,但是由于mdb数据库增大而影响系统的稳定造成的话务数据丢失的根本问题仍未得到圆满解决。 既然数据库的稳定性是根本原因,那么只要提高数据库的稳定性,就能从根本上解决问题,Oracle是一种大型的数据库管理系统,支持海量的数据存储,并具有很强的稳定性。如果CDR系统使用Oracle,那系统会很

4、稳定的。关键问题是CDR系统是否有支持Oracle的数据库接口,CDR的最新版本同时能支持两种数据库连接。 首先,在一台服务器上建立数据库,采用Oracle9i,为典型安装,建立的数据库使用缺省配置,SID是netmandb。数据库安装完成后,建立所需的用户,需要建立三个用户,CDR、PGTCDR、DWRTCDR。建立表空间,CDR系统的通话记录有三部分:域内通话(使用CDR_REC表)、域间通话(使用PGTCDR_REC表)及数据通信记录(使用DWRTCDR_REC表),出于灵活性及稳定性考虑,三部分应分别使用独立的表空间,但我市的PAS系统还没有城市之间的漫游功能,不存在域间通话记录,另外

5、数据业务还没有对外开通,也没有数据通信记录,所以,这两部分记录使用的表可以使用USER表空间,仅建立用于保存域内通话记录的表空间。为加快数据的查询速度,对域内通话记录表建立了索引。确定表空间的大小,目前无法确定每天的通话记录数量,也就没办法估计所需表空间的大小,于是,先建立一个512M的表空间文件,待系统运行起来以后,根据实际情况再进行动态调整。具体方法:1、建立CDR_REC用的表空间CDR:SQLPLUSCREATE TABLESPACE CDR LOGGING DATAFILE F:ORACLEORADATANETMANDBCDR01.dbf SIZE 512M EXTENT MANAG

6、EMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO2、建立索引CDR_REC_INDEX用的表空间CDR_INDEX:SQLPLUSCREATE TABLESPACE CDR_INDEX LOGGING DATAFILE F:ORACLEORADATANETMANDBCDR_INDEX01.dbf SIZE 256M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO3、建立CDR用户,分配使用CDR表空间,分配权限:SQLPLUSDrop USER CDR cascade;SQLPLUSCREATE US

7、ER CDR PROFILE DEFAULT IDENTIFIED BY UTSTARCOM DEFAULT TABLESPACE CDR TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK;SQLPLUSGRANT ALTER ANY SNAPSHOT TO CDR;SQLPLUSGRANT ALTER SESSION TO CDR;SQLPLUSGRANT CREATE ANY SNAPSHOT TO CDR;SQLPLUSGRANT CREATE CLUSTER TO CDR;SQLPLUSGRANT CREATE DATABASE LINK TO CDR;

8、SQLPLUSGRANT CREATE PROCEDURE TO CDR;SQLPLUSGRANT CREATE SEQUENCE TO CDR;SQLPLUSGRANT CREATE SESSION TO CDR;SQLPLUSGRANT CREATE SYNONYM TO CDR;SQLPLUSGRANT CREATE TABLE TO CDR;SQLPLUSGRANT CREATE TRIGGER TO CDR;SQLPLUSGRANT CREATE TYPE TO CDR;SQLPLUSGRANT CREATE VIEW TO CDR;SQLPLUSGRANT UNLIMITED TA

9、BLESPACE TO CDR;4、建立PGTCDR、DWRTCDR用户分配使用USERS表空间,分配权限。5、以CDR用户登陆到数据库,建立表及索引:SQLPLUS DROP TABLE cdr_rec;SQLPLUSCREATE TABLE cdr_rec TABLESPACE CDR (callingnum VARCHAR2(15),callednum VARCHAR2(15),setuptime DATE NOT NULL,connecttime DATE NOT NULL,answertime DATE,disconnecttime DATE NOT NULL,remoteonhoo

10、ktime DATE,duration INTEGER,hostrt VARCHAR2(12),visitedrt VARCHAR2(12),rpc INTEGER,rpno INTEGER,calltype INTEGER);SQLPLUSDROP TABLE rec_count;SQLPLUSCREATE TABLE rec_count(totalrecords INTEGER default 0);SQLPLUSCREATE INDEX CDR.CDR_REC_INDEX ON CDR.CDR_REC (SETUPTIME, CALLEDNUM, CALLINGNUM) TABLESPA

11、CE CDR_INDEX;6、建立PGTCDR、DWRTCDR所用的表。接着,在CDR系统上安装Oracle的客户连接,并将UT提供的Oracle_ora.reg文件导入注册表,这样CDR系统就能使用Oracle数据库了。通过以上的调整,增强了CDR系统的稳定性,但是通过CDR系统进行的话务数据采集的重要功能却没有了,原因是UT提供的进行话务采集模块仅支持从mdb数据库的采集,还不支持Oracle。有什么办法解决呢?话务采集的原理是定时收集CDR数据库中的记录并进行计算,将结果导入到网管数据库中。根据原理,结合对数据库、网管的深入研究,我用WSH开发出了一个类似的工具来实现话务采集,相对于原有

12、的工具,注重了可靠性,增加了障碍恢复功能,能够在系统恢复后,自动重新完成系统停顿期间未进行的数据采集,具有Log文件检查功能,在Log文件超过100K后,将文件存档,建立新的Log文件,同时保留必要的信息。程序的流程如图:逐个节点采集数据将结果结合SQL语句暂时保存在数组中判断执行时间是否超时否一次数据采集过程检查log文件,读取上次采集的时间段,确定本次采集的次数根据采集次数循环执行采集初始化结束是本次采集开始本次采集结束确定节点数将结果一次性写入网管数据库同时为了保证CDR系统的持续使用,开发了程序定时清除CDR数据库中过期的数据,代码见附录。将以上的两个程序加入到计划任务中,其中采集程序

13、是每小时执行一次,清除程序是每天夜里执行一次。通过以上两种标本兼治的办法,大大提高了CDR系统的稳定新性,以往每过一段时间,系统就会退出,开始频繁出错,丢失大量的数据,现在这种情况很少发生,并且由于网管系统故障而引起的话务数据丢失的问题也没有出现过。附录:CDR程序监视程序logfile=.cdr.txt 设定log文件名psname=WLLCDR.EXEpspath=d:monset WshShell = WScript.CreateObject(WScript.Shell)Set fs = CreateObject(Scripting.FileSystemObject)建立对象if fs.

14、FileExists(logfile)=True then 建立log文件set flog = fs.OpenTextFile(logfile, 8) 若log文件存在,则已追加方式打开,否则创建新文件else Set flog = fs.createTextFile(logfile)flog.writeline psname+ monitor writen by sungw end if flog.writeline I am working now:+cstr(Date)+ +cstr(Time)While TrueSet oExec = WshShell.Exec(C:Program FilesSupport Toolstlist.exe -p +psname)WScript.Sleep 500Do While oExec.Status 1 WScript.Sleep 500 msgbox 1Loopinput=Do While True If Not oExec.StdOut.AtEndOfStream Then input = input & oExec.StdOut.Read(1) Else WScript.Sleep 100 exit do End If Loop

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号