天天看點

ORACLE-工作常用配置及指令記錄-導入sql、unl檔案、檢視資料庫狀态、修改字元集等

博文說明【前言】:

    本文将記錄個人工作中常用的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腳本

打開指令視窗--&gt;@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&gt; select userenv('language') from dual;

錯誤操作:

改伺服器端字元集,通過ORACLE的SQL PLUS指令視窗改

在SQL*PLUS中,以DBA登入 conn 使用者名 as sysdba

然後執行以下指令

&gt;shutdown immediate;    (把database停了,關閉資料庫執行個體Instance)

&gt;startup mount;        (把database重開去可更改情況,執行個體裝載資料庫)

&gt;alter system enablerestricted session;

&gt;alter system set job_queue_processes=0;

&gt;alter system setaq_tm_processes=0;

&gt;alter database open;                     (Instance打開資料庫)

&gt;alter database characterset utf8;

OR

&gt;alter database characterset internal_use utf8;(AL32UTF8)

&gt;shutdown immediate;

&gt;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&gt; 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,如需轉載請自行聯系原作者