Oracle 应用总结

oracle应用总结

1 层次树型查询

对具有层次树型结构的数据按照层次关系输出显示:

select

from table_name

where condition

start with column='value'

connect by prior 父主键=子外键

1.start with 子句标识一行作为层次树型查询中的根行,该行必须满足由此子句指定的条件。如果省略此子句,Oracle将表中所有行作为根行。start with条件可以包括子查询。

2. connect by 子句指定在层次树型查询中父行和子行之间的关系,此子句包含了定义父子关系的条件,条件的一部分必须用PRIOR操作符来表示父行。PRIOR操作符可出现在“=”的左边,也可出现在其右边。connect by子句可以包括条件来过滤出的行,但不能使用子查询。

3.可使用where子句剪除满足条件的节点,但该节点的子节点仍然出现在结果树种。在connect by子句中使用条件,可剪除满足条件的节点分支。

selectLPAD('',2*(LEVEL-1))||ename org_chart,empno,mgr,job

from EMP

start withjob='PRESIDENT'

connect by priorempno=mgr;

使用where条件子句去掉一个节点,但其子节点仍在查询结果中

selectLPAD('',2*(LEVEL-1))||ename org_chart,empno,mgr,job

from EMP

where ename !=''FORD'

start with mgr is null

connect by priorempno=mgr;

使用connect by 子句条件去掉一个分支

selectLPAD('',2*(LEVEL-1))||ename org_chart,empno,mgr,job

from EMP

start with mgr is null

connect by priorempno=mgr and ename!='FORD'

测试脚本如下:

CREATE TABLE T_TREE_BAK (ID NUMBER PRIMARYKEY, FATHER_ID NUMBER, NAME VARCHAR2(30));
 SELECT * FROM T_TREE_BAK FOR UPDATE;
 INSERT INTO T_TREE_BAK VALUES (1, 0,'A');
 INSERT INTO T_TREE_BAK VALUES (2, 1,'B');
 INSERT INTO T_TREE_BAK VALUES (3, 1,'C');
 INSERT INTO T_TREE_BAK VALUES (4, 2,'D');
 INSERT INTO T_TREE_BAK VALUES (6, 2,'E');
 INSERT INTO T_TREE_BAK VALUES (5, 3,'F');
 INSERT INTO T_TREE_BAK VALUES (7, 3,'G');
 INSERT INTO T_TREE_BAK VALUES (8, 4,'H');
 INSERT INTO T_TREE_BAK VALUES (9, 4,'I');
 

查询实例:

SELECT ID, FATHER_ID, NAME, CONNECT_BY_ISLEAFleaf, level lev,
CONNECT_BY_ROOT ID,
SYS_CONNECT_BY_PATH(ID,'/')
FROM T_TREE_BAK
CONNECT BY PRIOR ID = FATHER_ID
start with id=1
order by level 

2 JDBC连接数据库的三种方式

格式一: Oracle JDBC Thin using aServiceName:

jdbc:oracle:thin:@//<host>:<port>/<service_name>

Example:jdbc:oracle:thin:@//192.168.2.1:1521/XE

注意这里的格式,@后面有//, 这是与使用SID的主要区别。

这种格式是Oracle 推荐的格式,因为对于集群来说,每个节点的SID 是不一样的,但是SERVICE_NAME 确可以包含所有节点。

 格式二: Oracle JDBC Thin using anSID:

jdbc:oracle:thin:@<host>:<port>:<SID>

Example:jdbc:oracle:thin:@192.168.2.1:1521:X01A

Note:

Support for SID is being phased out. Oraclerecommends that users switch over to usingservice names.

 格式三:Oracle JDBC Thin using a TNSName:

jdbc:oracle:thin:@<TNSName>

Example: jdbc:oracle:thin:@GL

Note:

Support for TNSNames was added in thedriver release 10.2.0.1

3 数据库迁移后新老数据库记录比对

