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


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值