Oracle常用命令自查表

工作中常用Oracle数据库,版本为 11g,常见的命令汇总如下:

--创建用户:
create user username identified by password

--解锁用户:
ALTER USER username ACCOUNT UNLOCK;
-----------------创建表空间----------------
/*分为四步 */
/*第1步:创建临时表空间  */
create temporary tablespace username_temp
tempfile 'E:\app\LiJiVV\oradata\orcl\username_temp.dbf'
size 50m 
autoextend on 
next 50m maxsize 20480m 
extent management local; 
 
/*第2步:创建数据表空间  */
create tablespace username_data 
logging 
datafile 'E:\app\LiJiVV\oradata\orcl\username_data.dbf'
size 50m 
autoextend on 
next 50m maxsize 20480m 
extent management local; 

/* 在Linux下创建表空间 */
CREATE TABLESPACE PMLF_TCMA_GD_BIG        
DATAFILE '/opt/oracledb/PMLF_TCMA_GD_BIG.dbf'          
SIZE 500 M          
AUTOEXTEND ON NEXT 32 M MAXSIZE UNLIMITED
LOGGING        
DEFAULT NOCOMPRESS        
ONLINE        
PERMANENT        
EXTENT MANAGEMENT LOCAL AUTOALLOCATE

 
/*第3步:创建用户并指定表空间  */
create user username identified by username 
default tablespace username_data 
temporary tablespace username_temp; 
 
/*第4步:给用户授予权限  */
grant connect,resource,dba to username; 

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

--删除用户
drop user username cascade

--删除表空间
drop tablespace tablespace_name

--重命名表空间
alter tablespaces tablespace_name rename to new_tablespace_name;  

--授予权限:
grant dba to username

--查看oracle数据库的version
select * from v$version

--sql标准格式:

--插入:
insert into 表名 (字段1, 字段2, 字段3, ...) values (值1, 值2, 值3, ...);

--更新:
update 表名  set 字段名 = 插入值  where 条件

--存在即更新,不存在则插入:
begin
	--写 update 语句,记住,分号";"结尾
	if sql%rowcount = 0 then
	--写 insert 语句,记住,分号";"结尾
	end if;
end;

--MERGE 针对同一张表

MERGE INTO mn a
USING (select count(*) co from mn where mn.ID=4) b
ON (b.co<>0)--这里使用了count和<>,注意下,想下为什么!
WHEN MATCHED THEN
UPDATE
SET a.NAME = 'E'
where a.ID=4
WHEN NOT MATCHED THEN
INSERT
VALUES (4, 'E');
 




--复制一张表中的输入到另一张表中
--1】两张表字段完全相同的情况下
insert into tablename1 select * from tablename2
--2】复制部分数据
insert into 表A(字段1,字段2,...) select 字段1,字段2,... from 表B 

--取某一行数据的最大、最小值
greatest(col1, col2, col3...)--取得col1, col2, col3...字段中是大的值
least(col1, col2, col3....)--同理,取得col1,col2,col3...字段中最小的值
--计算某一行数据的平均值
(nvl(col1,0)+nvl(col2,0)+nvl(col3,0)+...+nvl(coln,0))/n

--判断一个列的值,例子如下,加入COL大于95,则为0,否则不变
CASE WHEN COL > 95 THEN 0 ELSE COL END

--Oracle 递归查询
--找子集
select * from Lf_Ctrl_Module start with MODULEID = '01' connect by prior MODULEID=UPMODULEID

--找父集
select * from Lf_Ctrl_Module start with MODULEID = '0101' connect by prior UPMODULEID=MODULEID


--导出多张表:
exp username/password@orcl tables=(table1,table2,table3,table4,...) file=e:\table.dmp


--导出单张表:
exp username/password@orcl tables=table1 file=e:\table.dmp


--导出整个数据库:
--1、本地导出
exp username/password@orcl file=e:\table.dmp owner=username

--2、远程导出
exp username/password@192.168.0.1/orcl file=e:\table.dmp owner=username

--3、导出所有表结构不要数据:
exp username/password@orcl file=e:\table.dmp owner=username rows = n


--导入数据库
imp username/password@orcl file=e:\table.dmp full=y commit = y


