一 MQ命令
1:查看所有隊列管理器 dspmq;
2:運行通道 runmqsc 隊列名;
3:查看通道運行狀態 dis chs(*);
查看現有的通道包括未啓動的: dis chl(*)
4:查看隊列深度 dis q(*)
5:刪除隊列 delete chanel(刪除之前一定要關掉通道)
二 linux通過命令導入數據庫表數據的命令。
1:進入數據庫操作命令: sqlplus npstest/npstest@app
2: 在oracle下數據庫用戶執行 show parameter service_names //查看當前數據庫service_name(app)
3: 在oracle下數據庫用戶執行 show parameter instance_name //查看當前SID
4: 導入表中的數據: @+絕對路徑+.sql; @/home/npstest/work/rfnxy_realtran.sql。(記得在sql最後一句後面加commit提交)。
三 數據庫索引命令
1: 查看錶的索引(注意表名要大寫):
select * from dba_indexes s where s.table_name='NPS_EPCC_COMM'
2: 查看索引名對應的索引列名
select * from user_ind_columns where index_name='NPS_EPCC_COMM_IDX2'
3: oracle刪除索引(小寫索引名)
刪除索引: drop index 表名.索引名;
drop index nps_epcc_comm_idx2
4: 創建索引:
建立索引: create index +索引名(idx_) on 表名(列名);
建立唯一索引:create unique index+索引名(idx_) on 表名(列名);
create index NPS_EPCC_COMM_IDX2 on nps_epcc_comm(ordrid,msgid)
5: 清空數據表: truncate table +表名
四 數據庫在服務器的導入導出
1: 導出
(1)首先要進入oracle用戶下
(2)建立用戶名(有腳本db_user_npstest.sh)
(3)將用戶user用戶表導入到/tmp下
[1] 導整個數據庫用戶的表
exp user/password@orcl file=/tmp/20180115.dmp owner=user
exp npstest/npstest owner=npstest file=/tmp/ nps.dmp
[2] 導出數據庫用戶的單張表
將用戶user用戶的表table1,table2導入到(導兩張表)/tmp下
exp user/password@orcl file=/tmp/20180115.dmp tables=(table1,table2)
exp npstest/npstest@app file=/tmp/ nps.dmp tables=(nps_realtran,nps_transfer)(沒有onwer這一選項);
將用戶user用戶的表table1中的字段filed1以"a"開頭的數據導出
exp user/passwor@orcl filed=/tmp/20180115.dmp tables=(table1) query=/" where filed1 like 'a%'/"
(4)將生成的.dmp文件導入到某個用戶下
imp user/password@orcl filed=/tmp/20180115.dmp ignore=n full=y
imp qxnxy/qxnxy@app fromuser=npstest touser=qxnxy ignore=n file=/tmp/nps.dmp
五 鎖表問題怎樣解決
1: 首先你要知道表鎖住了是不是正常鎖?因爲任何DML語句都會對錶加鎖。
2: 你要先查一下是那個會話那個sql鎖住了表,有可能這是正常業務需求,不建議隨便KILL session,如果這個鎖表是正常業務你把session kill掉了會影響業務的。
建議先查原因再做決定。
錯誤碼:-30006 鎖表
錯誤碼 -1 重複插表;
錯誤碼 -1480 字段長度問題導致插表失敗。
3: 鎖表解決方案
(1)鎖表查詢的代碼有以下的形式:
select count(*) from v$locked_object;
select * from v$locked_object;
(2)查看哪個表被鎖
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
(3)查看是哪個session引起的
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
(4)查看是哪個sql引起的
select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id = b.sid
and b.SQL_ID = c.sql_id and c.sql_id = ''order by b.logon_time;
(5)殺掉對應進程
執行命令:alter system kill session'1025,41';
其中1025爲sid,41爲serial#.
六 oracle數據庫在服務器上連接不上的問題。
1: 數據庫連接不上報28002的問題(密碼過期了)
(1)進入orcale用戶下 輸入命令: sqlplus /nolog ,進入oracle控制檯,並輸入 conn /as sysdba;
(2) alter user 用戶名 identified by 新密碼;(注意一定要加分號,要不就會報錯)
alter user apps identified by 123456;
2: 怎樣將oracle數據庫用戶密碼過期這個限制解決掉
(1)在該數據庫用戶下執行
SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
(2)將密碼有效期由默認的180天修改成"無限制"
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
(3)檢查密碼的有效期是否爲"無限制"
SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
3: 重啓數據庫
(1)進入orcale數據庫用戶下 輸入命令: sqlplus /nolog ,進入oracle控制檯,並輸入 connect /as sysdba;
(2)SQL> startup (作用:啓動數據庫實例);
SQL> shutdown immediate (停止數據庫的指令);
七 重啓平臺服務前殺進程步驟
1: 平臺假如服務異常先執行kpall命令殺進程;然後rmipc
2: ps -ef|grep xznxy 查看這個用戶的進程;
3: 然後將第三列是1的進程殺掉。kill -9 +進程號;(1是殭屍進程);
4: 重啓服務。
八 數據庫報-12541數據庫監聽的問題
Oracle 啓動監聽命令
啓動監聽:lsnrctl start
查看監聽:lsnrctl status
停止監聽:lsnrctl stop
這個實在oracle用戶下執行。
九 數據庫oracle語句查詢的比如只要發送機構號和協議號相同的去除掉,用傳統的distinct只能去重一模一樣的數據針對只有兩個字段相同去重還不能辦到,所以現在借用oracle函數進行去重;
select *
from (select protocolno,
snd_nps_brno,
tx_date,
pay_acc,
pay_acc_name,
certtype,
certno,
phone,
row_number() OVER(PARTITION BY protocolno, snd_nps_brno order by tx_date desc) as row_flag
from nps_zfxygl
where stat = 'PR02'
and manage_type = 'MT02')
where row_flag = '1' ;
這個是去重掉protocolno,snd_nps_brno 這兩個字段相同按日期排序只取日期最大的一個數列字段。
十 top-N問題
找到員工表中工資最高的的前三名
select rownum,enpno,ename,sal
from enp
where rownum<=3
order by sal desc (err)
select rownum,enpno,ename,sal from
(select enpno,ename,sal
from enp
order by sal desc)
where rownum<=3;
rownum不會因爲排序而改變,開始對應哪個位置就是哪個位置。
rownum是結果集的固有屬性。就相當於一條數據的固有值。
十一 分頁數據提取問題
找到員工表中工資5到8名的人
select rownum,r,enpno,ename,sal
from
{
select rownum r,enpno,ename,sal from
(select enpno,ename,sal
from enp
order by sal desc)
where r<=8;
}
where r>=5
十二:linux服務器中導入.sql文件,
1:如果是通過windows上傳。並且打開這個文件.一定要在linux服務器cat -v 文件名|head -5看一下文件末尾是不是^M
cat -A 文件名等價於cat -vET
2:如果是,用dos2unix 文件名 去掉這個^M
3;在存放.sql文件的地方 sqlplus npstest/npstest@app
4:@文件名
5:[注意]我用PLsql導出的文件想插入老報錯,具體原因不太清楚,但是DB_visual確可以。
十三:關於rollback,flashback回退問題
1:rollback必須是在commit提交事務之前纔會有效,提交之後無效。
2:flashback這個我理解只對刪除的表(drop)有效。這個必須是在
select * from recyclebin這個回收站有的數據纔會保存。同時這個表如果刪除之前有數據也會在閃退值=之後存在的。
閃退的命令:flashback table CHENLONG1 to before drop;執行之後就會有數據了。
3:小注意:sqlplus中導入文件一定要在後面加commit,否則只是在事務裏面。不會在PLsql中查到。
十四:
創建新用戶方案 通過MYSCOTTUSER1來訪問數據庫, 權限配置演示
CREATE USER zhang PROFILE DEFAULT IDENTIFIED BY zhang DEFAULT TABLESPACE USERS ACCOUNT UNLOCK;
GRANT CONNECT TO zhang;
GRANT SELECT ANY TABLE TO zhang;
GRANT DELETE ON npstest.nps_realtran TO zhang;
GRANT INSERT ON npstest.nps_realtran TO zhang;
GRANT UPDATE ON npstest.nps_realtran TO zhang;
commit;
登錄到zhang的用戶
執行:select * from npstest.nps_realtran