- Aug 02 Fri 2013 16:46
Oracle ERP 如何在report中使用fnd_global.user_id
今天在開發Oracle ERP的Report時,想以下列的PL/SQL來找出登入的員工姓名,
但是卻發現Report執行出來的結果都是空白。
begin
- Jul 02 Tue 2013 16:41
Trace Concurrent Request的執行過程
有一支Concurrent Request執行時間很久,想找出是那一段SQL花費了最多的時間。
- Jul 01 Mon 2013 16:55
EBS錯誤:DISK I/O error on temporary record buffer file /var/tmp/...
今天在EBS 11i上要Applove盤點過帳的項目時,出現下列的錯誤:
DISK I/O error on temporary record buffer file /var/tmp/...
使用者也打電話反應要查詢一張有30筆料號的採購單時,只出現3筆料號。
到HP-UX下去查詢磁碟容量:
# bdf
DISK I/O error on temporary record buffer file /var/tmp/...
使用者也打電話反應要查詢一張有30筆料號的採購單時,只出現3筆料號。
到HP-UX下去查詢磁碟容量:
# bdf
- Jun 21 Fri 2013 10:35
Oracle 9i新增的MERGE語法
為了測試Oracle 9i新增的MERGE語法,建立了兩個測試表格。
歷屆選手表
create table sportsman_history (name varchar2(30),live_area varchar2(100)) tablespace users;
insert into sportsman_history values ('張三','台南市') ;
insert into sportsman_history values ('李四','新北市') ;
insert into sportsman_history values ('王五','宜蘭縣') ;
commit;
選手申請表
create table apply_temp (name varchar2(30),live_area varchar2(100))tablespace users;
insert into apply_temp values ('張三','嘉義市') ;
insert into apply_temp values ('李四','新北市') ;
insert into apply_temp values ('陳七','屏東縣') ;
commit;
SQL> column name format a20;
SQL> column live_area format a20;
SQL> select * from sportsman_history;
NAME LIVE_AREA
-------------------- --------------------
張三 台南市
李四 新北市
王五 宜蘭縣
SQL> select * from apply_temp;
NAME LIVE_AREA
-------------------- --------------------
張三 嘉義市
李四 新北市
陳七 屏東縣
判斷「選手申請表」中沒有「歷屆選手表」的姓名,則新增到「歷屆選手表」,否則更新「歷屆選手表」的資料
SQL> MERGE INTO sportsman_history sh USING apply_temp at
ON (sh.name=at.name)
WHEN MATCHED THEN UPDATE SET sh.live_area=at.live_area
WHEN NOT MATCHED THEN INSERT VALUES (at.name,at.live_area);
SQL> select * from sportsman_history;
NAME LIVE_AREA
-------------------- --------------------
陳七 屏東縣
張三 嘉義市
李四 新北市
王五 宜蘭縣
如果是以PL/SQL來寫,程式應該如下:
declare
v_check number;
cursor cur_1 is
select * from apply_temp at ;
r1 cur_1%rowtype;
begin
for r1 in cur_1 loop
select count(1) into v_check from sportsman_history sh
where sh.name=r1.name;
if v_check >0 then
update sportsman_history sh set sh.name=r1.name;
else
insert into sportsman_history sh values (r1.name,r1.live_area);
end if;
end loop;
end;
由上述可知,利用Oracle 9i新增的語法MERGE來完成Insert與update的動作,
只需要對Table進行一次Full Scan就可以完成,執行效率較高。
歷屆選手表
create table sportsman_history (name varchar2(30),live_area varchar2(100)) tablespace users;
insert into sportsman_history values ('張三','台南市') ;
insert into sportsman_history values ('李四','新北市') ;
insert into sportsman_history values ('王五','宜蘭縣') ;
commit;
選手申請表
create table apply_temp (name varchar2(30),live_area varchar2(100))tablespace users;
insert into apply_temp values ('張三','嘉義市') ;
insert into apply_temp values ('李四','新北市') ;
insert into apply_temp values ('陳七','屏東縣') ;
commit;
SQL> column name format a20;
SQL> column live_area format a20;
SQL> select * from sportsman_history;
NAME LIVE_AREA
-------------------- --------------------
張三 台南市
李四 新北市
王五 宜蘭縣
SQL> select * from apply_temp;
NAME LIVE_AREA
-------------------- --------------------
張三 嘉義市
李四 新北市
陳七 屏東縣
判斷「選手申請表」中沒有「歷屆選手表」的姓名,則新增到「歷屆選手表」,否則更新「歷屆選手表」的資料
SQL> MERGE INTO sportsman_history sh USING apply_temp at
ON (sh.name=at.name)
WHEN MATCHED THEN UPDATE SET sh.live_area=at.live_area
WHEN NOT MATCHED THEN INSERT VALUES (at.name,at.live_area);
SQL> select * from sportsman_history;
NAME LIVE_AREA
-------------------- --------------------
陳七 屏東縣
張三 嘉義市
李四 新北市
王五 宜蘭縣
如果是以PL/SQL來寫,程式應該如下:
declare
v_check number;
cursor cur_1 is
select * from apply_temp at ;
r1 cur_1%rowtype;
begin
for r1 in cur_1 loop
select count(1) into v_check from sportsman_history sh
where sh.name=r1.name;
if v_check >0 then
update sportsman_history sh set sh.name=r1.name;
else
insert into sportsman_history sh values (r1.name,r1.live_area);
end if;
end loop;
end;
由上述可知,利用Oracle 9i新增的語法MERGE來完成Insert與update的動作,
只需要對Table進行一次Full Scan就可以完成,執行效率較高。
- Jun 21 Fri 2013 10:09
建一個帳號,登入時出現ORA-01045錯誤
在Oracle 11g新建一個帳號test01,登入時出現ORA-01045錯誤
SQL> connect test01/oracle;
ERROR:
ORA-01045: user TEST01 lacks CREATE SESSION privilege; logon denied
SQL> connect test01/oracle;
ERROR:
ORA-01045: user TEST01 lacks CREATE SESSION privilege; logon denied
- Jun 20 Thu 2013 17:04
在啟用Oracle listener時,出現錯誤:Linux Error: 29: Illegal seek
在啟用Oracle listener時,出現了下列的錯誤,
$ lsnrctl start
TNS-12537: TNS:connection closed
TNS-12560: TNS:protocol adapter error
TNS-00507: Connection closed
Linux Error: 29: Illegal seek
檢查了listener.ora,似乎沒有什麼錯誤,改了幾個參數後,仍然出現錯誤。
檢查了Listener Log File也看不出來什麼訊息,最後在網路上一個外國的論譠,有人提到是hosts設定的問題。
於是到/etc下去看hosts的設定,就是127.0.0.1設定的問題。
把127.0.0.1 test01 test01改回127.0.0.1 localhost.localdomain localhost就正常啟動linstener
可能是listener在啟動時會使用localhost,而不是使用127.0.0.1
$ lsnrctl start
TNS-12537: TNS:connection closed
TNS-12560: TNS:protocol adapter error
TNS-00507: Connection closed
Linux Error: 29: Illegal seek
檢查了listener.ora,似乎沒有什麼錯誤,改了幾個參數後,仍然出現錯誤。
檢查了Listener Log File也看不出來什麼訊息,最後在網路上一個外國的論譠,有人提到是hosts設定的問題。
於是到/etc下去看hosts的設定,就是127.0.0.1設定的問題。
把127.0.0.1 test01 test01改回127.0.0.1 localhost.localdomain localhost就正常啟動linstener
可能是listener在啟動時會使用localhost,而不是使用127.0.0.1
- Jun 20 Thu 2013 11:12
ifive mini無法充電送修
我的ifive mini 原本還可以調整USB接口的角度來充電,但是幾天前無論如何調整都沒有辦法充電,心想該不會是故障了吧。
先確認看看是不是USB線與充電器的問題,把一條短的USB線接口剪掉,一共有四條線,接上充電器後用三用電表測試,
結果是正常的,看來真的是故障了。
因為還在保固期間內,所以先與遠瀚科技聯絡並提供機身序號後,就把ifive mini寄回給遠瀚科技維修部,
他們的動作挺快的,兩天後我就收到維修後的ifive mini,一切又恢復正常。
先確認看看是不是USB線與充電器的問題,把一條短的USB線接口剪掉,一共有四條線,接上充電器後用三用電表測試,
結果是正常的,看來真的是故障了。
因為還在保固期間內,所以先與遠瀚科技聯絡並提供機身序號後,就把ifive mini寄回給遠瀚科技維修部,
他們的動作挺快的,兩天後我就收到維修後的ifive mini,一切又恢復正常。
- Jun 20 Thu 2013 09:14
Oracle 10g後的Archive Log的預設位置在Flash Recovery Area
昨天上課時聽到10g以後的Archive Log的預設位置在USE_DB_RECOVERY_FILE_DEST,保存在Flash recovery area,
但是Flash recovery area的預設大小為2G,有可能會導致Archive Log空間不足。
所以今天就拿虛擬機來測試看看,查詢目前Flash Recovery Area內Archive Log的使用量
SQL> select percent_space_used from v$flash_recovery_area_usage where file_type='ARCHIVED LOG';
PERCENT_SPACE_USED
------------------
0
將LOG_ARCHIVE_DEST_1清空。
SQL> alter system Set LOG_ARCHIVE_DEST_1='' scope=spfile;
重開DB到open階段
SQL> shutdown immedite;
SQL> startup;
查詢Archivelog狀態,可以發現Archive destination預設是USE_DB_RECOVERY_FILE_DEST
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 396
Next log sequence to archive 398
Current log sequence 398
強制切換Redolog,產生archive log
SQL> alter system switch logfile;
再次查詢Flash Recovery Area內Archive Log的使用量
SQL> select percent_space_used from v$flash_recovery_area_usage where file_type='ARCHIVED LOG';
PERCENT_SPACE_USED
------------------
.02
但是Flash recovery area的預設大小為2G,有可能會導致Archive Log空間不足。
所以今天就拿虛擬機來測試看看,查詢目前Flash Recovery Area內Archive Log的使用量
SQL> select percent_space_used from v$flash_recovery_area_usage where file_type='ARCHIVED LOG';
PERCENT_SPACE_USED
------------------
0
將LOG_ARCHIVE_DEST_1清空。
SQL> alter system Set LOG_ARCHIVE_DEST_1='' scope=spfile;
重開DB到open階段
SQL> shutdown immedite;
SQL> startup;
查詢Archivelog狀態,可以發現Archive destination預設是USE_DB_RECOVERY_FILE_DEST
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 396
Next log sequence to archive 398
Current log sequence 398
強制切換Redolog,產生archive log
SQL> alter system switch logfile;
再次查詢Flash Recovery Area內Archive Log的使用量
SQL> select percent_space_used from v$flash_recovery_area_usage where file_type='ARCHIVED LOG';
PERCENT_SPACE_USED
------------------
.02
- Jun 17 Mon 2013 16:35
11g利用指令nid改db_name、db_id
原本的db_name為orcl,測試將改為testdb
直接用nid來更改db_name、db_id,可免去許多步驟,參數help='Y'可以看到說明
$ nid help='Y'
DBNEWID: Release 11.2.0.2.0 - Production on Mon Jun 17 01:26:21 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
直接用nid來更改db_name、db_id,可免去許多步驟,參數help='Y'可以看到說明
$ nid help='Y'
DBNEWID: Release 11.2.0.2.0 - Production on Mon Jun 17 01:26:21 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
- Jun 17 Mon 2013 14:52
PO已收料無法入庫,出現rvtptcontrol failed rvtth-115f
今天出現一個很奇怪的情形,PO在收料之時,料號已被停用,重新啟用料號後,要入庫時就出現了錯誤。
而且不論是執行更正或退貨都會出現相同的問題(EBS的版本是11.5.10.2)。
rvtptcontrol failed