--更换数据库某张表的表名(备份时常用)
--直接更换
ALTER TABLE 当前表名字 RENAME TO 新表的名字
--或者
rename 当前表名字 to 新表的名字 ;

--建新表删旧表
create new_table as select * from old_table;drop table old_table;

--修改数据表名 
ALTER TABLE OLD_TABLE_NAME RENAME TO NEW_TABLE_NAME; 

--修改列名 
ALTER TABLE TABLE_NAME RENAME COLUMN OLD_COLUMN_NAME TO NEW_COLUMN_NAME; 

--修改列的数据类型 
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME NEW_DATATYPE; 

--修改VARCHAR2列的字段长度
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR2(你需要的值); 

--删除列 
ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME;

--添加字段 
ALTER TABLE 表名 ADD 字段 NUMBER(15,4);

--删除当前用户下所有表
select 'drop table '||table_name||';' from user_tables;  

-- Oracle用户权限表 --
--一、创建

sys;--系统管理员,拥有最高权限

system;--本地管理员,次高权限

scott;--普通用户,密码默认为tiger,默认未解锁

--二、登陆

sqlplus / as sysdba;--登陆sys帐户

sqlplus sys as sysdba;---同上

sqlplus scott/tiger;--登陆普通用户scott

--三、管理用户

--在管理员帐户下,创建用户username
create user username;

--修改密码
alert user scott identified by tiger;

--修改用户默认表空间
alter user username default tablespace tablespace_name;

--四,授予权限
--1、默认的普通用户scott默认未解锁,不能进行那个使用,新建的用户也没有任何权限,必须授予权限
grant create session to username;--授予username用户创建session的权限,即登陆权限

grant unlimited tablespace to username;--授予username用户使用表空间的权限

grant create table to username;--授予创建表的权限

grant drop table to username;--授予删除表的权限

grant insert table to username;--插入表的权限

grant update table to username;--修改表的权限

grant all to public;--这条比较重要,授予所有权限(all)给所有用户(public)

--2、oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权
grant select on tablename to username;--授予username用户查看指定表的权限

grant drop on tablename to username;--授予删除表的权限

grant insert on tablename to username;--授予插入的权限

grant update on tablename to username;--授予修改表的权限

grant insert(id) on tablename to username;

grant update(id) on tablename to username;--授予对指定表特定字段的插入和修改权限,注意,只能是insert和update

grant alert all table to username;--授予username用户alert任意表的权限

--五、撤销权限

--基本语法同grant,关键字为revoke

--六、查看权限

select * from user_sys_privs;--查看当前用户所有权限

select * from user_tab_privs;--查看所用用户对表的权限

--七、操作表的用户的表

select * from username.tablename

--八、权限传递

--即用户A将权限授予B,B可以将操作的权限再授予C,命令如下:

grant alert table on tablename to username with admin option;--关键字 with admin option

grant alert table on tablename to username with grant option;--关键字 with grant option效果和admin类似

--九、角色

--角色即权限的集合,可以把一个角色授予给用户

create role myrole;--创建角色

grant create session to myrole;--将创建session的权限授予myrole

grant myrole to username;--授予username用户myrole的角色

drop role myrole;删除角色

--赋予某个用户操作此用户的权限
GRANT SELECT/update/insert/delete on PMLF_TCMA_GD_XC.Lf_Ctrl_Trade TO PMLF_GD;


--十、Oracle 查看表空间的大小及使用情况sql语句

