從 Oracle 10g 開始, 就開始提供有 recyclebin 的功能 (資源回收筒) ,
所以一旦不小心 drop table 刪錯了, 而且已經 commit ,
由於在 Oracle 10g 裡面的運作, 只是把原本的 Table 名稱換成 BIN$1234567890==$0 ,
沒關係, 只要把 recyclebin 裡面的物件還原就好啦~~
總是會有不小心的時候嘛~~
也由於沒有釋放 Tablespace 的空間, 也因此查詢 tablespace 佔用大小時就會越來越慢 ,
所以建議還是固定時間去清理一下 ,
以下就是整個還原會用到的相關指令 :
1. 查看目前有那些 Table
select * from tab
2. 查看資源回收有那些物件
select * from recyclebin;
或
select * from dba_recyclebin
或 SQLPLUS 的
SQL> show recyclebin
3. 再來就是還原指令
FLASHBACK TABLE [被刪除的 Table Name] TO BEFORE DROP;
如果是刪除 Table 不要放到 recyclebin 呢?
drop table recycletest purge;
當然囉, 也可以指定那些物件確定要清除 recyclebin
purge table recycletest;
要清空資源回收筒:
purge recyclebin;
或
purge dba_recyclebin;
要注意喔~ 建議用 BIN$1234567890==$0 當作 Table 名稱的方式來還原,
因為有可能建立重複的 Table 名稱, 到時候還原的方式是以後刪除的先還原,
BIN$1234567890==$0 數字越大表示越晚刪除的物件.
遇到重複 Table 的情況時, 可以還原的時候變更 Table 的名稱,
flashback table [刪除的 Table 名稱] to before drop rename to [要還原的 Table 名稱];
當然也可以打開或關閉資源回收筒的功能:
alter session set recyclebin = off;
alter system set recyclebin = off;
因 TIPTOP 執行批次作業或是報表的時候,都會產生暫存 Table 的,
像是 TT 開頭+一串數字+_文字 的 Table 就是暫存時產生的資料,以後也不會再用到了。
有時候也不會 DROP 掉一直存留著,或是就算 DROP 也會一直留在回收筒,
只要在 Oracle 建立排程,定時把這些垃圾都清一清吧~
declare
str varchar2(1000);
num number;
begin
--刪除 TEMP TABLE
for i in(select table_name from user_tables ,user_objects where table_name like 'TT%' and created <= sysdate - 3 and table_name = object_name and object_type = 'TABLE' and tablespace_name = 'TEMPTABS')
loop
str:='drop table '||i.table_name||' purge ';
execute immediate str ;
commit;
end loop;
--清空回收筒
for i in(select object_name,droptime from user_recyclebin where droptime < to_char(sysdate-3,'YYYY-MM-DD hh:mm:ss') and type= 'TABLE' order by droptime)
loop
str:='purge table "'||i.object_name||'" ';
execute immediate str ;
commit;
end loop;
end;
2011年3月23日
2011年3月16日
TIPTOP 和其他系統整合的架構
說到系統整合, 大家應該是惟恐不及吧~~
變成盡量讓其他的系統廠商去思考如何和 ERP 系統來整合,
但越來越多系統的話, 不就有越來越多的整合方式, 在管理上或問題釐清就變的複雜了.
在整合外部多種系統後發現, 比較容易和確實的就屬中介 Table 是最好的方式,
可以避免外部的系統直接寫入 ERP 的資料庫, 可以建立存取權限.
也讓系統整合能夠有足夠資料去稽核正確性.
再來就是系統整合的架構囉~
建立外部系統的 Oracle user account , 並在此 DB 帳號建立要讀取 ERP 的 readonly view ,
之後要取得 ERP 系統的資料, 就可以直接連到資料庫去 Select .
如果是要存入或異動資料到 ERP Database, 需要透過中介 Table 方式進行,
外部系統先寫入到中介 DB 的 Table (需先跟廠商溝通好整合的資料 Schema) ,
然後再由 ERP 用 cron job 或是手動的方式執行程式去建立或異動資料,
確認資料異動正確或錯誤, 回寫狀態碼給中介 DB 的 Table,
外部程式再去 Check 整合資料是否完整和正確.
整合系統讓權責能夠區分清楚, 避免以後維護和責任確認可以比較清楚和容易.
以 APS 的範例如下:
1. 和 APS 系統整合, 所以建立在 Oracle 建立 aps 的帳號名稱.
使用 sys 帳號和 sysdba 方式登入
conn sys/sys_dsc as sysdba;
--create user
CREATE USER aps
IDENTIFIED BY aps
DEFAULT TABLESPACE DBS1
TEMPORARY TABLESPACE TEMP
PROFILE TIPTOPGP
ACCOUNT UNLOCK;
-- 2 Roles for aps
GRANT RESOURCE TO aps;
GRANT TIPTOPGP TO aps;
ALTER USER aps DEFAULT ROLE ALL;
-- 5 System Privileges for aps
GRANT UNLIMITED TABLESPACE TO aps;
GRANT CREATE VIEW TO aps;
GRANT CREATE TABLE TO aps;
GRANT CREATE SYNONYM TO aps;
GRANT CREATE SESSION TO aps;
-- 1 Object Privilege for aps
GRANT SELECT ON SYS.V_$SESSION TO aps;
2. 建立 aps 所要讀取 ERP 的 Table 資料 readonly view .
我假設是全部 DS 裡面的 table 都可以讀取.
select 'CREATE OR replace view aps.' || table_name || ' as
select * from ds.' || table_name || ' with read only;'
from dba_tables
where owner = 'DS'
order by 1
再把 SQL 執行後的資料, 全部複製再執行.
或一個一個 table 加上去
CREATE OR replace view aps.XXX_FILE as select * from ds.XXX_FILE with read only;
3. 在 aps Database 中建立中介 Table 的 Schema .
APS 會回寫工單和請購單, 所以我就叫 aps_sfb_file 和 aps_pml_file .
4. 使用者完成外部 APS 系統後, 回寫工單和請購單的資料到 ERP 系統,
新增 APS 接口的程式, 去讀取中介 Table 和產生 ERP 的單號 .
完成後回寫狀態到中介 Table .
變成盡量讓其他的系統廠商去思考如何和 ERP 系統來整合,
但越來越多系統的話, 不就有越來越多的整合方式, 在管理上或問題釐清就變的複雜了.
在整合外部多種系統後發現, 比較容易和確實的就屬中介 Table 是最好的方式,
可以避免外部的系統直接寫入 ERP 的資料庫, 可以建立存取權限.
也讓系統整合能夠有足夠資料去稽核正確性.
再來就是系統整合的架構囉~
之後要取得 ERP 系統的資料, 就可以直接連到資料庫去 Select .
如果是要存入或異動資料到 ERP Database, 需要透過中介 Table 方式進行,
外部系統先寫入到中介 DB 的 Table (需先跟廠商溝通好整合的資料 Schema) ,
然後再由 ERP 用 cron job 或是手動的方式執行程式去建立或異動資料,
確認資料異動正確或錯誤, 回寫狀態碼給中介 DB 的 Table,
外部程式再去 Check 整合資料是否完整和正確.
整合系統讓權責能夠區分清楚, 避免以後維護和責任確認可以比較清楚和容易.
以 APS 的範例如下:
1. 和 APS 系統整合, 所以建立在 Oracle 建立 aps 的帳號名稱.
使用 sys 帳號和 sysdba 方式登入
conn sys/sys_dsc as sysdba;
--create user
CREATE USER aps
IDENTIFIED BY aps
DEFAULT TABLESPACE DBS1
TEMPORARY TABLESPACE TEMP
PROFILE TIPTOPGP
ACCOUNT UNLOCK;
-- 2 Roles for aps
GRANT RESOURCE TO aps;
GRANT TIPTOPGP TO aps;
ALTER USER aps DEFAULT ROLE ALL;
-- 5 System Privileges for aps
GRANT UNLIMITED TABLESPACE TO aps;
GRANT CREATE VIEW TO aps;
GRANT CREATE TABLE TO aps;
GRANT CREATE SYNONYM TO aps;
GRANT CREATE SESSION TO aps;
-- 1 Object Privilege for aps
GRANT SELECT ON SYS.V_$SESSION TO aps;
2. 建立 aps 所要讀取 ERP 的 Table 資料 readonly view .
我假設是全部 DS 裡面的 table 都可以讀取.
select 'CREATE OR replace view aps.' || table_name || ' as
select * from ds.' || table_name || ' with read only;'
from dba_tables
where owner = 'DS'
order by 1
再把 SQL 執行後的資料, 全部複製再執行.
或一個一個 table 加上去
CREATE OR replace view aps.XXX_FILE as select * from ds.XXX_FILE with read only;
3. 在 aps Database 中建立中介 Table 的 Schema .
APS 會回寫工單和請購單, 所以我就叫 aps_sfb_file 和 aps_pml_file .
4. 使用者完成外部 APS 系統後, 回寫工單和請購單的資料到 ERP 系統,
新增 APS 接口的程式, 去讀取中介 Table 和產生 ERP 的單號 .
完成後回寫狀態到中介 Table .
2011年3月9日
TIPTOP Genero 呼叫本機的程式來執行
TIPTOP 導入之後, 再來就是一連串的外部程式整合囉~~
能夠提供公司全資訊化的服務, 才是 IT 價值所在.
最近想辦法整合條碼的設計軟體,
讓 TIPTOP 能夠抓取資料, 呼叫外部條碼軟體並丟參數值, 由條碼軟體列印出來.
這樣可以讓設計條碼的人就不是 IT 囉~~(這才是我的目的~~)
也簡化了作業的流程, 和日後的維護工作.
不過要如何做呢??
可以參考 cl_client_app.4gl 的程式,
就可以發現 GDC 是可以呼叫 Genero 稱之為"前端"的程式段, ( ui.Interface.frontCall )
只要在要呼叫外部軟體的程式上,加上 cl_open_prog("Shell的程式名稱","參數") ,
如果是多參數的話用 | (pipe) 來分隔.
以範例來說, 我是呼叫"記事本" (notepad) ,
然後檔案的位置在本機的 C:\TIPTOP\xxxxx.TXT ,
加上:
LET status = cl_open_prog("notepad","C:\\TIPTOP\\xxxxx.TXT")
這樣就完成啦~~~試試看吧~~~
能夠提供公司全資訊化的服務, 才是 IT 價值所在.
最近想辦法整合條碼的設計軟體,
讓 TIPTOP 能夠抓取資料, 呼叫外部條碼軟體並丟參數值, 由條碼軟體列印出來.
這樣可以讓設計條碼的人就不是 IT 囉~~(這才是我的目的~~)
也簡化了作業的流程, 和日後的維護工作.
不過要如何做呢??
可以參考 cl_client_app.4gl 的程式,
就可以發現 GDC 是可以呼叫 Genero 稱之為"前端"的程式段, ( ui.Interface.frontCall )
只要在要呼叫外部軟體的程式上,加上 cl_open_prog("Shell的程式名稱","參數") ,
如果是多參數的話用 | (pipe) 來分隔.
以範例來說, 我是呼叫"記事本" (notepad) ,
然後檔案的位置在本機的 C:\TIPTOP\xxxxx.TXT ,
加上:
LET status = cl_open_prog("notepad","C:\\TIPTOP\\xxxxx.TXT")
這樣就完成啦~~~試試看吧~~~
訂閱:
意見 (Atom)