oracle數據庫常見信息處理

一 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


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章