摘要:一介紹是宜信公司團(tuán)隊(duì)開(kāi)發(fā)的一款數(shù)據(jù)庫(kù)審核產(chǎn)品,可幫助開(kāi)發(fā)人員快速發(fā)現(xiàn)數(shù)據(jù)庫(kù)質(zhì)量問(wèn)題,提升工作效率。此平臺(tái)可實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行多維度對(duì)象結(jié)構(gòu)文本執(zhí)行計(jì)劃及執(zhí)行特征的審核,用以評(píng)估對(duì)象結(jié)構(gòu)設(shè)計(jì)質(zhì)量及運(yùn)行效率。執(zhí)行計(jì)劃指數(shù)據(jù)庫(kù)中的執(zhí)行計(jì)劃。
一、介紹
Themis是宜信公司DBA團(tuán)隊(duì)開(kāi)發(fā)的一款數(shù)據(jù)庫(kù)審核產(chǎn)品,可幫助DBA、開(kāi)發(fā)人員快速發(fā)現(xiàn)數(shù)據(jù)庫(kù)質(zhì)量問(wèn)題,提升工作效率。其名稱(chēng)源自希臘神話中的正義與法律女神。項(xiàng)目取此名稱(chēng),寓意此平臺(tái)對(duì)數(shù)據(jù)庫(kù)質(zhì)量公平判斷,明察秋毫。
此平臺(tái)可實(shí)現(xiàn)對(duì)Oracle、MySQL數(shù)據(jù)庫(kù)進(jìn)行多維度(對(duì)象結(jié)構(gòu)、SQL文本、執(zhí)行計(jì)劃及執(zhí)行特征)的審核,用以評(píng)估對(duì)象結(jié)構(gòu)設(shè)計(jì)質(zhì)量及SQL運(yùn)行效率??蓭椭鶧BA及開(kāi)發(fā)人員,快速發(fā)現(xiàn)定位問(wèn)題;并提供部分輔助診斷能力,提升優(yōu)化工作效率。全部操作均可通過(guò)WEB界面進(jìn)行,簡(jiǎn)單便捷。此外,為了更好滿(mǎn)足個(gè)性化需求,平臺(tái)還提供了擴(kuò)展能力,用戶(hù)可根據(jù)需要自行擴(kuò)展。
開(kāi)源地址: https://github.com/CreditEaseDBA
1.1 功能概述事后審核,自主優(yōu)化部分放在二期實(shí)現(xiàn)。亦可在項(xiàng)目設(shè)計(jì)階段引入,起到一部分事前審核的作用。
通過(guò)WEB界面完成全部工作,主要使用者是DBA和有一定數(shù)據(jù)庫(kù)基礎(chǔ)的研發(fā)人員。
可針對(duì)某個(gè)用戶(hù)審核,可審核包括數(shù)據(jù)結(jié)構(gòu)、SQL文本、SQL執(zhí)行特征、SQL執(zhí)行計(jì)劃等多個(gè)維度。
審核結(jié)果通過(guò)WEB頁(yè)面或?qū)С鑫募男问教峁?/p>
平臺(tái)支持主流的Oracle、MySQL數(shù)據(jù)庫(kù),其他數(shù)據(jù)庫(kù)放在二期實(shí)現(xiàn)。
盡量提供靈活定制的能力,便于日后擴(kuò)展功能。
1.2 支持的數(shù)據(jù)庫(kù)MySQL(5.6及以上)
Oracle(10g及以上)
1.3 審核維度數(shù)據(jù)庫(kù)結(jié)果(對(duì)象)=》指數(shù)據(jù)庫(kù)對(duì)象,常見(jiàn)的表、分區(qū)、索引、視圖、觸發(fā)器等。
SQL文本(語(yǔ)句)=》指SQL語(yǔ)句文本本身。
SQL執(zhí)行計(jì)劃=》指數(shù)據(jù)庫(kù)中SQL的執(zhí)行計(jì)劃。
SQL執(zhí)行特征=》指語(yǔ)句在數(shù)據(jù)庫(kù)上的真實(shí)執(zhí)行情況。
1.4 實(shí)現(xiàn)原理整個(gè)平臺(tái)的基本實(shí)現(xiàn)原理很簡(jiǎn)單,就是將我們的審核對(duì)象(目前支持四種),通過(guò)規(guī)則集進(jìn)行篩選。符合規(guī)則的審核對(duì)象,都是疑似有問(wèn)題的。平臺(tái)會(huì)將這些問(wèn)題及關(guān)聯(lián)信息提供出來(lái),供人工甄別使用。由此可見(jiàn),平臺(tái)的功能強(qiáng)大與否,主要取決于規(guī)則集的豐富程度。平臺(tái)也提供了部分?jǐn)U展能力,方便擴(kuò)展規(guī)則集。
1.5 平臺(tái)架構(gòu)圖中的方框部分,為平臺(tái)的主要模塊。底色不同的模塊,表示當(dāng)前的進(jìn)度狀態(tài)不同。虛線代表數(shù)據(jù)流,實(shí)線代表控制流。其核心為這幾個(gè)模塊:
數(shù)據(jù)采集模塊。它是負(fù)責(zé)從數(shù)據(jù)源抓取審核需要的基礎(chǔ)數(shù)據(jù)。目前支持從Oracle、MySQL抓取。
OBJ/SQL存儲(chǔ)庫(kù)。這是系統(tǒng)的共同存儲(chǔ)部分,采集的數(shù)據(jù)和處理過(guò)程中的中間數(shù)據(jù)、結(jié)果數(shù)據(jù)都保存在這里。其核心數(shù)據(jù)分為對(duì)象類(lèi)和SQL類(lèi)。物理是采用的MongoDB。
核心管理模塊。圖中右側(cè)虛線部分包含的兩個(gè)模塊:SQL管理和OBJ管理就是這部分。它主要是完成對(duì)象的全生命周期管理。目前只做了簡(jiǎn)單的對(duì)象過(guò)濾功能,因此還是白色底色,核心的功能尚未完成。
審核規(guī)則和審核引擎模塊。這部分是平臺(tái)一期的核心組件。審核規(guī)則模塊是完成規(guī)則的定義、配置工作。審核引擎模塊是完成具體規(guī)則的審核執(zhí)行部分。
優(yōu)化規(guī)則和優(yōu)化引擎模塊。這部分是平臺(tái)二期的核心組件。目前尚未開(kāi)發(fā),因此為白色底色。
系統(tǒng)管理模塊。這部分是完成平臺(tái)基礎(chǔ)功能,例如任務(wù)調(diào)度、空間管理、審核報(bào)告生成、導(dǎo)出等功能。
1.6 操作流程 二、環(huán)境搭建本項(xiàng)目中會(huì)使用到mysql,mongo和redis,python支持2.6、2.7,暫不支持python3。
mysql用來(lái)存儲(chǔ)pt-query-digest抓取的mysql的慢查詢(xún),mongo存儲(chǔ)我們的規(guī)則、oracle的采集結(jié)果、執(zhí)行job,解析結(jié)果集等,redis作為任務(wù)調(diào)度celery的隊(duì)列。
在mysql的數(shù)據(jù)采集部分我們使用的是pt-query-digest工具。
2.1 依賴(lài)安裝 新建用戶(hù)為了減少后面對(duì)supervisord.conf配置文件的修改,我們建議使用統(tǒng)一的用戶(hù)進(jìn)行安裝
adduser themis-test su - themis-test
后面的操作除了virtualenv安裝需要切換到root用戶(hù),其他的都默認(rèn)在themis-test用戶(hù)下安裝
安裝cx_Oracle依賴(lài)由于在審核過(guò)程中需要連接oracle數(shù)據(jù)庫(kù),因此需要先安裝cx_Oracle的依賴(lài),參考:http://www.jianshu.com/p/pKz5K7
安裝python依賴(lài)首先安裝virtualenv,參考鏈接:https://pypi.python.org/simpl...,建議安裝13.0.3或更新版本
如果聯(lián)網(wǎng)不方便,或者在公司內(nèi)網(wǎng),可以從https://pan.baidu.com/s/1o7AI...,提取碼:3sy3
壓縮包里包括所有需要用到的依賴(lài)包
安裝virtualenvtar -zxvf virtualenv-13.0.3.tar.gz cd virtualenv-13.1.0 python setup.py install
關(guān)于virtualenv的使用請(qǐng)參考:https://virtualenv.pypa.io/en...
安裝其他依賴(lài)首先初始化虛擬環(huán)境
virtualenv python-project --python=python2.7 source /home/themis-test/python-project/bin/activate
解釋一下上面的命令:virtualenv的第二個(gè)參數(shù)python-project是我們建立的虛擬環(huán)境的名稱(chēng),這個(gè)名稱(chēng)我們雖然可以隨便定義,但是后面supervisor的配置中使用了此名稱(chēng),建議使用默認(rèn)的,大家如果對(duì)python比較熟悉,可以隨意定義。后面我們指定了python的版本,--python可以不加,默認(rèn)會(huì)使用系統(tǒng)自帶的python版本構(gòu)建虛擬環(huán)境,當(dāng)有多個(gè)版本的python時(shí),可以使用此命令指定版本。
下面使用source初始化虛擬環(huán)境,以后安裝的包依賴(lài)等都會(huì)被裝到/home/themis-test/python-project/home/themis-test/python2.7/lib/python2.7/site-packages這里。
如果可以聯(lián)網(wǎng),進(jìn)入源代碼目錄使用如下命令
pip install -r requirement.txt
多帶帶安裝Pyh,下載地址:https://github.com/hanxiaomax...
unzip pyh-master.zip cd pyh-master python setup.py install
如果在局域網(wǎng)環(huán)境不方便聯(lián)網(wǎng)請(qǐng)利用的上面網(wǎng)盤(pán)里提供的壓縮包
pip install --no-index -f file:///home/themis-test/software -r requirement.txt
file:///home/themis-test/software是壓縮包解壓的位置
2.2 配置文件介紹下面以配置文件settings.py為例子說(shuō)明需要的一些依賴(lài)
# # set oracle ipaddress, port, sid, account, password # ipaddres : port -> key ORACLE_ACCOUNT = { # oracle "127.0.0.1:1521": ["cedb", "system", "password"] } # set mysql ipaddress, port, account, password MYSQL_ACCOUNT = { "127.0.0.1:3307": ["mysql", "user", "password"] } # pt-query save data for mysql account, password PT_QUERY_USER = "user" PT_QUERY_PORT = 3306 PT_QUERY_SERVER = "127.0.0.1" PT_QUERY_PASSWD = "password" PT_QUERY_DB = "slow_query_log" # celery setting REDIS_BROKER = "redis://:[email protected]:6379/0" # REDIS_BROKER = "redis://:@127.0.0.1:6379/0" REDIS_BACKEND = "redis://:[email protected]:6379/0" # REDIS_BACKEND = "redis://:@127.0.0.1:6379/0" CELERY_CONF = { "CELERYD_POOL_RESTARTS": True } # mongo server settings MONGO_SERVER = "127.0.0.1" MONGO_PORT = 27017 # MONGO_USER = "sqlreview" MONGO_USER = "sqlreview" # MONGO_PASSWORD = "" MONGO_PASSWORD = "sqlreview" MONGO_DB = "sqlreview" # server port setting SERVER_PORT = 7000 # capture time setting CAPTURE_OBJ_HOUR = "18" CAPTURE_OBJ_MINUTE = 15 CAPTURE_OTHER_HOUR = "18" CAPTURE_OTHER_MINUTE = 30
ORACLE_ACCOUNT和MYSQL_ACCOUNT是我們需要審核的目標(biāo)機(jī)器的帳號(hào)和密碼,主要是在數(shù)據(jù)采集部分和對(duì)象類(lèi)審核以及mysql的執(zhí)行計(jì)劃類(lèi)審核部分會(huì)用到,因此該帳號(hào)應(yīng)該具有較高的權(quán)限,為了安全在生產(chǎn)環(huán)境應(yīng)該設(shè)置專(zhuān)有的帳號(hào)并設(shè)置專(zhuān)有的權(quán)限,或者加上一些ip的限制等。
PT_QUERY_USER、PT_QUERY_PORT、PT_QUERY_SERVER、PT_QUERY_PASSWD、PT_QUERY_DB是我們pt-query-digest工具解析目標(biāo)機(jī)器的慢sql后需要存儲(chǔ)到的mysql數(shù)據(jù)庫(kù)的一些配置。
REDIS_BROKER、REDIS_BACKEND、CELERY_CONF是任務(wù)調(diào)度工具celery的配置選項(xiàng)。
MONGO_SERVER、MONGO_PORT、MONGO_USER、MONGO_PASSWORD、MONGO_DB是需要存儲(chǔ)結(jié)果集的mongo的配置選項(xiàng)。
SERVER_PORT是web管理端監(jiān)聽(tīng)的端口,不要使用9000和5555端口,這兩個(gè)被分配給了文件下載服務(wù)器和flower管理工具。
CAPTURE_OBJ_HOUR、CAPTURE_OBJ_MINUTE、CAPTURE_OTHER_HOUR、CAPTURE_OTHER_MINUTE是針對(duì)oracle的數(shù)據(jù)采集模塊需要設(shè)置的采集時(shí)間,根據(jù)自己的實(shí)際情況設(shè)置不同的時(shí)間即可,避開(kāi)業(yè)務(wù)高峰期。
請(qǐng)按照相關(guān)說(shuō)明配置該文件
2.3 規(guī)則導(dǎo)入進(jìn)入源代碼目錄,使用如下命令進(jìn)行規(guī)則初始化
mongoimport -h 127.0.0.1 --port 27017 -u sqlreview -p password -d sqlreview -c rule --file script/rule.json三、數(shù)據(jù)采集
數(shù)據(jù)采集分為oracle部分和mysql部分,oracle部分使用的是自己開(kāi)發(fā)的一些腳本,mysql使用的是pt-query-digest工具。
數(shù)據(jù)采集的頻率默認(rèn)是一天一次,可以根據(jù)自己的需要進(jìn)行修改。
oracle部分依賴(lài)于celery的任務(wù)調(diào)度,會(huì)用supervisor托管,pt-query-digest可以加到crontab里。
3.1 oracle部分 手動(dòng)數(shù)據(jù)采集手動(dòng)采集oracle obj信息
配置data/capture_obj.json文件
{ "module": "capture", "type": "OBJ", "db_type": "O", "db_server": "127.0.0.1", "db_port": 1521, "capture_date": "2017-02-28" }
只需要配置db_server和dbport選項(xiàng),oracle的端口要求是1521,capture_date指定采集數(shù)據(jù)的日期,現(xiàn)在只支持按天采集。
執(zhí)行命令
python command.py -m capture_obj -c data/capture_obj.json
手動(dòng)采集oracle other信息,包括plan、stat、text信息。
配置data/capture_other.json文件。
{ "module": "capture", "type": "OTHER", "db_type": "O", "db_server": "127.0.0.1", "db_port": 1521, "capture_date": "2017-02-28" }
配置方式同上面的obj
執(zhí)行命令
python command.py -m capture_obj -c data/capture_obj.json
手動(dòng)采集數(shù)據(jù)一般用于初次采集,后面一般都會(huì)通過(guò)自動(dòng)采集完成。
自動(dòng)數(shù)據(jù)采集配置settings.py文件里的ORACLE_ACCOUNT,該賬號(hào)需要具有查詢(xún)所有表的權(quán)限,即select any table。
ORACLE_ACCOUNT = { # oracle "127.0.0.1:1521": ["cedb", "system", "password"] }
配置調(diào)度時(shí)間
# capture time setting CAPTURE_OBJ_HOUR = "18" CAPTURE_OBJ_MINUTE = 15 CAPTURE_OTHER_HOUR = "18" CAPTURE_OTHER_MINUTE = 30
如果不對(duì)oracle數(shù)據(jù)庫(kù)審核,可以不用配置。
3.2 mysql部分 pt-query-digest使用可以將慢日志集中到一個(gè)地方,再集中入庫(kù)。
也可以在每臺(tái)mysql機(jī)器上安裝pt-query-digest,再將解析結(jié)果推送到存儲(chǔ)機(jī)器上。
本平臺(tái)采用第二種方案
從 https://www.percona.com/get/p... 下載并安裝pt-query-digest,如果缺少依賴(lài)使用yum安裝。
使用scirpt/pt_query_digest.sql初始化表結(jié)構(gòu),不要使用默認(rèn)的表結(jié)構(gòu)。
在目標(biāo)機(jī)器上配置好script/pt-query-digest.sh腳本:
pt-query-digest --user=root --password=password --review h=127.0.0.1,D=slow_query_log,t=global_query_review --history h=127.0.0.1,D=slow_query_log,t=global_query_review_history --no-report --limit=0% --filter=" $event->{Bytes} = length($event->{arg}) and $event->{hostname}="127.0.0.1:3306" and $event->{client}=$event->{ip}" slow.log
$event->{hostname}="127.0.0.1:3306" 為被搜集慢日志的機(jī)器的ip地址和端口號(hào)。
主要是配置存儲(chǔ)解析結(jié)果的mysql機(jī)器的帳號(hào),密碼,機(jī)器ip,端口號(hào),以及慢日志的位置等。
運(yùn)行pt-query-digest.sh腳本開(kāi)始搜集mysql慢查詢(xún)數(shù)據(jù),后面可以將其加入定時(shí)任務(wù),按固定時(shí)間段搜集。
四、任務(wù)導(dǎo)出 4.1 手動(dòng)任務(wù)導(dǎo)出配置data/export.json文件
{ "module": "export", "type": "export", "task_uuid": "08d03ec6-f80a-11e6-adbc-005056a30561", "file_id": "08d03ec6-f80a-11e6-adbc-005056a30561" }
配置task_uuid和file_id選項(xiàng),這是任務(wù)的唯一標(biāo)志,可以通過(guò)從mongo中sqlreview庫(kù)中job集合查看,然后運(yùn)行:
python command.py -m export -c data/export.json
進(jìn)行手動(dòng)任務(wù)導(dǎo)出,會(huì)生成離線的html壓縮包,保存在task_export/downloads下,可以直接解壓,然后通過(guò)瀏覽器打開(kāi)查看報(bào)告。
4.2 自動(dòng)任務(wù)導(dǎo)出通過(guò)在celery配合supervisor托管來(lái)實(shí)現(xiàn),具體可參考supervisor的配置。
五、web管理端 5.1 手動(dòng)開(kāi)啟web管理端執(zhí)行如下命令
python command.py -m web -c data/web.json
訪問(wèn) http://127.0.0.1:7000 即可打開(kāi)管理端
六、supervisor配置 6.1 supervisor配置;web管理端開(kāi)啟 [program:themis-web] command=/home/themis-test/python-project/bin/python command.py -m web -c data/web.json autostart=true redirect_stderr=true stdout_logfile=tmp/themis_web.log loglevel=info ;開(kāi)啟文件下載服務(wù)器 [program:themis-download] command=/home/themis-test/python-project/bin/python task_export/file_download.py autostart=true redirect_stderr=true stdout_logfile=tmp/themis_download.log loglevel=info ;開(kāi)啟任務(wù)導(dǎo)出模塊 [program:themis-export] command=/home/themis-test/python-project/bin/celery -A task_exports worker -E -l info autostart=true redirect_stderr=true stdout_logfile=tmp/themis_export.log loglevel=info ;開(kāi)啟規(guī)則解析模塊 [program:themis-analysis] command=/home/themis-test/python-project/bin/celery -A task_other worker -E -Q sqlreview_analysis -l info autostart=true redirect_stderr=true stdout_logfile=tmp/themis_analysis.log loglevel=info ;開(kāi)啟obj信息抓取模塊 [program:themis-capture-obj] command=/home/themis-test/python-project/bin/celery -A task_capture worker -E -Q sqlreview_obj -l debug -B -n celery-capture-obj autostart=true redirect_stderr=true stdout_logfile=tmp/themis_capture_obj.log loglevel=info ;開(kāi)啟plan、stat、text信息抓取模塊 [program:themis-capture-other] command=/home/themis-test/python-project/bin/celery -A task_capture worker -E -Q sqlreview_other -l info -B -n celery-capture-other autostart=true redirect_stderr=true stdout_logfile=tmp/themis_capture_other.log loglevel=info ;celery的任務(wù)管理模塊,去掉前邊的";"即可開(kāi)啟,需要配置redis的連接方式 ;[program:themis-flower] ;command=/home/themis-test/python-project/bin/celery flower --address=0.0.0.0 --broker=redis://:[email protected]:6379/0 ;autostart=true ;redirect_stderr=true ;stdout_logfile=tmp/themis_flower.log ;loglevel=info
注意:如果前邊建立的用戶(hù)不同或者使用了不同的目錄,需要將這個(gè)文件里的/home/themis-test/python-project/替換為自己的路徑。
supervisor常用命令開(kāi)啟supervisor supervisord -c script/supervisord.conf 重載supervisor supervisorctl -u sqlreview -p sqlreview.themis reload 進(jìn)入supervisor管理控制臺(tái),這里的-u,-p代表supervisorctl的用戶(hù)名和密碼,在supervisord.conf中配置 supervisorctl -u username -p password
參考:http://www.supervisord.org/
七、常見(jiàn)問(wèn)題主機(jī)名稱(chēng)不一致,導(dǎo)致cx_Oracle出錯(cuò)。
celery與flower版本不一致,導(dǎo)致flower不能啟動(dòng),升級(jí)flower到0.8.1以上。
mysql5.7不能初始化,datetime默認(rèn)類(lèi)型為(DEFAULT "0000-00-00 00:00:00)。
mongodb文檔最大插入數(shù)據(jù)有限制,導(dǎo)致生成結(jié)果時(shí)插入文檔失敗。
在oracle獲取用戶(hù)的時(shí)候,有的系統(tǒng)可能會(huì)將用戶(hù)建到users下,因此需要將 NOT IN ("USERS", "SYSAUX"))改成 NOT IN ("SYSAUX"))
文件位置:capture/sql.py webui/utils/f_priv_db_user_list.py
有些情況下需要安裝python-devel,centos安裝 yum install python-devel
mysqldb安裝問(wèn)題參考:http://blog.csdn.net/wklken/a...
八、異常處理程序中間出了差錯(cuò)可以通過(guò)開(kāi)啟flower來(lái)查看,或者通過(guò)手工執(zhí)行的方式進(jìn)行查看代碼。
flower的開(kāi)啟可以通過(guò)在supervisor中配置或者
;celery的任務(wù)管理模塊,去掉前邊的";"即可開(kāi)啟,需要配置redis的連接方式 ;[program:themis-flower] ;command=/home/themis-test/python-project/bin/celery flower --address=0.0.0.0 --broker=redis://:[email protected]:6379/0 ;autostart=true ;redirect_stderr=true ;stdout_logfile=tmp/themis_flower.log ;loglevel=info
也可以手工開(kāi)啟:
celery flower --address=0.0.0.0 --broker=redis://:[email protected]:6379/0
不過(guò)都需要配置redis認(rèn)證選項(xiàng)。
九、加入開(kāi)發(fā)有問(wèn)題可以直接在 https://github.com/CreditEase... 提出。
本文選自:wiki:https://tuteng.gitbooks.io/th...。
由于篇幅關(guān)系內(nèi)容有所調(diào)整,請(qǐng)點(diǎn)擊鏈接查看原文。
來(lái)源:宜信技術(shù)學(xué)院
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/18007.html
摘要:導(dǎo)語(yǔ)是宜信公司團(tuán)隊(duì)開(kāi)發(fā)的一款數(shù)據(jù)庫(kù)審核產(chǎn)品,可幫助開(kāi)發(fā)人員快速發(fā)現(xiàn)數(shù)據(jù)庫(kù)質(zhì)量問(wèn)題,提升工作效率。此平臺(tái)可實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行多維度對(duì)象結(jié)構(gòu)文本執(zhí)行計(jì)劃及執(zhí)行特征的審核,用以評(píng)估對(duì)象結(jié)構(gòu)設(shè)計(jì)質(zhì)量及運(yùn)行效率。閥值閥值,代表違反規(guī)則的扣分上限。 導(dǎo)語(yǔ) Themis是宜信公司DBA團(tuán)隊(duì)開(kāi)發(fā)的一款數(shù)據(jù)庫(kù)審核產(chǎn)品,可幫助DBA、開(kāi)發(fā)人員快速發(fā)現(xiàn)數(shù)據(jù)庫(kù)質(zhì)量問(wèn)題,提升工作效率。 此平臺(tái)可實(shí)現(xiàn)對(duì)Oracle...
閱讀 3337·2021-11-25 09:43
閱讀 3028·2021-10-15 09:43
閱讀 1980·2021-09-08 09:36
閱讀 2931·2019-08-30 15:56
閱讀 759·2019-08-30 15:54
閱讀 2699·2019-08-30 15:54
閱讀 2990·2019-08-30 11:26
閱讀 1263·2019-08-29 17:27