oracle语法

执行计划:

1.1 设置autotrace

序号

命令

解释

1

SET AUTOTRACE OFF

此为默认值,即关闭Autotrace 

2

SET AUTOTRACE ON EXPLAIN

只显示执行计划

3

SET AUTOTRACE ON STATISTICS

 只显示执行的统计信息

4

SET AUTOTRACE ON

 包含2,3两项内容

5

SET AUTOTRACE TRACEONLY

 与ON相似,但不显示语句的执行结果

 

SQL> set autotrace on

SQL> select * from dave;

        ID NAME

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

         8 安庆

         1 dave

         2 bl

         1 bl

         2 dave

         3 dba

         4 sf-express

         5 dmm

 

已选择8行。

 

执行计划

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

Plan hash value: 3458767806

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

| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT  |      |     8 |    64 |     2   (0)| 00:00:01 |

|   1 |  TABLE ACCESS FULL| DAVE |     8 |    64 |     2   (0)| 00:00:01 |

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

 

统计信息

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

          0  recursive calls

          0  db block gets

          4  consistent gets

          0  physical reads

          0  redo size

        609  bytes sent via SQL*Net to client

        416  bytes received via SQL*Net from client

          2  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          8  rows processed

----------------、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

select * from nls_database_parameters;//查询oracle参数
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;
alter system kill session'1709,11947';

--我这里说的字段名跟列 是同一个意思,查询包含字段名字的所有表
select column_name,
table_name,data_type ,data_length,data_precision,data_scale from user_tab_columns where column_name='字段名';


