Oracle常用命令

  1. Jdbc连接的方式
  2. 表空间占用
  3. 表空间内表排序
  4. 查询表字段
  5. 导出
  6. 导入
  • sql查询
    1. 填充函数
    2. 树查询 start with
  • 常用分析函数
    1. 1.排序
    2. 2.求之前之后的第N行
    3. 3.排列组合
  • Jdbc连接的方式

    
    -- 1.SID
    -- jdbc:oracle:thin:@localhost:1521:SID
    -- 2.url
    -- jdbc:oracle:thin:@//host:port/service_name 
    -- tns
    -- jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.16.91)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))
    -- tns名
    -- jdbc:oracle:thin:@tnsname
    /*
    方法一:在启动VM 时添加如下参数:
    -Doracle.net.tns_admin=D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN
    
         方法二:在java 代码里添加:
    System.setProperty("oracle.net.tns_admin","D:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\NETWORK\\ADMIN"); 
    
    */
    

    表空间占用

    select a.tablespace_name "表空间",
    			 total "总量",
    			 free "剩余大小",
    			 (total - free) "已用",
    			 total / 1024 / 1024 / 1024 "总量GB",
    			 free / 1024 / 1024 / 1024 "剩余GB",
    			 (total - free) / 1024 / 1024 / 1024 "已用GB",
    			 round((total - free) / total, 4) * 100 "使用率%"
    	from (select tablespace_name, sum(bytes) free
    					from dba_free_space
    				 group by tablespace_name) a,
    			 (select tablespace_name, sum(bytes) total
    					from dba_data_files
    				 group by tablespace_name) b
     where a.tablespace_name = b.tablespace_name;
    

    表空间内表排序

    select segment_name as 表名,
    			 sum(bytes) / 1024 / 1024 "size(MB)",
    			 sum(bytes) / 1024 / 1024 / 1024 "size(GB)"
    	from user_segments
     where tablespace_name = 'CORE_DATA'
     group by segment_name
     order by "size(GB)" desc;
    

    查询表字段

    select * from user_tab_cols q where q.TABLE_NAME=upper('Table_name')
    

    导出

    --客户端
    exp username/passowrd@ip:port/sid file=/test.dmp tables=tablename1,tablename2,......
    --服务端 oracle10g及之后版本
    expdp username/passowrd@ip:port/sid directory=/path dumpfile=filename.dp  logfile=filename.dp.log schema= \
         Full=y \-- 备份全表
         tables='table1','table2','table3' \ --指定表
    
    

    导入

    --客户端
    imp username/passowrd@ip:port/sid file=/test.dmp  from user1 to user2   full=y ignore=y
    --服务端 oracle10g及之后版本
    impdp username/passowrd@ip:port/sid directory=/path dumpfile=filename.dp  logfile=filename.dp.log remap_schema=
    

    sql查询

    填充函数

    Lpad(str , len,  padstr);  --左填充  str 字段 len 填充长度,padstr 填充字符
    Rpad(str , len,  padstr);  --右填充
    eg:左边补0 select Lpad('test', 10, '0') from dual ; -- out:   0000000000test
    

    树查询 start with

    
    select * from  table 
    where 1=1
    and connect_by_isleaf=1 -- 是否叶子节点(0否/1是)
    start with  树起始条件
    connect by prior (父字段=子字段)(子字段-=父字段)
    

    常用分析函数

    分析函数形式 xxxx(….) over( [partittion by colom1,colom2….] [order by colom1,colom2…. ] )

    1.排序

    --1.遇到相同记录数据 按排名递增
    row_number() over(
         [partittion by colom1,colom2....]
         [order by colom1,colom2.... ] 
    )
    
    --2.遇到相同记录数据 按排名相同
    dense-rank() over(
         [partittion by colom1,colom2....]
         [order by colom1,colom2.... ] 
    )
    --3.遇到相同记录数据 按排名相同 同时会在最后一条相同记录和下一个不同记录之间空出排名
    rank() over(
         [partittion by colom1,colom2....]
         [order by colom1,colom2.... ] 
    )
    

    2.求之前之后的第N行

    -- comlm 指定字段 offset 偏移量 即N 默认为1,defval 默认返回值 (默认为null)
    lag(colom ,offset,defval) over() -- 前N行
    lead(colom ,offset,defval) over()-- 后N行
    

    3.排列组合

    -- 1.rollup()
    --eg: 
    group by rollup( a ,b,c)
    -- 按照 abc  ab a 依次进行分组
    
    -- 2.cube()
    --eg:
    group by cube( a ,b,c)
    -- 按照 abc ab ac a bc b c 依次进行分组