您好,登錄后才能下訂單哦!
radius計費系統向藍海計費系統數據遷移技術總結
本文僅供參考,在實際環境中測試成功。歡迎大家提出問題。
1. 首先要有一個清晰的思路和明確的目標。
本次計費遷移主要將老計費radius management系統的用戶,遷移到藍海計費系統。由于老計費系統和藍海計費有相似性、同時具有一定的差異性。所以要修正老計費系統數據格式符合藍海計費的要求(藍海計費已經提供了數據導入的標準格式)。這樣才能將老計費平安的導入藍海系統,順利進行計費系統遷移。
2. 準備工作
2-1首先要收集新老計費系統的數據格式和數據庫的相關權限。
2-2收集需要遷移的需求,本次遷移并不是將所有的用戶遷移到藍海系統。根據公司營長的需要按要求將數據導出老系統、再導入新系統。
2-3為了保證計費系統的安全性,需要將老系統的數據庫備份到測試環境進行測試。同時要做好數據庫的導出時間點。
2-4先做部分數據的產品導入。觀測導入效果后再研究后續的工作。
2-5由于數據導入藍海計費系統,在后期的運營中也要進行數據檢測。
2-6收集新舊系統的相關數據,本次主要收集數據的套餐信息、資費信息。
3風險
3-1本次數據遷移,如果失敗會導致所有遷移用戶不能正確使用網絡。藍海系統手動錄入的用戶不受影響。為了本次遷移的順利完成,通過和營帳進行商議。先將某一個很小的小區的10個用戶進行遷移,做好隨時恢復的準備,根據用戶反映做出有效處理。
3-2在數據遷移完成后的一段時間內,暫定1個月或者更長時間任何人不得刪除老計費的數據并保證老計費一直處于運行狀態。
3-3如果遷移失敗,會導致所有涉及遷移的用戶不能正常撥號。故必須做好計費恢復、割接事前通知、事中做好客服的安撫工作。
3-4遷移時間盡量選擇在用戶上網人數較少的時間段。
4時間
4-1本次遷移按照公司安排,在測試遷移成功的基礎上進行數據的一次性遷移。計劃耗時10個小時,盡可能將時間壓縮到最小。
5資源調度
5-1本次遷移需要技術部研發部相關人員參加、計費營帳資深管理員、網絡割接部門的同事、網管部門同事、客服同事做好通知和解釋工作,有效防止網絡中斷。
6.實施步驟:
6-1用putty通過ssh連接到老計費的linux系統上,
6-2用獲得的數據庫帳號執行數據庫備份操作,命令如下:
Mysqldump –h227.0.0.1 –uroot –pxxxx radius>radius_201512310800.sql;
6-3在搭建的測試數據庫環境執行如下數據庫還原操作。
Create database radius;
Mysql –h227.0.0.1 –uroot –p***** radius<radius_201512310800.sql;
6-4新建一個業務表格,將營帳給的最新資費套餐導入此表。Xls格式的導入不再詳述。
/*createtable srvname
(
idint primary key auto_increment,
srvidint(11),
srvnamevarchar(50)
)
SELECT* FROM srvname
altertable srvname add column srvname2 varchar(50)
altertable srvname add column srvid_old int(11)
xls數據導入到srvname表中
6-5將新舊業務套餐和資費進行轉換并生成臨時表
#測試將舊業務碼轉換為新業務碼
SELECT* FROM rm_services
SELECTid
FROM(SELECT * FROM srvname WHERE srvname NOT LIKE '%年%' ) AS t_srv_flage
WHERESUBSTRING(srvname,LOCATE('~',srvname)+1,1) IN ('1','z')
#設置flag,剔除年的業務代碼和008 3天 3月 6月的業務代碼
UPDATEsrvname SET flag=SUBSTRING(srvname,LOCATE('~',srvname)+1,1)
WHERE
idIN (
SELECTid
FROM(SELECT * FROM srvname WHERE srvname NOT LIKE '%年%' ) AS t_srv_flage
WHERESUBSTRING(srvname,LOCATE('~',srvname)+1,1) IN ('1','z'))
ALTERTABLE srvname ADD COLUMN flag CHAR(1)
SELECT* FROM srvname WHERE flag IS NOT NULL
6-6將新舊計費對接成功的數據寫入臨時表srvname_temp
CREATETEMPORARY TABLE srvname_temp
AS
SELECT
a.srvidAS srvid_new,a.srvname AS srvname_new,a.srvid_old AS srvname_abc,
b.srvidAS srvid_old,b.srvname AS srvname_old,
a.flag
FROMsrvname AS a
LEFTJOIN
rm_servicesAS b
ONa.srvname_old=b.srvname
WHEREa.flag IS NOT NULL
SELECT* FROM srvname_temp
6-7從測試環境的radius庫將數據按條件查詢出來并導出為csv格式的數據。編碼格式選擇GBk2312
#導入藍海計費的最終數據。
/*總結:
FIELDSTERMINATED BY ',' 字段間分割符
OPTIONALLYENCLOSED BY '"' 將字段包圍對數值型無效
LINESTERMINATED BY '\n' 換行符*/
/*1queries executed, 0 success, 1 errors, 0 warnings
查詢:select u. username, k.value AS 明文密碼,u.password as 密文密碼, u.srvid as old_srvid, t.srvid_newas new_srvid, t.srvid...
錯誤代碼: 1064
Youhave an error in your SQL syntax; check the manual that corresponds to yourMySQL server version for the right syntax to use near 'select * from radcheck
select* from rm_users
leftjoin rm_services as s
on'at line 22
執行耗時 : 0 sec
傳送時間 : 0 sec
總耗時 : 0.002 sec
grantfile on *.* to zwfayf@'%';
flushprivileges;
mysql服務器沒有d盤導致
*/
/*
Excel顯示數字時,如果數字大于12位,它會自動轉化為科學計數法;如果數字大于15位,它不僅用于科學技術費表示,還會只保留高15位,其他位都變0。
Excel打開csv文件時,只要字段值都是數字,它就認為該字段類型是數值。但我們存放在數據庫中的純數字char有可能會超過15位,這樣導出csv文件后,用excel打開看到的字段值就不對了。
網上的解決方法
1、將單元格格式設為文本,但行不通,還是會以科學計數法顯示
2、將單元格格式設為特殊,類型郵政編碼,這樣不會以科學計數法顯示,但是數字超過15位時低位還是會變0;
3、新建一個新工作表,用數據導入自文本文件功能,將csv導入到工作表中(分隔符逗號,每一列格式都設為文本),這樣可以正確顯示,但是每次導出新csv文件都要這么做比較麻煩,而且我們也不可能讓客戶去進行這個操作。
參考這篇文章 java導出csv用excel打開后數字不用科學計數法顯示
我在mysql導出csv文件時,設置字段值用制表符\t括起來(outfile 'e:\\test.csv'fields terminated by ',' optionally enclosed by '\t' lines terminated by '\r\n'),
這樣excel打開csv文件時,會將數值用文本格式顯示,而不是數值格式,因為我們的數值前后都有制表符\t,而不是單純的數字。
這樣打開導出的csv文件就可以正常顯示了。不建議這樣使用*/
SELECT
u.username AS '賬號',
k.valueAS '密碼',
IF(u.`firstname`!='',u.`firstname`,'測試')AS '姓名',
IF(u.`taxid`,u.`taxid`,'610000000000000000')AS '證件號碼', //處理×××號碼為空的字段
IF(u.mobile,u.mobile,'13000000000')AS '手機號碼', //處理手機號碼為空的字段
IF(u.`address`!='',u.`address`,'xxx')AS'聯系地址', //處理地址為空的字段
''AS '賬號余額',
u.`staticip`AS 'ip地址',
u.`createdon`AS '開始時間',
u.`expiration`AS '結束時間',
#if(SUBSTRING(u.`address`,1,2) IN ('小區或社區名稱'),'17','18') as '區域編號', //處理地址自動化分行政區域的字段,并自動按規范設置區域編號 17 18為區域編號,可以根據相關規范進行設定。
'陜西省xx市xx區' AS '區域名稱',
'1'AS '運營商編號',
'本地'AS '運營商名稱',
'5'AS '項目編號',
'BRAS'AS'項目名稱', //計費類型
t.srvid_newAS '產品編號',
t.srvname_newAS '產品名稱',
u.`createdby`AS '開戶人員',
''AS'用戶備注1',
''AS'地址池名稱',
REPLACE(u.`comment`,'\\','') AS '用戶備注',
''AS'發票號',
''AS'固話號碼',
''AS'操作人員',
''AS'用戶屬性'
#INTOOUTFILE 'e://lanhai.csv' //設置導出的文件名
#FIELDSTERMINATED BY ',' //設置導出數據以逗號分割字段
#OPTIONALLYENCLOSED BY '"' //設置字段以””進行包裹
#LINESTERMINATED BY '\n' //設置行結束符為換行符\n
FROMrm_users AS u
LEFTJOIN radcheck AS k
ONu.username=k.username
LEFTJOIN srvname_temp AS t
ONu.`srvid`=t.srvid_old
WHEREk.`value` <>1
ANDSUBSTRING(u.username,1,9)='029010000'
ANDu.`address` LIKE '文景%'
AND u.`expiration`>'2015-05-31'
6-8將導出的csv在藍海計費里面通過數據庫管理下的數據導入功能將數據導入。注意導入的過程中藍海計費的提示信息。如果發現錯誤,請認真進行分析。
6-9由于數據涉及到公司的機密,故再次就不一一附圖。
本文至此結束。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。