//192.168.1.191:1521/orcl
sqlplus dev/dev@192.168.1.191/orcl
sqlplus sys/1 as sysdba
XMemcachedClient :内存数据库
Memcached :分布式内存对象缓存系统
XMemcached 是一个新 java memcached client 。也许你还不知道 memcached 是什么?可以先看看这里。简单来说, Memcached 是一个高性能的分布式内存对象的 key-value 缓存系统,用于动态 Web 应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用, memcached 通过它的自定义协议与客户端交互,而 XMemcached 就是它的一个 java 客户端实现。
排除重复//排重
select * from test_zp a where id in(select min(id) from test_zp where name =a.name)
select a.* ,a.rowid from test_zp a where rowid in (select min(rowid) from test_zp group by name );
select min(id),min(age), name,sex from test_zp group by name,sex;
分页:
SELECT * FROM ( SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21
ABC型索引,ab/ac可走索引但是bc不走索引
 建议一:在基数小的字段上要善于使用位图索引bitmap。(默认为b-tree索引)
若需要查询“所有没有身份证号码”的员工的信息的时候,标准索引并不能够起到加速查询速度的作用,因为位图索引会记录相关的NULL值列信息
当order by 字段出现在where条件中时,才会利用索引而无需排序操作。其他情况,order by不会出现排序操作。
struts阻止表单重复提交:分别是:token,tokenSession,tokenSession继承token而来。及button中的disabled="disabled"

1. 查看所有表空间大小

SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_data_files
2 group by tablespace_name;

2. 已经使用的表空间大小
SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_free_space
2 group by tablespace_name;

3. 所以使用空间可以这样计算

select a.tablespace_name,total,free,total-free used from
( select tablespace_name,sum(bytes)/1024/1024 total from dba_data_files
group by tablespace_name) a,
( select tablespace_name,sum(bytes)/1024/1024 free from dba_free_space
group by tablespace_name) b
where a.tablespace_name=b.tablespace_name;

4. 下面这条语句查看所有segment的大小。
Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name

5. 还有在命令行情况下如何将结果放到一个文件里。
SQL> spool out.txt
SQL> select * from v$database;
SQL> spool off


select substr('D:\AssetsManagement\resource\ehcache\test.txt',(select INSTR('D:\AssetsManagement\resource\ehcache\test.txt','\',-1) from dual)+1 ) from dual;--文件名
select substr('D:\AssetsManagement\resource\ehcache\test.txt',1,(select INSTR('D:\AssetsManagement\resource\ehcache\test.txt','\',-1) from dual) ) from dual;--文件路径

 

查询本用户全部表下的表名:
select table_name from user_tables order by table_name;

oracle11g:非空表导出设置
select 'alter table '||table_name||' allocate extent;' from user_tables where nvl(num_rows,0)=0;

alter system set deferred_segment_creation=false;

1.创建表空间

create tablespace thams

logging

datafile 'F:\app\zhangpu\oradata\orcl\thams.dbf'

size 2000m

autoextend on

next 100m
maxsize 7024m;

--------------------------------
DML(data manipulation language):
它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言
DDL(data definition language):
DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用
DCL(Data Control Language):
是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL
---------------------------------

删除表空间
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;
drop tablespace lis including contents and datafiles cascade onstraints;
//DROP TABLESPACE lis INCLUDING CONTENTS AND DATAFILES;
____________________________________________________________________

2.创建用户
使用sys用户登录到sysdba,然后找到users-->右键,创建-->
lis
lis
LIS
TEMP
DEFAULT
口令限期
对象权限 默认
角色权限 默认
系统权限 无 -->应用
3.使用新用户登录 如果报 ora-01045 则需要给新用户赋权限
grant create session to UserName;(UserName是登录出错的用户名)

grant create session to lis;

4.在PL\SQL上登录 用户:lis 密码:lis 表空间:LIS 最后:nomal

 

6.Oracle创建用户/密码并授权
(1) 创建用户
Create user 用户名 identified by 密码;(如果是数字则要加双引号”111111”,如果是字母就不用)
(2) 授权给某个用户
Grant connect,resource to 用户名;(只有用户有了connect 和 resource后才能操作其他表)
(3) 授DBA 权限
Grant dba to 用户名;
(4) 给用户创建会话的权限:
grant create session to DB_USER
(3) 授DBA 权限
Grant dba to 用户名;
(4)撤权:
revoke 权限... from 用户名;
(5)删除用户:
drop user username cascade (cascade 保证彻底删除)
(6) 查询表信息:
desc tablename;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
Oracle 使用时间长了, 新增了许多user 和tablespace. 需要清理一下

对于单个user和tablespace 来说, 可以使用如下命令来完成。

步骤一: 删除user

drop user ×× cascade

说明: 删除了user,只是删除了该user下的schema objects,是不会删除相应的tablespace的。

步骤二: 删除tablespace

drop user dev cascade;
alter tablespace DMS offline;
drop tablespace DMS including contents and datafiles cascade constraints;


DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;


drop user dev cascade;

DROP TABLESPACE LIS INCLUDING CONTENTS AND DATAFILES;

Oracle如何断开用户连接 搜出该用户的session的SID,SERIAL码,然后kill掉
select sid,serial# from v$session where username='user_name';

alter system kill session 'sid,serial';
alter system kill session '7,19';
alter system kill session '9,11';
alter system kill session '70,13';
alter system kill session '72,348';
alter system kill session '132,65';
alter system kill session '195,20';
alter system kill session '196,25';
alter system kill session '197,139';

当前表空间大小
select * from dba_data_files where tablespace_name=$TABLESPACE


已使用的表空间大小
select * from dba_segments where tablespace_name=$TABLESPACE_NAME;

未使用空间大小
select * from dba_free_space where tablespace_name=$TABLESPACE_NAME;


//导入导出/////////////////////////////////////////////////////////////////////////////////////////////////
四、导出数据

Oracle11g

在使用

exp

导出数据时会出现空表不能导出的问题,这是因为:
Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。、默认设置deferred_segment_creation 参数为TRUE,空表不分配segment。处理方法:在
sqlplus
中,执行如下命令:
SQL>alter system set deferred_segment_creation=false;
查看:
SQL>show parameter deferred_segment_creation;

该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用


--导出多个table:t1,t2,t3
exp username/password@sid tables=t1,t2,t3 file=d:\tbs.dmp log=d:\tbs.log grants=y
--导出表中符合条件的记录
exp dev/dev TABLES=(system_components) QUERY="'WHERE CODE=''系
统设置/菜单'' and create_time > TO_DATE(''2015-10-27'',''yyyy-MM-dd'')'" FILE =
C:\Users\zhangpu\Desktop\831_数据库改动\A.DMP LOG =A.LOG

--导出整个shcema:
exp dev/dev@orcl owner=dev file=F:\sx_20151102.dmp grants=y
--导入数据
Imp dev/dev@orcl file=E:\831开发平台\dev831_20151029.dmp full=y
Imp dms/dms@orcl file=D:\test\oauser.dmp full=y

imp ams/ams@orcl file=D:\test\sk_db20150605\amssk_db20150605.dmp FroUser=dev ToUser=dev1
使用cmd 进入到exp.demp 文件所在的文件夹下。
使用imp语句 : imp lis/lis@orcl file=exp.dmp FroUser=lis ToUser=lis
报错 imp-00013:
有两种解决方法:
1).使用dba用户导入 imp sys/sys file=exp.dmp fromuser=sys touser=lis ignore=yes
2).给lis赋dba的权限。使用sys登录PL\SQL执行Grant dba to lis; 然后再执行语句imp lis/lis@orcl file=exp.dmp FroUser=lis ToUser=lis
oracle导入excel:
第一步:建csv文件
第二步:建ctl文件

load data --控制文件标识
infile 'c:\test.csv' --要输入的数据文件名为test.csv
append into table test --向表test中追加记录
fields terminated by ',' --字段终止于X'09',是一个制表符(TAB),csv是","
(id,Name,hehe,tm,xgr) --定义列对应顺序
第三步:cmd命令执行:sqlldr userid=dev/dev control='c:\control.ctl'

 

sql>create directory dpdata1 as 'D:/test';
sql>select * from dba_directories;
sql>grant read, write on directory dpdata1 to dev
$expdp ananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES.dmp logfile=aa.log job_name=CASES_EXPORT

$expdp ananda/abc123 tables=CASES directory=DPDATA1
  dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export
1)按用户导
expdp dev/dev@orcl schemas=dev dumpfile=EXPDP11G_expdp_20150909_es.dmp DIRECTORY=dpdata1;
2)并行进程parallel
expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3
3)按表名导
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;
4)按查询条件导
expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
5)按表空间导
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;
6)导整个数据库
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;

五、还原数据
1)导到指定用户下
impdp dev/dev@ORCL schemas=dev dumpfile=EXPDP11G_20150420_000000.DMP DIRECTORY=dpdata1
2)改变表的owner
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
3)导入表空间
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
4)导入数据库
impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
5)追加数据
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION=append;

 

select wm_concat(''''||a.TABLE_NAME||'''' ) from user_tables a where num_rows<1;

expdp myuser/mypwd@mydb directory=DIR dumpfile=a.dmp logfile=a.log tables=TABLEA
导出了表TABLEA,得到a.dmp文件.
impdp JEFF/jeffpwd@JEFF directory=DM_PMML_DIR dumpfile=a.dmp logfile=a.log tables=TABLEA REMAP_SCHEMA=myuser:JEFF
进行导入时,得到提示:
impdp dev/dev@ORCL dumpfile=EXPDP11G_EMPTY20140808.dmp DIRECTORY=dpdata1 REMAP_SCHEMA=dagldb:dev

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

posted @ 2016-12-03 03:24  我的天啊~  阅读(472)  评论(0编辑  收藏  举报