目前日期文章:201306 (13)

瀏覽方式: 標題列表 簡短摘要
為了測試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就可以完成,執行效率較高。

keven 發表在 痞客邦 留言(0) 人氣()

在Oracle 11g新建一個帳號test01,登入時出現ORA-01045錯誤
SQL> connect test01/oracle;
ERROR:
ORA-01045: user TEST01 lacks CREATE SESSION privilege; logon denied

keven 發表在 痞客邦 留言(0) 人氣()

在啟用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

keven 發表在 痞客邦 留言(0) 人氣()

我的ifive mini 原本還可以調整USB接口的角度來充電,但是幾天前無論如何調整都沒有辦法充電,心想該不會是故障了吧。
先確認看看是不是USB線與充電器的問題,把一條短的USB線接口剪掉,一共有四條線,接上充電器後用三用電表測試,
結果是正常的,看來真的是故障了。
因為還在保固期間內,所以先與遠瀚科技聯絡並提供機身序號後,就把ifive mini寄回給遠瀚科技維修部,
他們的動作挺快的,兩天後我就收到維修後的ifive mini,一切又恢復正常。

keven 發表在 痞客邦 留言(0) 人氣()

昨天上課時聽到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

keven 發表在 痞客邦 留言(0) 人氣()

原本的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.

keven 發表在 痞客邦 留言(0) 人氣()

今天出現一個很奇怪的情形,PO在收料之時,料號已被停用,重新啟用料號後,要入庫時就出現了錯誤。
而且不論是執行更正或退貨都會出現相同的問題(EBS的版本是11.5.10.2)。

rvtptcontrol failed

keven 發表在 痞客邦 留言(0) 人氣()

我從Oracle下載Pre-Built Developer VMs,內建11gR2的Database,但是並沒有啟用Archive Log Mode

SQL> archive log list;
Database log mode            No Archive Mode
Automatic archival            Disabled
Archive destination           

keven 發表在 痞客邦 留言(0) 人氣()

ar60run是Report  Runtime,可以用ps來查看它所執行的報表,如下:

$ ps -ef |grep ar60run
prodmgr  8786 13109 252 10:24:17 ?        175:38 ar60run P_CONC_REQUEST_ID=10284579 P_BREAK_ID='1' P_RPT_UOM='2'

keven 發表在 痞客邦 留言(0) 人氣()

因為想要錄電腦播放的聲音,所以到網路上下載Audio Recorder for Free的錄音程式,
結果錄音的品質實在是難以接受,不僅音量很小,還有沙沙的雜音,系統是Windows 8。
接著測試了Audacity、Glodware,情況依舊,開始懷疑可能是Win8的問題。
以前在WinXP環境,錄音十數次都很正常,所以不太可能是我操作的問題;
而筆電才買不到兩年,也不考慮是硬體問題。

keven 發表在 痞客邦 留言(0) 人氣()

星期日在Clone ERP時,雖然事前已檢查過測試機的容量,算一算應該是夠用,結果事與願違,
從正式區複製檔案到測試機的最後,系統提示空間不足。

於是開始想哪裡的檔案可以刪除,可是所有的檔案都是必要的,沒有辦法刪除。
最後想到正式區的undo與temp合計有80GB,測試區不用那麼大的空間。

keven 發表在 痞客邦 留言(0) 人氣()

終端機上是作業系統的登入提示,按下Ctrl+B就可以登入MP,
如果要從MP回到作業系統的登入,則在MP的MENU中選擇CO:Consoles,
再選擇Partition 0,也就是先在提示符號下鍵入co,再鍵入0

keven 發表在 痞客邦 留言(0) 人氣()

PO在提交之後,有時會因為某些原因,PO狀態為In process。
這次遇到的例子也是因為有一張PO Release的採購單狀態為In porcess,以致後續的動作都無法執行。

網路上有提供四個解法,我採用的是直接update 狀態欄位,順便記錄其他的方法,

keven 發表在 痞客邦 留言(0) 人氣()