zoukankan      html  css  js  c++  java
  • Oracle or Question Solve(一)

    Oracle查看版本命令:select * from v$version;

    ORACLE_BASE和ORACLE_HOME路径查看
    su - oracle
    echo $ORACLE_BASE
    echo $ORACLE_HOME

    SGA参数查看:
    sqlplus / as sysdba
    show parameter sga
    sga_max_size的值写上就好

    process参数查看:
    sqlplus / as sysdba
    show parameter process

    是否开启归档:
    sqlplus / as sysdba
    archive log list

    SQL> archive log list
    Database log mode                     Archive Mode
    Automatic archival                      Enabled
    Archive destination                     USE_DB_RECOVERY_FILE_DEST
    Oldest online log sequence               26
    Next log sequence to archive              28
    Current log sequence                    28

    Enable既是开启归档的


    是否语句空表导出(必改):
    show parameter seg
    出来是false即算开启,说明空表可以导出

    是否密码180天密码过期(必改):
    select * from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';

    Unlimited说明密码永不过期


    是否关闭密码大小写敏感(必改):
    show parameter logon
    出来是FALSE即可,说明密码不区分大小写

    是否关闭审计:
    show parameter audit
    如果出来结果是NONE,证明关闭审计了,这样就可以尽可能的避免SYSTEM爆满


    查看datafile路径
    Select name from v$datafile

    SQL> select name from v$datafile;
    NAME
    ---------------------------------------------
    /u01/oracle/oradata/system05.dbf

    在Linux下exp的时候,记得先查看echo $NLS_LANG
    如果不是ZHS16GBK,那样导出的会造成dmp导入时乱码的,
    可以调整oracle用户的环境变量,
    vi ~/.bash_profile  在文件里面添加一句export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    然后要生效,
    可以重新切换用户到oracle,或者source ~/.bash_profile

    Rman路径:
    su - oracle
    crontab -l
    可以看到计划任务里面有个备份脚本,
    0 0 * * * /u01/rmanbak/rmanbak.sh>/u01/rmanbak/rmanbak.log2>&1

    查看备份脚本,
    cat /databak/rmanbak/rmanbak.sh

    #!/bin/bash

    .~/.bash_profile

    echo---------------------start---------------------------;date
    rman target/<<EOF
    backup as compressed backupset database include current controlfile format
    ‘/u01/rman/rmanbak/full_%U.bak’;
    Delete noprompt obsolete;
    exit;
    EOF
    Echo--------------------------end------------------------------;date

    这个就是rman备份路径 /u01/rman/rmanbak



    数据库硬盘不够   是可以删除 trace 下文件

    参考   rm -f *.trc
          rm  -rf  *.trm

    du -sh *
    pwd
    /u01/oracle/diag/rdbms/orcl/orcl

    oracle数据库迁移常用函数

    wm_concat()函数,系统自己添加的一个分组聚合函数,作用是把一个字段的多个值合并在一起显示,并用‘,’作为分割符

    例1 不分组,取合并后的结果
     select wm_concat(a) from (
     select '123' a,'1' n from dual
     union all
     select '456' a,'2' n from dual
     union all
     select '789' a,'3' n from dual
     union all
     select '10' a,'1' n from dual
     )
     
    WM_CONCAT(A)
    123,456,789,10

    例2:按条件分组后,取每一组的合并后的结果
    select wm_concat(a),n from (
     select '123' a,'1' n from dual
     union all
     select '456' a,'2' n from dual
     union all
     select '789' a,'3' n from dual
     union all
     select '10' a,'1' n from dual
     )group by n;
     
    WM_CONCAT(A)      N
    123,10              1
    456                  2
    789                  3


    lengthb()函数,按字节数统计长度,区别于length()按字符数统计长度
    例子:
    select length('123') ,lengthb('123'),length('123字'),lengthb('123字') from dual ;

    LENGTH('123')    LENGTHB('123')    LENGTH('123字')    LENGTHB('123字')
         3                   3              4                5


        
    ----decode(); 类似case when ,decode()函数参数可以随意增加
    ---具体的实现是decode(a,b,c,d)如果a =b,则结果为c,不然结果为d,
    ---当参数是decode(a,b,c,d,e,f),如果a =b,则结果为c,如果a<>b,则a和d比,如果a=d ,则结果为e,不然结果为f
    ---不同的参数个数,依次类推,可自己尝试
    --例子:
    select decode('aaaaa','123','1','aaa','2','aaaaa','3','4') from dual ;

    结果为  3


    ---substr() substr()是截取函数,主要有三个参数,字符串,起始位置,长度,需要注意的是,
    起始长度从1开始计数,且不管起始位置是不是负数,函数都是从左往右截取,
    --如果起始位置为负数,其意思是从右往左的位数
    --例子:
    select substr('12345678',1,5),substr('12345678',-4,3) from dual ;

    SUBSTR('12345678',1,5)       SUBSTR('12345678',-4,3)
    12345                          567



    ---instr() instr(str_a,str_b,int_a,int_b)函数主要是查找该字符串str_a中,str_b字符或字符串,从下标第int_a位置开始,第int_b次出现的下标
    --例子:
    select instr('abcdefabcdef','ab',1,1) ,instr('abcdefabcdef','ab',1,2),instr('abcdefabcdef','ab',3,1) from dual ;

    INSTR('ABCDEFABCDEF','AB',1,1)    INSTR('ABCDEFABCDEF','AB',1,2)    INSTR('ABCDEFABCDEF','AB',3,1)
    1                                         7                                        7
    ---可以尝试将substr() 和instr() 结合,具体自己操作

    ----insert
    --插入的时候碰到违反唯一的处理方法
    insert into tab_a select * from tab_b
    --1.查看违反唯一原因是不是因为已经在a表中存在b表的部分数据,语句如下:
    select * from tab_a  a where exists (select 'x' from tab_b b where a.key1=b.key1 and ... );
    --2.查看违反唯一原因是不是将tab_b表中,对应tab_a表主键的字段有重复数据,先查看tab_a的主键字段,在看在tab_b中是否有重复数据
    select key1,key2... from tab_b group by key1,key2... having count(*)>1;

    备注:随笔中内容来源于网上资料整理,仅供参考。

  • 相关阅读:
    c++关于map的find和count的使用
    leetcode Two Sum
    leetcode Group Anagrams
    机器学习常见算法分类汇总
    KD树
    偏差与方差(未完)
    线性模型
    决策树
    Linux服务器配置---ftp用户黑名单
    Linux基础命令---mkdir
  • 原文地址:https://www.cnblogs.com/Alanf/p/8400364.html
Copyright © 2011-2022 走看看