tag:blogger.com,1999:blog-77349547166301700752024-03-19T10:49:39.273+08:00平凡的幸福撇開習慣,發現幸福就在平凡之中。
記錄生活、學習心得、工作遇到的問題與想法。Unknownnoreply@blogger.comBlogger1094125tag:blogger.com,1999:blog-7734954716630170075.post-21182945390634103222024-02-16T10:04:00.002+08:002024-02-16T10:04:16.622+08:00Oracle利用awrrpt.sql導出DB效能資料 Oracle Database有一個AWR的工具,它收集了與效能有關的統計數據。首先進入$ORACLE_HOME/rdbms/admin的目錄下,登入sqlplus並執行一個腳本:@awrrpt.sql,接著按照提示就可以將效能資料導出成txt或html的格式SQL> @awrrpt.sqlCurrent Instance~~~~~~~~~~~~~~~~ DB Id DB Name Inst Num Instance----------- ------------ -------- ------------ 259210000 TEST 1 Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-66275946261434755682024-01-31T14:34:00.000+08:002024-01-31T14:34:00.326+08:00Powershell_批次備份與複製(微軟模擬飛行) 因為微軟模擬飛行的遊戲需要中文化,網路上的說法是官方中文包放在遊戲目錄內,要自己更名,也就是將中文包的檔名改成英文檔名,但是遊戲的目錄下有一百多個中文包,所以用powershell來批次處理,希望改完後可以成功中文化這支程式會先將英文檔名更名備份,再將中文檔名改為英文檔名,因為有設定參數,所以其實也可以用來批次處理其他的檔案
# -----程式使用方式-----
# 語法: test001.ps1 -en [英文語系檔名] -tw [中文語系檔名]
# 例如: test001.ps1 -en us_en.lang -tw tw_cn.lang
# -------------------
#param是設定參數,如下設定了兩個參數:en、tw
param($en,$tw)
$US_filename = $en #英文語系檔
$Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-57223863271201892092024-01-17T17:19:00.002+08:002024-01-17T17:19:07.765+08:00Oracle DB變更archive log的路徑 有一台Oracle Data guard的Standby DB,想要變更它的archive log路徑。其實就跟Standalone一樣的做法,至於Primary DB則無需變動。1、查詢目前archive log的狀態SQL> archive log listDatabase log mode Archive ModeAutomatic archival EnabledArchive destination /a/archiveOldest online log sequence &Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-60909938663890804052024-01-17T09:29:00.002+08:002024-01-17T17:19:23.660+08:00利用dbms_application_info,讓v$session記錄額外的資訊 DBMS_APPLICATION_INFO是一个非常有用的package,它提供了在V$SESSION 新增自訂紀錄的功能,以便追蹤SESSION例如我們有一個第三方的程式連線DB,但是從v$session的資訊看來,只能查詢到程式名稱,但是不知道是誰執行了這個程式,所以每次發現某個session執行時間很久時,就只能強迫刪除,無法進一步與使用者討論。此時就可以利用DBMS_APPLICATION_INFO來將自訂的紀錄提供到v$session中,簡單的範例如下:declare aa number ; v_action varchar2(50); v_module varchar2(50); v_client_info varchar2(50);begin &Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-89971585838656977332023-12-12T10:22:00.007+08:002023-12-12T10:22:49.772+08:00Solaris查詢CPU的Core與Thread的數量 查physical processors數量# kstat -m cpu_info | grep chip_id | sort -u | wc -l | tr -d ' '查virtual processors數量# kstat -m cpu_info | grep 'module: cpu_info' | sort -u | wc -l | tr -d ' '查CPU的Core數# kstat -m cpu_info | grep core_id | sort -u | wc -l | tr -d ' ' 每顆CPU有多少Core:(Core)/(physical processors)每個Core有多少的Threads:(virtual processors)/(Core)Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-43631917120803148162023-12-12T10:12:00.002+08:002023-12-12T10:12:32.223+08:00直接連線到Mail Server,用Command來寄發Mail 有時候會遇到使用者收不到程式自動寄發信件的問題,可以用Command的方式來測試Mail Server,記錄一下步驟:用Telnet登入Mail Server,假設Mail server的IP是192.168.1.100,Port是25$ telnet 192.168.1.100 25成功登入Mail Server後,首先用helo或ehlo跟Server打招呼,成功會回傳250的CodeHELO輸入指令MAIL FROM:<email address>,讓mail server知道是誰要寄信,如果mail server允許寄件人則會回傳成功的Code:250MAIL FROM: test01@test.com輸入指令RCPT TO:<email address>,收件人,成功會回傳250的CodeRCPT TO: test02@test.com接著Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-85858721047947522092023-09-27T11:32:00.007+08:002023-09-27T11:32:44.436+08:00Oracle DB:利用sqlnet.ora限制IP連線 因為需要限制IP連線DB,同事提供SQLnet方案,用防火牆也是可以的。防火牆設定比較複雜,但是可以設定的比較詳細,sqlnet只針對DB,且功能不如防火牆多。DB是19c,只有單機,所以環境單純,在$ORACLE_HOME/network/admin/sqlnet.ora中加入下列:# 啟用設定TCP.VALIDNODE_CHECKING=yes # 允許清單(限用IP) TCP.INVITED_NODES=(192.192.192.10,ip2,ip3) # 拒絕清單TCP.EXCLUDED_NODES=(192.168.192.20,ip2,ip3)我只有設定允許清單,所以不在清單內的IP就會被拒絕sqlnet.ora設定完成後,需要重啟linstener才能生效。重啟linstener的過程中,已連線到DB的Session仍可正常作業,但是無法新增Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-68514345395462475152023-09-26T10:15:00.005+08:002023-09-26T10:15:55.603+08:00Oracle forms 12c:更新fmx後無法開啟 在最近有遇到兩個案例,最後解決的方法的一樣的,所以記錄下來。### 案例一:人事系統是用Oracle forms 12c開發的,作業平台是Windows Server,開發人員在修正程式之後,編譯成.fmx並上傳到Server。此時發現程式無法開啟,也沒有出現錯誤訊息,而新程式已有測試過是正常的。###案例二:用FTP上傳修改過後的.fmx時發現無法更新,Server上程式的更新日期還是舊的,但是可以更名。將程式更名備份後,再上傳新的.fmx,此時上傳成功,但是系統卻變成無法開啟該.fmx,但是將備份程式還原名稱後,又變成正常的。上述兩種就是要檢查.fmx是不是被frmweb給佔住了,雖然佔住了,但是還是可以更名,但是frmweb一樣會咬住原本的.fmx,有點像是快取。如果直接刪除原本的.fmx時,系統就會提示程式已經被開啟,無法刪除了。打開「工作管理員」 -> 「效能Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-39452766003645531842023-09-25T11:13:00.007+08:002023-09-25T11:13:57.615+08:00犬山城御城印、名古城御朱印、伊勢神宮御朱印、郵便局風景印、星巴克隨行卡 因為有買到比較便宜的機票,虎航兩個人來回含稅加託運共14280元,所以規劃了一趟名古屋四天三夜之旅。今年8月底開始有數個颱風,幸好最後只有下小陣雨,沒有影響到我們的行程。這篇是記錄這次我在日本收集到的紀念小物,之後如果有再去日本,我應該會再收集。1、伊勢神宮御朱印伊勢神宮有分外宮、內宮,參拜的順序通常都是先外宮、再內宮,我們大概在7點多就到了外宮,但是已經略有人潮,神宮的御朱印很簡單,但是很莊重2、御城印原來除了御朱印,也有御城印,所謂「御城印」便是登城紀念印,可以想成是日本城的御朱印,又被稱為「城郭符」、「御城朱印」等。這也是我第一次知道有御城印,之前沒有注意,這次有到訪犬山城、名古屋城,當然也就順便購買。3、郵便局風景印這是我第一次到日本的郵便局,日本郵便局有賣一些限定的小物與區域限定明信片,可以到郵便局的網站查詢日本郵便局有推出わたしだより(致自己)的特色明信片,不同的Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-77391038542696581132023-09-15T09:36:00.002+08:002023-09-15T09:36:32.964+08:00忙裡偷閒,用powershell自動撰寫檢查記錄表#### 我有檢查系統。我有檢查系統。我有檢查系統。很重要,所以要說三遍。其實事由是這樣的,因為每天需要檢查系統並且記錄,記錄的方式是用Word,內容部份如下:每天手動複製前一天的Word,更改檔案名稱為今天的日期,再將內容變更日期,逐一檢查沒問題再填上ok由上的步驟可知,有幾個是浪費時間的操作,第一個是手動複製Word,第二是更改檔案名稱,第三是更改內容的日期。為了增加程式設計的能力,所以用powershell來幫我完成上述的動作。首先產生一個樣版的Word,檔案為sample.doc,如下: #### 完整的powershell程式碼如下,檔案名稱autoLogWord.ps1$Path="E:\定期檢查記錄\每日檢查記錄\"$Word=new-object -ComObject "Word.Application"$Word.Visible=$true$Doc=$Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-15962762646046827152023-09-14T15:53:00.002+08:002023-09-14T15:53:45.590+08:00EBS。變更APPS、APPLSYS的密碼 每年會計師到廠來做資訊稽核,都會問有沒有定期更改系統的密碼,而且為了系統的安全,定期變更密碼是必要的。Oracle EBS的APPS是一個特別的帳號,所以變更它的密碼需要有一些特別注意的事項,而且不能用DB直接更改APPS,這樣會有問題,因為EBS除了APPS之外,還有一個APPLSYS,這兩個帳號需要匹配。有一次我在執行定期變更密碼的時候,在更新APPS的密碼時出現了一些問題,導致整個ERP都當掉了,最後發現是自己搞烏龍,以為密碼改為A,實際上卻是改為B,不過差點就要倒回備份資料庫來取回相關資料。有鑑於此,所以找到EBS的文件,有一篇提到變更APPS密碼的文件,參考文件後,我的做法如下:#### 查詢APPS密碼的修改日期登入DB並執行下列的SQL,查看修改日期(PTIMT)SQL> select name, PTIME from sys.user$ Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-81148508128578068212023-08-28T15:52:00.005+08:002023-08-28T15:52:16.335+08:00Docker故障一例:CPU使用率高 今天同事告知Docker Server的CPU使用率很高,因為系統是Ubuntu,所以用top檢查一下,結果發現是docker佔用CPU很高。由於之前並沒有這樣的情況,也沒有增加或更動Docker Container的設定,而且Container上提供使用者的服務都還是正常。先試著連上Container看看,結果出現下列的錯誤,一連試了這台Docker Server底下的四個Container,都是一樣的情形[root@FS-TEST ~]# docker exec -it 94ee8a1881a1 /bin/bashconnection error: desc = "transport: dial unix /var/run/docker/containerd/docker-containerd.sock: connect: connection refused": Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-10558399962287742332023-08-28T13:50:00.001+08:002023-08-28T13:50:02.793+08:00Docker for MS SQL Server的建置 微軟有為SQL Server發行Docker的版本,對於測試與學習資料庫是非常方便的。稍微記錄一下操作,以便之後可以快速重建。Docker Hub:https://hub.docker.com/_/microsoft-mssql-server下面是我用來產生Docker Container的語法docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=password" -e "MSSQL_PID=Express" -p 4433:1433 -d mcr.microsoft.com/mssql/server:2019-latest說明:1、因為我想要測試SQL Server 2019,所以我有指定版本2019-latest2、MSSQL_PID是指定使用的版本,如不指定預設是developer,我使用的是Express是資源受限的Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-88344135100068689472023-08-11T10:59:00.002+08:002023-08-11T10:59:21.207+08:00CORS Error:the resource is in more-private address space 'private' 今天在學習React.js時,利用fetch api來取得JSON的資料時,出現了CORS的錯誤:The request client is not a secure context and the resource is in more-private address space `private`.但是我在Server端已經設定好CORS,應該不會出現這個訊息才是。後來在網路上找到了問題,原來是chrome在版本94之後,它不允許不安全的公網(訪問者)存取不安全的私網资源。解決的其中一個方式是將兩邊的網路都設置為https,但是我只是學習而已,好像沒有必要設定SSL另一個方式是進入chrome的設置頁:chrome://flags ,找到Block insecure private network requests,把值設定為disableUnknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-63353268778031528272023-07-25T16:00:00.001+08:002023-07-25T16:00:13.701+08:00DS300B SAN Switch變更snmp 有兩台舊的SAN Switch要變更SNMP的設定值,而其系統為Brocade Fabric OS,在查閱了一些文件之後,把設定的步驟記錄下來。先準備好一台測試用的Linux系統,來測試SAN Switch的snmp v1:# snmpwalk -v 1 -c public 10.10.10.1再來測試snmp v3:# snmpwalk -v 3 -a MD5 -u snmpuer1 10.10.10.1結果出現了一堆的訊息,表示snmp是OK的。因為是舊型的SAN Switch,所以還準備了一台虛擬機,安裝win7 + jre1.6(32bit)並且下載好putty。成功登入之後,點選左側的Switch Admin,開啟Admin視窗後,再選點「Show Advanced Mode」在SNMP的設定頁面中,變更SNMPv1的community值,將預設值改掉接著回到首頁,Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-74866658286258628642023-07-18T10:10:00.002+08:002023-07-18T10:10:12.975+08:00Hyper-V 虛擬機器連線視窗自訂太小 因為預設的Hyper-V虛擬機器連線視窗太大,導致看不到下面的指令,所以想要自訂它的大小,可是不小心設錯了,反而變的太小了,字都看不清楚了,而且工具列上的選項也看不到了。此時可以到:C:\使用者\<USER_NAME>\AppData\Roaming\Microsoft\Windows\Hyper-V\Client\1.0修改vmconnect.config的內容,找到下列的區段(ZoomLevel),這段就是控制視窗的大小,先將值修改成100恢復成原來的大小後,再自訂大小就可以了。Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-46713105923924096232023-06-30T11:15:00.006+08:002023-06-30T11:15:54.923+08:00樹莓派(Raspberry Pi)開機自動執行Chrome瀏覽器 有一個需求是當樹莓派開機後,可以自動執行Chrome瀏覽器,並且開啟Kiosk模式,其步驟如下:進入家目錄中的一個隱藏資料夾$ cd /home/pi/.config建立特定名稱的資料夾$ mkdir autostart進入autostart資料夾後,新建一個檔案$ tocuh chrome.desktop編輯chrome.desktop並加入下列的語法[Desktop Entry]Type = ApplicationExec = chromium-browser -kiosk "http://a-test:9901/ft-th-test"重開機測試,應該就可以成功了Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-42552500406178567202023-06-26T14:26:00.006+08:002023-06-26T14:26:43.207+08:00利用powershell來更改RDP的連線Port 以系統管理員的身份開啟powershell在powershell的命令列上依序執行下列步驟:1、設定port的變數$port_num = 338892、更改RDP上的預設portSet-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -name "PortNumber" -Value $port_num 3、如果已設定過防火牆可省略下列步驟,其中-profile設定為any,表示全部適用New-NetFirewallRule -DisplayName 'RDPPORTLatest-TCP-In' -Profile 'Any' -Direction Inbound -Action Allow -Protocol TCP Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-25964629143404440822023-06-19T13:30:00.010+08:002023-06-19T13:30:43.820+08:00因為修改了帳號的UID,導致無法啟動Oracle DB listener 這是一台Linux測試機,為了某些任務,所以手動修改了/etc/passwd的Oracle帳號uid。原本的帳號visora是101,現在改為100,這個帳號是給Oralce DB使用的而在啟動DB listener時出現了下列的錯誤TNS-12546: TNS:permission deniedTNS-12560: TNS:protocol adapter errorTNS-00516: Permission deniedSolaris Error: 13: Permission denied到/var/tmp檢查一下.oracle這個目錄的權限bash-3.2# ls -ld .oracledrwxrwxrwt 2 vismgr 100 12 Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-54739345574250709672023-05-05T15:33:00.001+08:002023-05-05T15:37:47.891+08:00EBS 11i帳號登入正常,但是無法開啟Forms 今天突然遇到一個很奇怪的現象,已經開啟Form的使用者沒有異樣,但是重新於瀏覽器中成功登入後,在開啟Forms時卻出現無法連線資料庫的訊息。因為自己並沒有對EBS做任何設定,也沒有異動DB設定,難道被使用者或其他的資訊人員弄壞了。不過就在檢查DB的Log之後,發現是ORA-00020: maximum number of processes (1000) exceeded這個錯誤就是超過了DB設定的process的值,所以後來的連線當然會失敗。既然知道了原因,可依下列步驟來修改process的設定值SQL> alter system set processes=25 scope=spfile;由於processes參數是靜態參數,必需重啟資料庫使參數調整生效SQL> shutdown immediate;SQL> startup;可執行下列的SQL來檢查Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-46858087335383129512023-04-26T11:50:00.005+08:002023-04-26T11:50:53.792+08:00ORACLE DB使用網路服務時出現ORA-24247: 存取控制清單 (ACL) 拒絕網路存取 今天在使用utl_smtp的package發送e-mail時,出現了ORA-24247: 存取控制清單 (ACL) 拒絕網路存取在Oracle 11g之後,加強了安全性,如果想要使用外部網路服務時,需要設定ACL。查詢ACL:SQL> SELECT host, lower_port, upper_port, acl FROM dba_network_acls;查詢ACL帳號的權限:SQL> SELECT * FROM dba_network_acl_privileges;新增一個新的ACL,記得把SCOTT換成需要使用服務的DB帳號:DBMS_NETWORK_ACL_ADMIN.CREATE_ACL( acl => 'mail_services.xml', description => 'MAIL ACL', Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-65442040643180177512023-04-18T14:20:00.001+08:002023-04-18T14:20:21.853+08:00Solaris 10 Zones設定ipfilter,以阻擋特定IP的連線 我有一台Global Zone,建置有兩台Non-global zones,我想讓Non-global zones不要連線到192.16.1.199這個IP。一開始我依照教學在Non-global zones設定ipf.conf並啟用ipfilter,但是沒有成功,一直都處在maintenance模式。後來在一篇文章中看到可以在Global Zone設定ipfilter,而其底下的Non-global zones都會套用,所以試了一下,果然成功了。首先登入Global Zone,設定/etc/ipf/ipf.conf,並加入下列條件,來阻擋向192.168.1.199這個IP發送封包。block out log from any to 192.168.1.199如果要阻擋來自於192.168.1.199的封包,則改為:block in log from Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-74347403690761311782023-04-18T10:59:00.003+08:002023-04-18T10:59:19.882+08:00查詢Oracle Rman的進度與刪除 今天發現Oracle RMAN的執行時間很久,以後都到了清晨就結束了,這次都快中午了還沒完成。最後發現是Solaris的設定設錯,備份裝置被設定到了走內部網路,而不是對接的網路,難怪執行時間那麼久。這次就順便把查詢Oracle Rman的進度與刪除步驟記錄下來,以便日後可以查詢。1、查詢Oracle Rman的進度,用v$session_longops來查。SQL> SELECT SID, SERIAL#, OPNAME,CONTEXT, SOFAR, TOTALWORK, ROUND (SOFAR/TOTALWORK*100, 2) as "完成度(%)" FROM V$SESSION_LONGOPS &Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-64956644806758001202023-04-14T10:22:00.001+08:002023-04-14T10:22:09.080+08:00Datadomain OS 6.2查看CIFS的Log 我們的Datadomain OS是6.2,有設定CIFS協定並限制可連線的IP,於是想了解當未許可的IP連線時,是否有記錄可查詢。首先我在網頁的管理介面的message、audit等log中沒有看見相關的記錄,於是查找OS 6.2的管理手冊,找到了方法。登入CLI的管理介面,執行log list的指令,結果如下,與網頁的管理介面是一樣的。而執行log list debug指令後,可以發現有更多log檔,截取部份如下:在debug下,有一個名為cifs.log的檔案,位置在debug/cifs/cifs.log所以執行log view debug/cifs/cifs.log的指令,果然看見了CIFS連線的詳細記錄。Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7734954716630170075.post-22930649657610251532023-04-12T11:20:00.003+08:002023-04-12T11:20:49.270+08:00Outlook的mail內容顯示異常(Oracle DB寄發) 事由是這樣的,有一封從Oracle DB的Procedure自動寄發的mail,在outlook中預覽內容時,只出現部份的內容,但是轉發或另外存檔時文字又可以正常呈現。正確的內容應該如下:花間一壺酒,獨酌無相親,舉杯邀明月,對影成三人。但是內容卻變成這樣:花間一壺酒,獨酌無最後發現是Oracle的程式的問題,其關鍵程式如下:data0 := '花間一壺酒,獨酌無相親,' || chr(13)data := data0 || '舉杯邀明月,對影成三人。'因為chr(13)是回車,換行是chr(10),所以上述的程式寫錯了。為了更了解chr(10)與chr(13)的差異,在網上找了一些資料來研究,自己記錄一下。chr(10)表示換行line feed(\n),就是將游標往下移一行,但是不會移動到行首;chr(13)則是回車carriage return(\r),就是將游標移動到Unknownnoreply@blogger.com