--1、查看表空间的名称及大小
SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size
FROM dba_tablespaces t, dba_data_files d
WHERE t.tablespace_name = d.tablespace_name
GROUP BY t.tablespace_name;
--2、查看表空间物理文件的名称及大小
SELECT tablespace_name,
file_id,
file_name,
round(bytes / (1024 * 1024), 0) total_space
FROM dba_data_files
ORDER BY tablespace_name;
--3、查看回滚段名称及大小
SELECT segment_name,
tablespace_name,
r.status,
(initial_extent / 1024) initialextent,
(next_extent / 1024) nextextent,
max_extents,
v.curext curextent
FROM dba_rollback_segs r, v$rollstat v
WHERE r.segment_id = v.usn(+)
ORDER BY segment_name;
--4、查看控制文件
SELECT NAME FROM v$controlfile;
--5、查看日志文件
SELECT MEMBER FROM v$logfile;
--6、查看表空间的使用情况
SELECT SUM(bytes) / (1024 * 1024) AS free_space, tablespace_name
FROM dba_free_space
GROUP BY tablespace_name;
SELECT a.tablespace_name,
a.bytes total,
b.bytes used,
c.bytes free,
(b.bytes * 100) / a.bytes "% USED ",
(c.bytes * 100) / a.bytes "% FREE "
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c
WHERE a.tablespace_name = b.tablespace_name
AND a.tablespace_name = c.tablespace_name;
--7、查看数据库库对象
SELECT owner, object_type, status, COUNT(*) count#
FROM all_objects
GROUP BY owner, object_type, status;
--8、查看数据库的版本 
SELECT version
FROM product_component_version
WHERE substr(product, 1, 6) = 'Oracle';
--9、查看数据库的创建日期和归档方式
SELECT created, log_mode, log_mode FROM v$database;
--1G=1024MB
--1M=1024KB
--1K=1024Bytes
--1M=11048576Bytes
--1G=1024*11048576Bytes=11313741824Bytes
SELECT a.tablespace_name "表空间名",
total "表空间大小",
free "表空间剩余大小",
(total - free) "表空间使用大小",
total / (1024 * 1024 * 1024) "表空间大小(G)",
free / (1024 * 1024 * 1024) "表空间剩余大小(G)",
(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)",
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 

--十一、oracle回收站问题及解决方案
--1、查询回收站
SELECT t.object_name,t.type ,t.original_name FROM user_recyclebin t;

SELECT count(*) FROM user_recyclebin t;

--2、回收站清理
purge recyclebin ;

--3、禁用回收站:
ALTER SESSION SET recyclebin = OFF; -- 作用于会话状态
ALTER SYSTEM SET recyclebin = OFF; -- 作用于系统状态

--4、启用回收站:
ALTER SESSION SET recyclebin = ON; -- 作用于会话状态
ALTER SYSTEM SET recyclebin = ON;-- 作用于系统状态

--5、单独删除
PURGE TABLE BIN$5l669dZGTlGbDXj0fB80Gw==$0;

--6、恢复回收站中的表
flashback table BIN$5l669dZGTlGbDXj0fB80Gw==$0 to before drop; 


--十二、Oracle 11g空表不能导出问题解决
--Oracle 11g的新特性,数据条数是0时不分配segment,所以就不能被导出。
--解决方案:
--1、先执行此语句生成分析表的SQL,copy出来,然后打开新的SQL窗口执行
select 'analyze table '||table_name||' compute statistics;' from user_tables;
--2、执行sql,查看有哪些是空表
select table_name from user_tables where NUM_ROWS=0; 
--3、通过select 来生成修改语句
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0; 
--4、将上面生成的修改语句,copy出来,然后打开新的SQL窗口执行即可 

--十三、查看所有用户
select * from dba_users;   
select * from all_users;   
select * from user_users;

--十四、删除所有表
select 'drop table '||table_name||';' from cat where table_type='TABLE' 

--十五、修改用户过期时间为永久
select * from Dba_Profiles A WHERE A.profile = 'DEFAULT'  AND A.resource_name = 'PASSWORD_LIFE_TIME';

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

--十六、查询某个表的字段都被哪些表引用为外键
select c.TABLE_NAME tablename,c.constraint_name foreignname,u.column_name columnname
from all_constraints p, all_constraints c,user_cons_columns u
where p.table_name = 'TABLE_NAME'
and p.OWNER = SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA')
and c.OWNER=SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA')
and c.constraint_type = 'R'
and c.CONSTRAINT_NAME=u.constraint_name
and p.CONSTRAINT_NAME = c.R_CONSTRAINT_NAME

--十七、修改最大连接数
--查看连接线程数
SELECT COUNT(*) FROM V$PROCESS;
--查询连接线程数配置表
select * from v$parameter where name ='processes';
--统计数据库连接的消耗情况
select  b.MACHINE, b.PROGRAM, b.USERNAME, count(*) from v$process a, v$session b where a.ADDR = b.PADDR and  b.USERNAME is not null  group by  b.MACHINE, b.PROGRAM, b.USERNAME order by count(*) desc
--修改最大连接数,重启监听和服务后生效
alter system set processes = 1000 scope = spfile;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值