博文說明【前言】:
本文将記錄個人工作中常用的oracle配置指令及相關知識,在目前時間點【2017年5月16号】下,所掌握的技術水準有限,可能會存在不少知識了解不夠深入或全面,望大家指出問題共同交流,在後續工作及學習中如發現本文内容與實際情況有所偏差,将會完善該博文内容。
<a href="https://www.zhihu.com/question/25912483" target="_blank"></a>
正文:
1、cmd中執行sql腳本
sqlplus mcpdb/[email protected]/cxydck1 @D:\浏覽器下載下傳-download\TS_COMPANY-副本.sql
上面這是在沒有使用ora檔案的情況下,如有ora檔案,則10.133.200.230/cxydck1可以替換成自定義的名稱
2、plsql中執行sql腳本
打開指令視窗-->@d:\database.sql 或者 start d:\database.sql
3、将unl檔案資料導入oracle資料庫
1、編輯sql.ctl檔案,sql.ctl檔案内容如下:
load data
infile 'C:\Users\Administrator\Desktop\移動查勘上線測試\2016-10-26-更新分公司使用者資料庫\prpdbankaccount.txt'
insert
into table ts_bankaccount_bak2
fields terminated by'#'
trailing nullcols
(
OPENBANKCODE,
OPENBANKNAME,
NAMECODE,
AREACODE,
USEFLAG
)
注意:檔案中的“#”代表的是unl檔案中以#為分隔符,如果檔案中是以|作為分隔符,則需要将#替換成|,括号中的5個字段指的是對應的5個字段。
2、打開cmd,路徑進入ctl和data.txt所在的路徑,運作
sqlldr mcp31000000/mcp31000000@jspt control=sql.ctl log=log.log bad=bad.log errors=5000
rows=500 bindsize=1048576
注意:
rows與bindsize相關,rows預設64行,如果不修改bindsize,隻修改rows無效。
bindsize --(每次送出記錄的緩沖區的大小,位元組為機關,預設256000)
4、AIX伺服器上使用topas,檢視時出現:Terminal linux is unknown
解決方法:export TERM=vt100 然後在CRT終端上修改将terminal修改為VT100,輸出結果後可以再次修改回linux
5、檢視RAC叢集資源資訊
# srvctl config database -d cxydck -a 【注意:-d後面接的是server_name】
6、檢視RAC叢集監聽資訊
# srvctl config listener -n ZB23YDCK1(主機名)
7、檢視RAC叢集連接配接資訊
# srvctl config database -d cxydck -t
8、檢視RAC叢集執行個體狀态【cxydck為server_name】
# srvctl status database -d cxydck -v
9、檢視節點應用程式狀态: srvctl status nodeapps
10、列出所配置的資料庫名稱:srvctl config database
11、列出所配置的資料庫的詳細資訊:srvctl config database -d cxydck -a
12、檢視ASM磁盤:srvctl status asm -a
13、檢視listener:srvctl status listener
14、檢視磁盤空間資訊
進grid使用者下進入asmcmd,然後lsdg檢視磁盤組空間
15、修改資料庫預設字元集
檢視目前資料庫的字元集
Sql> select userenv('language') from dual;
錯誤操作:
改伺服器端字元集,通過ORACLE的SQL PLUS指令視窗改
在SQL*PLUS中,以DBA登入 conn 使用者名 as sysdba
然後執行以下指令
>shutdown immediate; (把database停了,關閉資料庫執行個體Instance)
>startup mount; (把database重開去可更改情況,執行個體裝載資料庫)
>alter system enablerestricted session;
>alter system set job_queue_processes=0;
>alter system setaq_tm_processes=0;
>alter database open; (Instance打開資料庫)
>alter database characterset utf8;
OR
>alter database characterset internal_use utf8;(AL32UTF8)
>shutdown immediate;
>startup; (重開正常oracle)
注意:oracle修改字元集隻能全局修改,不能隻針對某一個使用者進行修改,并且在建庫的時候字元集是已經選好的,後期是不能被修改的。如果使用指令強制修改字元集,雖然在在表面,字元集是顯示的被修改,但是實際上,資料庫被不可逆的破壞了。
一般修改字元集的準确做法是建立執行個體,做遷移。也就是說上面這一種方法是錯誤的,正确的修改方法為:
16、死鎖問題解決
一、資料庫死鎖的現象
程式在執行的過程中,點選确定或儲存按鈕,程式沒有響應,也沒有出現報錯。
二、死鎖的原理
當對于資料庫某個表的某一列做更新或删除等操作,執行完畢後該條語句不提
交,另一條對于這一列資料做更新操作的語句在執行的時候就會處于等待狀态,
此時的現象是這條語句一直在執行,但一直沒有執行成功,也沒有報錯。
三、死鎖的定位方法
通過檢查資料庫表,能夠檢查出是哪一條語句被死鎖,産生死鎖的機器是哪一台。
1)用dba使用者執行以下語句
select username,lockwait,status,machine,program from v$session where sid in
(select session_id fromv$locked_object)
如果有輸出的結果,則說明有死鎖,且能看到死鎖的機器是哪一台。字段說明:
Username:死鎖語句所用的資料庫使用者;
Lockwait:死鎖的狀态,如果有内容表示被死鎖。
Status:狀态,active表示被死鎖
Machine:死鎖語句所在的機器。
Program:産生死鎖的語句主要來自哪個應用程式。
2)用dba使用者執行以下語句,可以檢視到被死鎖的語句。
select sql_text from v$sqlwhere hash_value in
(select sql_hash_value fromv$session where sid in
(select session_id fromv$locked_object))
四、死鎖的解決方法
一般情況下,隻要将産生死鎖的語句送出就可以了,但是在實際的執行過程中。使用者可
能不知道産生死鎖的語句是哪一句。可以将程式關閉并重新啟動就可以了。
經常在Oracle的使用過程中碰到這個問題,是以也總結了一點解決方法。
1)查找死鎖的程序:
sqlplus "/assysdba" (sys/change_on_install)
SELECTs.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,
l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS
FROM V$LOCKED_OBJECTl,V$SESSION S WHERE l.SESSION_ID=S.SID;
2)kill掉這個死鎖的程序:
alter system kill session ‘sid,serial#’; (其中sid=l.session_id)
3)如果還不能解決:
select pro.spid fromv$session ses,v$process pro where ses.sid=XX and ses.paddr=pro.addr;
其中sid用死鎖的sid替換: exit
ps -ef|grep spid
其中spid是這個程序的程序号,kill掉這個Oracle程序
17、執行startup時,提示ORA-00845:MEMORY_TARGET not supported on this system
在重新開機oracle11G的時候出現這個錯誤,解決方法:
如上的内容就詳細的解釋了該錯誤是由于/dev/shm小于MEMORY_TARGET的大小,或者是/dev/shm根本就沒有挂載,如果同時設定了MEMORY_TARGET和MENORY_MAX_TARGET,那麼/dev/shm至少必須和MEMORY_MAX_TARGET的大小一緻
是以在這裡需要重新把這個目錄進行挂載,在挂載的時候,添加記憶體參數,進入/etc/fstab檔案
修改為:tmpfs /dev/shm tmpfs defaults,size=3G 0 0
[root@tp-oracle11g-1 ~]# df-h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 60G 18G 39G 31% /
tmpfs 1.9G 909M 1009M 48% /dev/shm
/dev/sda1 194M 32M 152M 18% /boot
/dev/sda5 36G 177M 34G 1% /home
/dev/sr0 4.1G 4.1G 0 100% /media
提示無法umount的時候使用 fuser -km /dev/shm/ 然後再umount
重新挂載之後的狀态:
/dev/sda1 194M 32M 152M 18% /boot
/dev/sr0 4.1G 4.1G 0 100% /media
tmpfs 3.0G 0 3.0G 0% /dev/shm
然後:
SQL> startup;
ORACLE instance started.
Total System Global Area1603411968 bytes
Fixed Size 2213776 bytes
Variable Size 939526256 bytes
Database Buffers 654311424 bytes
Redo Buffers 7360512 bytes
Database mounted.
Database opened.
然後重新挂載,如果在解除安裝umount /dev/shm的時候失敗,無法解除安裝,那麼輸入:fuser–km /dev/shm,
然後再重新挂載mount –a
結尾:
感謝閱讀,祝有收獲的一天,謝謝!
本文轉自1清風攬月1 51CTO部落格,原文連結:http://blog.51cto.com/watchmen/1926634,如需轉載請自行聯系原作者