create table tb_table_record(
tab_name varchar2(100),
tab_count number(10),
record_time date default sysdate
);
declare
 v_sql varchar2(1000);
 type t_ref is REF CURSOR; --列表游标
  c1t_ref;
 c_row tb_table_record%rowtype;
 v_count number;
begin
 v_sql := 'truncate table tb_table_record ';
 execute immediate v_sql;
 v_sql := 'insert into tb_table_record(tab_name )select table_name fromuser_tables t ';
 execute immediate v_sql;
 v_sql :='select tab_name,tab_count,record_time from tb_table_record';
 OPEN c1 FOR v_sql;    
   loop            
     fetch c1 into c_row;              
     v_sql :='select count(1) from '||c_row.tab_name;
     execute immediate v_sql into v_count;
     v_sql :='update tb_table_record t set t.tab_count = '||v_count||' wheret.tab_name = '''||c_row.tab_name||'''';
     execute immediate v_sql;
     exit when c1%notfound;
    endloop;       --关闭游标     
 close c1;
 commit;
end;
select * from tb_table_record;
--比较记录数
select * from src_user.tb_table_record@link_new a ,tb_table_record b where a.tab_name =b.tab_name and a.tab_count<> b.tab_count;
注:src_user是源数据库的用户 link_new是dblink

4 Oracle表空间相关查询与操作语句

select usernamefrom dba_users;--查询所有用户
--查看表空间使用情况
SELECT a.tablespace_name "表空间名",
       total/1024/1024表空间大小,
       free/1024/1024表空间剩余大小,
       (total - free)/1024/1024表空间使用大小,
       ROUND((total- free) / total,4) *100"使用率 %"
  FROM (SELECT tablespace_name,SUM(bytes)free
          FROMDBA_FREE_SPACE
         GROUPBY tablespace_name) a,
       (SELECTtablespace_name,SUM(bytes) total
          FROMDBA_DATA_FILES
         GROUPBY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name ;

--创建新用户且未指定表空间时默认使用users表空间
createuser hadoopidentifiedby hadoopdefaulttablespace test_data;
--查看当前用户的缺省表空间
select username,default_tablespacefromuser_users;
--查看当前用户的角色
select *from user_role_privs;
--查看当前用户的系统权限和表级权限
select *from user_sys_privs;
select *from user_tab_privs;
--显示当前会话所具有的权限
select *fromsession_privs;
--显示指定用户所具有的系统权限
select *fromdba_sys_privswhere grantee='GAME';
--查看表空间的名字及大小:
select t.tablespace_name,round(sum(bytes/(1024*1024)),0) ts_size_mb
from dba_tablespaces t, dba_data_files dwhere t.tablespace_name = d.tablespace_name  
groupby t.tablespace_name;
----查看表空间的大小;
SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024 MBFROM DBA_FREE_SPACE GROUPBY TABLESPACE_NAME;
--修改限额
ALTERUSER "SPACEDBA"QUOTAUNLIMITEDON SPACE_DATA;
--Oracle查看表空间及修改数据文件大小
--第一步:查看所有表空间及表空间大小:
select tablespace_name ,sum(bytes)/1024 /1024as MBfrom dba_data_filesgroupbytablespace_name;
--第二步:查看所有表空间对应的数据文件:
select tablespace_name,file_namefromdba_data_files;
--第三步:修改数据文件大小
alterdatabasedatafile'H:\APP\ROBINJUN\PRODUCT\11.2.0\DBHOME_1\ORADATA\TESTSERVER\TEST_DATA01.DBF'RESIZE32M;
alterdatabasedatafile'H:\APP\ROBINJUN\PRODUCT\11.2.0\DBHOME_1\ORADATA\TESTSERVER\TEST_DATA01.DBF'OFFLINE;
--删除表空间
DROPTABLESPACE test_dataINCLUDINGCONTENTSANDDATAFILES;
--更改ONLINE_STATUS
altertablespace test_dataonline;
--查看表空间
SELECT *from dba_tablespaces t,dba_data_files dwhere t.tablespace_name =d.tablespace_name ;
--查看表空间使用的文件
SELECT *FROM Dba_Data_Files aFORUPDATE;
SELECT *FROM dba_segments aWHERE a.tablespace_name='TEST_DATA'
--查看锁定对象
select b.object_name,session_id,process,locked_mode
from v$locked_object a, dba_objects bwherea.object_id=b.object_id;
--建立DBLINK
createdatabaselink link_nameconnectto HADOOPidentifiedby HADOOPusing'HADOOP';
createdatabaselink link_name_testconnecttoLINKidentifiedby HADOOPusing'HADOOP';--LINK_NAME_TEST
select *fromdual@link_name_test;
--修改密码
ALTERUSERHADOOPIDENTIFIEDBY HADOOP;
--删除database link
DROP databaselinklink_name_test;
--测试连接是否成功
select *from dual@link_name;
select *fromdual@link_name_test;
--在本地数据库中查询已经建立的远程连接名 
select owner,object_namefromdba_objectswhere object_type='DATABASE LINK';
select *from dba_objectswhere object_type='DATABASELINK';

5. 查询表空间

5.1 查询一般表空间

SELECTa.tablespace_name "表空间名",
      total 表空间大小,
      free 表空间剩余大小,
      (total - free) 表空间使用大小,
      ROUND((total - free) / total, 4) * 100 "使用率 %"
  FROM (SELECTtablespace_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
   and a.tablespace_name = '查询的表空间名称' 

5.2 查询临时表空间

SELECT a.tablespace_name "表空间名",
       total 表空间大小,
      total-used 表空间剩余大小,
       used 表空间使用大小,
      ROUND(used / total, 4) * 100 "使用率 %"
  FROM (SELECT tablespace_name,SUM(bytes_used) used
         FROM v$temp_space_header
        GROUP BY tablespace_name) a,
      (SELECT tablespace_name, SUM(bytes) total
         FROM dba_temp_files
        GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
   and a.tablespace_name = '查询的临时表空间名称' 

6 创建表空间

//创建表空间 
create tablespace test 
datafile 'c:\oracle\oradata\orcl9\test.dbf'size 50M 
default storage (initial 500K  
Next 500K 
minextents 1 
maxextents unlimited 
pctincrease 0);
 //创建用户 
create user lxg identified by lxg defaulttablespace test; 
 //授权  
grant resource,connect,dba to test;
 //删除表空间  
drop tablespace "空间名" including contents and datafiles
删除用户
drop user"lxg" cascade
增加表空间
alter tablespacechinawater add datafile 'c:\oracle\oradata\orcl9\ADDCHINAWATER.dbf' size 200M
创建用户
create user userNameidentified by password;
创建用户userName,密码为password

----------------------------------------------------------------------------------------------------------------------------------------------------------------

//创建临时表空间
create temporary tablespace test_temp   tempfile'E:\oracle\product\10.2.0\oradata\testserver\test_temp01.dbf'   size 32m  autoextend on   next 32m maxsize2048m   extent management local;
 //创建数据表空间
create tablespace test_data   logging  datafile 'E:\oracle\product\10.2.0\oradata\testserver\test_data01.dbf'   size 32m  autoextend on   next 32m maxsize2048m   extent management local;
//创建用户并指定表空间
create user username identified bypassword   default tablespacetest_data   temporary tablespace test_temp;
//给用户授予权限
grant connect,resourceto username;  //以后以该用户登录,创建的任何数据库对象都属于test_temp 和test_data表空间,这就不用在每创建一个对象给其指定表空间了。
--select * from dba_data_files wherefile_name like '%SPACE%';
--select * from dba_temp_files wherefile_name like '%SPACE%';
 --drop user emp_mgr10 CASCADE;
--drop tablespace xxxx including contentsand datafiles;
--drop tablespace xxxx including contentscascade constraints;
 --创建缺省表空间,系统支持表、公用数据表
create bigfile tablespace SPACE_DATAdatafile 'E:\OracleData\SPACE\DataFiles\SPACE_data.dbf' size 256m autoextendon;
 --创建临时表空间
create bigfile temporary tablespaceSPACE_TEMP tempfile 'E:\OracleData\SPACE\DataFiles\SPACE_temp.dbf' size 256mautoextend on;
 --篮球表空间
create bigfile tablespace BASKETBALLdatafile 'E:\OracleData\SPACE\DataFiles\basketball.dbf' size 256m autoextendon;
 --销售表空间
create bigfile tablespace LOTTERY_SALEdatafile 'E:\OracleData\SPACE\DataFiles\sale.dbf' size 10240m autoextend on;
 --业务日志
create bigfile tablespace SPACE_LOGdatafile 'E:\OracleData\SPACE\DataFiles\log.dbf' size 256m autoextend on;
 用户包括该用户下的表,试图,同义词,过程,索引,及相关的一切都被删除然后新建一个同名用户,赋予相应权限
 --drop user SPACEDba cascade;
 --创建管理员用户
create user SPACEDba identified by qweasd defaulttablespace SPACE_data temporary tablespace SPACE_temp;
 --授权
grant connect,dba to SPACEdba;
 --修改限额
ALTER USER "SPACEDBA" QUOTAUNLIMITED ON SPACE_DATA;
 修改用户默认表空间
alter user test1 default tablespaceuser_tbs

7给用户授权

grant dba to lxg;--授予DBA权限 
grant unlimited tablespace to lxg;--授予不限制的表空间 
grant select any table to lxg;--授予查询任何表 
grant select any dictionary to lxg;--授予 查询 任何字典
grant dba to lxg; 
grant unlimited tablespace to lxg; 
grant select any table to lxg; 
grant select any dictionary to lxg;
grantresource,CONNECTto hadoop;
grantcreateanytypeto hadoop;
(GRANTCREATEdatabaselinkTO hadoop;)--与上面重复
GRANT EXP_FULL_DATABASETO hadoop;--exp_full_database权限
GRANT imp_full_databaseTO hadoop;--imp_full_database权限
GRANTDROPdatabaselinkTO hadoop; 

8创建目录

--删除directory
drop directory pump_dir;
 --创建pump_dir目录(pump_dir需要手工创建)linux机器
CREATE DIRECTORY pump_dir AS '/u01/oracle/oradata/pump_dir';
GRANT READ ON DIRECTORY pump_dir TO PUBLIC;
 --本机数据库测试(windows环境)
--查看目录:
select * from dba_directories;
--指定dump_dir目录:(目录维护命令:)
create directory pump_dir as 'H:\app\ROBINJUN\oradata\pump_dir';--建立
Drop directory pump_dir;--删除
--为用户对该目录操作授权:
grant read,write on directory pump_dir to hadoop;

9 impdp命令

--impdp加载数据命令格式

impdp rman/rman network_link=dmp_link

remp_schema=source_schema:target:shcema 

remap_tablespace=source_tablespace:target:tablespace

注明network_link 指的是在目标库创建的源库db_link且涉及的连接的用户必须具备EXP_FULL_DATABASE

--加载数据

impdp hadoop/hadoop directory=dump_dirdumpfile=mytest.dmp network_link=link_name_test schemas=link remap_schema=link:hadoop remap_tablespace=users:test_data

impdp hadoop/hadoop network_link=link_name_test schemas=link remap_schema=link:hadoop remap_tablespace=users:test_data

10 Oracle查询删除创建表语句拼接

select 'drop table ' || table_name||';'||chr(13)||chr(10) from user_tables;

select 'drop table ' || table_name||'|'||table_name||';'||chr(13)||chr(10) from user_tables;

select ' create table ' || table_name ||'as select * from '||table_name||'@dblink;'||chr(13)||chr(10) from user_tables;

注明:10 表示换行 13表示回车


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值