一、流程
- 公司A利用自己业务系统A将指定资源数据以csv文件上传到ftp服务器;
- 公司B会通过已写好的定时任务脚本读取该ftp服务器目录下文件,
(1)先进行检查数据操作:包括本地数据最新日期以及ftp数据最新日期比对;当两个数据日期无问题,就将资源数据文件下载到指定的目录下,若下载成功,退出服务器。
(2)将下载好的资源文件数据导入中间表a,若完成,会报中间表导入成功;
(3)利用Oracle图形化管理工具将中间表转成图形表,直到图形表转换成功为止;
二、为何引用中间表
- 我认为中间表的引用主要是出于中转的作用。当本公司业务系统需要利用到公司A提供的基础数据并完成写入数据库,进而支撑业务系统满足客户的需求。我们首先应该保障自身数据库数据的安全的前提下,来进行其他的操作;否则会因为进行其他的操作的过程中,因为某个BUG导致自身数据库表受到破坏,从而事倍功半、得不偿失。
- 我们也可以将中间表理解成为一个接口表,用于连通我方与其他方,将其他方数据读取到我方数据库表中(处理某项数据时,作为处理后的半成品数据存放的地方)
三、清理中间表
--检查各个表空间占用情况
SELECT DBF.TABLESPACE_NAME "表空间",
DBF.TOTALSPACE "总量(M)",
DBF.TOTALBLOCKS "总块数",
DFS.FREESPACE "剩余总量(M)",
DFS.FREEBLOCKS "剩余块数",
(DFS.FREESPACE / DBF.TOTALSPACE) * 100 "空闲比例"
FROM (SELECT T.TABLESPACE_NAME,
SUM(T.BYTES) / 1024 / 1024 TOTALSPACE,
SUM(T.BLOCKS) TOTALBLOCKS
FROM DBA_DATA_FILES T
GROUP BY T.TABLESPACE_NAME) DBF,
(SELECT TT.TABLESPACE_NAME,
SUM(TT.BYTES) / 1024 / 1024 FREESPACE,
SUM(TT.BLOCKS) FREEBLOCKS
FROM DBA_FREE_SPACE TT
GROUP BY TT.TABLESPACE_NAME) DFS
--检查表占用空间
SELECT SEGMENT_NAME "表名",
BYTES / (1024 * 1024) "表大小(M)",
OWNER "用户"
FROM DBA_SEGMENTS
WHERE SEGMENT_TYPE = 'TABLE'
AND OWNER = 'ml'
ORDER BY BYTES DESC;
CREATE TABLE MID_CM_ML_1 AS SELECT * FROM MID_CM_ML WHERE DAY_ID > TO_CHAR(SYSDATE - 30, 'YYYYMMDD');
SELECT DISTINCT DAY_ID FROM MID_CM_ML_;
DROP TABLE MID_CM_ML;
PURGE TABLE "BIN$n9mmQcMQowbgU4oaEaxQ0w==$0";
ALTER TABLE MID_CM_ML_1 RENAME TO MID_CM_ML;
ALTER TABLE MID_CM_ML MODIFY(DAY_ID NUMBER(20) DEFAULT 1);
create index idx_ml_day_id on MID_CM_ML(DAY_ID);
create index idx_ml_province_id on MID_CM_ML(PROVINCE_ID);
create index idx_ml_int_id on MID_CM_ML(INT_ID);
注意:
- 如果在此过程中利用drop语句删除掉本不该删除的表,恢复办法:
首先必须保证是9i或10g以上版本,否则flashback将无法恢复表
flashback table "BIN$b+XkkO1RS5K10uKo9BfmuA==$0" to before drop;