1.使用Xshell连接linux服务器。
2.以oracle身份登录数据库,命令:su – oracle
3.进入Sqlplus控制台,命令:sqlplus /nolog
4.以系统管理员登录,命令:connect / as sysdba
5.关闭数据库,命令:shutdown immediate
6.退出sqlplus控制台,命令:exit
7.进入监听器控制台,命令:lsnrctl
8.启动监听器,命令:start
9.退出监听器控制台,命令:exit
1、ORACLE SID查看设置
查看SID、用户名
$ env|grep SID 、select * from v$instance、select instance_name,host_name from v$instance;
查看数据库所有用户及用户状态:
SQL> select usernames,account_status from dba_users;
设置SID
$ export ORACLE_SID=hisvhfs
查看数据库DBID:
SQL>select * from v$DBID
2、查询、设置Oracle数据库实例最大进程数及最大会话数
查看系统最大session:
SQL>show parameter session
查看当前连接数:
SQL>select count(*) from v$bgprocess
查看系统最大进程数:
SQL>show parameter process
查看当前连接到数据库的用户:
SQL>select count(*) from v$session
查看当前数据库建立的会话情况:
SQL> select sid,serial#,username,program,machine,status from v$session;
查询应用的连接数SQL:
SQL> SELECT b.MACHINE, b.PROGRAM, 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
ORDER BY COUNT (*) DESC;
查看当前数据库的并发连接数
SQL> select count(*) from v$session where status='ACTIVE';
查看当前有哪些用户正在使用数据:
select osuser,a.username,cpu_time/executions/1000000||'s',sql_fulltext,machine
from v$session a,v$sqlarea b
where a.sql_address = b.address
order by cpu_time/executions desc;
查看数据库指定用户的连接情况
SQL> select sid,serial# from v$session where username='XX'; XX为用户
例如:
SQL> select sid,serial# from v$session where username='BSPDEV';
SID SERIAL#
---------- ----------
204 4609
399 5841
590 6041
清除用户下连接进程
SQL> alter system kill session '204,4609';
SQL> alter system kill session '399,5841';
SQL> alter system kill session '590,6041';
修改processes和sessions值
SQL> alter system set processes=300 scope=spfile;
系统已更改。
SQL> alter system set sessions=335 scope=spfile;
系统已更改。
修改processes和sessions值必须重启oracle服务器才能生效
ORACLE的连接数(sessions)与其参数文件中的进程数(process)有关,它们的关系如下:
sessions=(1.1*process+5)
3、查看数据库目录
SQL> select * from all_directories;
4、查看数据库现有模式、是否归档
SQl>select name,log_mode from v$database;
也可以用下面的语句
archive log list;(该方法需要as sysdba)
查看数据库的创建日期和归档方式
SQL> Select Created, Log_Mode, Log_Mode From V$Database;
5、配置用户密码过期时间
alter profile "default" limit password_life_time unlimited; 配置用户密码永不过期
alter profile "default" limit password_life_time 100; 配置用户密码100天过期
6、创建、配置新用户及查看用户属性
解锁新用户:
SQL> alter user scott account unlock;
SQL> alter user scott identified by tiger;
删除oracle用户:
SQL>drop user username cascade; (删除与用户相关的所有对象)
这样该用户包括该用户下的表,试图,同义词,过程,索引,及相关的一切就删除了。
创建用户并赋权限以及设置默认表空间。
以sysdba用户登陆进行以下设置:
-- Create the user
create user VHFSM
identified by vhnj1fsm
default tablespace MGRVHFSTBSDEF 此处是设置默认表空间。
temporary tablespace TEMP
profile DEFAULT
quota unlimited on mgrvhfstbs2010 此处是设置可操作的其他表空间
quota unlimited on mgrvhfstbsdef;
-- Grant/Revoke role privileges
grant connect to VHFSM;
grant dba to VHFSM;
-- Grant/Revoke system privileges
grant unlimited tablespace to VHFSM;
查看用户及角色权限
--1.查看所有用户:
select * from dba_users;
select * from all_users;
select * from user_users;
--2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限):
select * from dba_sys_privs;
select * from user_sys_privs;
--3.查看角色(只能查看登陆用户拥有的角色)所包含的权限
sql>select * from role_sys_privs;
--4.查看用户对象权限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
--5.查看所有角色:
select * from dba_roles;
--6.查看用户或角色所拥有的角色:
select * from dba_role_privs;
select * from user_role_privs;
--7.查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
select * from V$PWFILE_USERS
--注意:
--1、以下语句可以查看Oracle提供的系统权限
select name from sys.system_privilege_map
--2、查看一个用户的所有系统权限(包含角色的系统权限)
SELECT privilege
FROM dba_sys_privs
WHERE grantee = 'DATAUSER'
UNION
SELECT privilege
FROM dba_sys_privs
WHERE grantee IN (SELECT granted_role FROM dba_role_privs WHERE grantee = 'DATAUSER');
1、先查询空闲空间
select tablespace_name,file_id,block_id,bytes,blocks from dba_free_space;
2、增加Oracle表空间
先查询数据文件名称、大小和路径的信息,语句如下:
select tablespace_name,file_id,bytes,file_name from dba_data_files;
3、修改文件大小语句如下
alter database datafile
'需要增加的数据文件路径,即上面查询出来的路径
'resize 800M;
4、创建Oracle表空间
create tablespace test
datafile '/home/app/oracle/oradata/oracle8i/test01.dbf' size 8M
autoextend on
next 5M
maxsize 10M;
create tablespace sales
datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M
autoextend on
next 50M
maxsize unlimited
maxsize unlimited 是大小不受限制
create tablespace sales
datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M
autoextend on
next 50M
maxsize 1000M
extent management local uniform;
unform表示区的大小相同,默认为1M
create tablespace sales
datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M
autoextend on
next 50M
maxsize 1000M
extent management local uniform size 500K;
unform size 500K表示区的大小相同,为500K
create tablespace sales
datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M
autoextend on
next 50M
maxsize 1000M
extent management local autoallocate;
autoallocate表示区的大小由随表的大小自动动态改变,大表使用大区小表使用小区
create tablespace sales
datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M
autoextend on
next 50M
maxsize 1000M
temporary;
temporary创建字典管理临时表空间 ,要创建本地管理临时表空间要加temporary tablespace关键字
create temporary tablespace sales
tempfile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M
autoextend on
next 50M
maxsize 1000M
创建本地管理临时表空间,如果是临时表空间,所有语句中的datafile都换为tempfile ,所有语句中的datafile都换为tempfile8i
为表空间增加数据文件:
alter tablespace sales add
datafile '/home/app/oracle/oradata/oracle8i/sales02.dbf' size 800M
autoextend on next 50M
maxsize 1000M;
5、查看表空间是否自动扩展
SQL> select file_id,file_name,tablespace_name,autoextensible,increment_by from dba_data_files order by file_id desc;
更改自动扩展属性:
alter database datafile
'/home/app/oracle/oradata/oracle8i/sales01.dbf',
'/home/app/oracle/oradata/oracle8i/sales02.dbf'
'/home/app/oracle/oradata/oracle8i/sales01.dbf
autoextend off;
6、表空间的查看与修改
查看用户默认表空间
SQL> select username,default_tablespace from dba_users;查看所有用户的默认表空间
SQL> select username,default_tablespace from user_users;查看某个用户的默认表空间,前提需要connect该用户。
SQL> select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where username = 'hr'; 查看用户对应的默认表空间
修改用户默认表空间
SQL> alter user zhanghr default tablespace test;
设置数据库的默认临时表空间:
SQL>Alter database default temporary tablespace temp_tbs_name;
查看用户和默认表空间的关系:
SQL>select username,default_tablespace from dba_users;
查看临时表空间:
SQL> select file_name,file_id,blocks,user_blocks from dba_temp_files;
SQL> select tablespace_name,current_users,total_blocks,used_blocks,free_blocks from v$sort_segment;
查看undo表空间
SQL> show parameter undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
查看undo表空间大小
SQL> select sum(bytes)/1024/1024 "current undo size(M)" from dba_data_files where tablespace_name='UNDOTBS1';
通过增加数据文件来改变undo表空间大小
SQL> alter tablespace undotbs1
add datafile '/oracle/oradata/orc6/undo02.dbf' size 10M;
通过resize更改数据文件大小
SQL> alter database datafile '/oracle/oradata/orc6/undo02.dbf' resize 100M;
查看某个表空间的数据文件
SQL> select file_name,tablespace_name,bytes/1024/1024 "bytes MB",maxbytes/1024/1024 "maxbytes MB" from dba_data_files where tablespace_name='ORA1TBS';指定表空间名要大写
查看所有表空间大小
SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_data_files
group by tablespace_name;
查看已使用的表空间大小
SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_free_space
group by tablespace_name;
oracle查看表空间大小及使用率:
方法一:
SELECT UPPER(F.TABLESPACE_NAME),D.TOT_GROOTTE_MB,D.TOT_GROOTTE_MB,F.TOTAL_BYTES,TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2),'990.99'), F.TOTAL_BYTES, F.MAX_BYTES FROM (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F,(SELECT DD.TABLESPACE_NAME,ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME ORDER BY 4 DESC;
方法二:
SELECT D.TABLESPACE_NAME,
SPACE || 'M' "SUM_SPACE(M)",
BLOCKS "SUM_BLOCKS",
SPACE - NVL (FREE_SPACE, 0) || 'M' "USED_SPACE(M)",
ROUND ( (1 - NVL (FREE_SPACE, 0) / SPACE) * 100, 2) || '%'
"USED_RATE(%)",
FREE_SPACE || 'M' "FREE_SPACE(M)"
FROM ( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE,
SUM (BLOCKS) BLOCKS
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) D,
( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES) / (1024 * 1024), 2) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
UNION ALL
SELECT D.TABLESPACE_NAME,
SPACE || 'M' "SUM_SPACE(M)",
BLOCKS SUM_BLOCKS,
USED_SPACE || 'M' "USED_SPACE(M)",
ROUND (NVL (USED_SPACE, 0) / SPACE * 100, 2) || '%' "USED_RATE(%)",
NVL (FREE_SPACE, 0) || 'M' "FREE_SPACE(M)"
FROM ( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE,
SUM (BLOCKS) BLOCKS
FROM DBA_TEMP_FILES
GROUP BY TABLESPACE_NAME) D,
( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES_USED) / (1024 * 1024), 2) USED_SPACE,
ROUND (SUM (BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE
FROM V$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
ORDER BY 1;
方法三:
SELECT *
FROM (SELECT a.tablespace_name,
to_char(a.bytes / 1024 / 1024, '99,999.999') total_bytes,
to_char(b.bytes / 1024 / 1024, '99,999.999') free_bytes,
to_char(a.bytes / 1024 / 1024 - b.bytes / 1024 / 1024,
'99,999.999') use_bytes,
to_char((1 - b.bytes / a.bytes) * 100, '99.99') || '%' USE
FROM (SELECT tablespace_name, SUM(bytes) bytes
FROM dba_data_files
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) bytes
FROM dba_free_space
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
UNION ALL
SELECT c.tablespace_name,
to_char(c.bytes / 1024 / 1024, '99,999.999') total_bytes,
to_char((c.bytes - d.bytes_used) / 1024 / 1024, '99,999.999') free_bytes,
to_char(d.bytes_used / 1024 / 1024, '99,999.999') use_bytes,
to_char(d.bytes_used * 100 / c.bytes, '99.99') || '%' USE
FROM (SELECT tablespace_name, SUM(bytes) bytes
FROM dba_temp_files
GROUP BY tablespace_name) c,
(SELECT tablespace_name, SUM(bytes_cached) bytes_used
FROM v$temp_extent_pool
GROUP BY tablespace_name) d
WHERE c.tablespace_name = d.tablespace_name)
ORDER BY tablespace_name;
查看表空间使用大小情况一
SQL> select a.tablespace_name,a.bytes/1024/1024 "Sum MB",(a.bytes-b.bytes)/1024/1024 "used MB",
b.bytes/1024/1024 "free MB",round(((a.bytes-b.bytes)/a.bytes)*100,2) "percent_used"
from
(select tablespace_name,sum(bytes) bytes from dba_data_files group by tablespace_name) a,
(select tablespace_name,sum(bytes) bytes,max(bytes) largest from dba_free_space group by tablespace_name ) b
where a.tablespace_name=b.tablespace_name
order by ((a.bytes-b.bytes)/a.bytes) desc
;
TABLESPACE_NAME Sum MB used MB free MB percent_used
------------------------------ ---------- ---------- ---------- ------------
SYSAUX 490 461.0625 28.9375 94.09
UNDOTBS1 75 66.8125 8.1875 89.08
USERS 5 1.3125 3.6875 26.25
ORA1TBS 400 2 398 .5
ORA2TBS 400 2 398 .5
查看表空间使用大小情况二
SQL> select a.tablespace_name,total,free,total-free used from
2 ( 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; 3 4 5 6
TABLESPACE_NAME TOTAL FREE USED
------------------------------ ---------- ---------- ----------
USERS 5 .9375 4.0625
TESTTB 500 499 1
SYSAUX 550 30 520
EXAMPLE 100 20.75 79.25
UNDOTBS1 110 96.625 13.375
在SQL命令行情况下将结果输出到指定文件中。
SQL> spool out.txt
SQL> select * from v$database;
SQL> spool off
查看数据文件:
SQL> select name from v$datafile;
更改数据文件大小:
SQL> alter database datafile '/oradata2/hisvhfs/undotbs01.dbf' resize 30G;
查看用户所有表空间及对应的数据文件和数据文件大小
SQL> select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;
查看数据文件状态及大小
SQL> select name,BYTES,STATUS ,FILE# from v$datafile;
查看所有数据文件
SQL> select name from v$datafile;
查看所有表空间对应的数据文件
SQL> select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;
查看所有segment的大小。
Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name
查询表的大小和表空间的大小
有两种含义的表大小。一种是分配给一个表的物理空间数量,而不管空间是否被使用。可以这样查询获得字节数:
当前实例以scott用户登录,并创建dept表的副本dept_copy2为例。
SQL> select segment_name, bytes
2 from user_segments
3 where segment_type = 'TABLE';
SEGMENT_NAME BYTES
-------------------------------------------------------------------------------- ----------
DEPT_COPY2 65536
DEPT_COPY 65536
BIN$7Sa/taXJEKHgQ2kFqMCxMQ==$0 65536
ITEMS 65536
SALGRADE 65536
EMP 65536
DEPT 65536
7 rows selected
或者
SQL> Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name;
SEGMENT_NAME SUM(BYTES)/1024/1024
-------------------------------------------------------------------------------- --------------------
DEPT 0.0625
PK_DEPT 0.0625
EMP 0.0625
DEPT_COPY 0.0625
DEPT_COPY2 0.0625
ITEMS 0.0625
PK_EMP 0.0625
SALGRADE 0.0625
8 rows selected
另一种表实际使用的空间。这样查询:
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
DEPT
EMP
BONUS
SALGRADEanalyze table emp compute statistics;
ITEMS
DEPT_COPY
DEPT_COPY2
SQL> analyze table DEPT_COPY2 compute statistics;
查看某个表属于哪个表空间:
SQL> select tablespace_name from all_tables where table_name='SYS_EXPORT_FULL_01';
创建表时指定表空间:
SQL>create table a (name varchar(10)) tablespace test;
查看数据库表结构:
SQL> desc dept_copy2;
Name Type Nullable Default Comments
------ ------------ -------- ------- --------
DEPTNO NUMBER(2) Y
DNAME VARCHAR2(14) Y
LOC VARCHAR2(13) Y
修改表的列名:
SQL> alter table users rename column ID to PID;
修改表的列的字符大小
SQL> alter table student modify class varchar2(10);
创建主键:
SQL> alter table users add constraint pk_users primary key(name);
修改表的列数据类型:
SQL> select * from users;
NAME AGE PID
---------- ---------- ----------
SQL> alter table users add(newColumn varchar2(20));
SQL> update users set newColumn = PID;
SQL> commit;
SQL> alter table users drop column PID cascade constraints;
SQL> alter table users rename column newColumn to PID;
SQL> commit;
SQL> desc users;
名称 是否为空? 类型
----------------------------------------- -------- ---------
NAME NOT NULL VARCHAR2(10)
AGE NUMBER
PID VARCHAR2(20)
SQL> select * from users;
NAME AGE PID
---------- ---------- --------------------
创建序列:
SQL> create sequence seq_PID
start with 3201231988001010101
maxvalue 3201231999999999999
minvalue 3201231988001010101
nocycle
cache 100;
创建触发器:
SQL> create or replace trigger trigger_users
before insert on users
for each row
begin
select seq_PID.nextval into :new.PID from dual;
end;
/
查看用户序列
SQL> select sequence_name from USER_SEQUENCES;
SEQUENCE_NAME
------------------------------
SEQ_ID
查看用户触发器
SQL> select * from user_triggers where table_name = upper('job');
通过group by 语句使用rollup运算符汇总ID列
SQL> select ID,avg(age),sum(age),max(age),count(*)
2 from job group by rollup(ID);
ID AVG(AGE) SUM(AGE) MAX(AGE) COUNT(*)
---------- ---------- ---------- ---------- ----------
1583 25 25 25 1
1584 24 24 24 1
1585 25 25 25 1
1586 25 25 25 1
1587 23 23 23 1
1683 22 22 22 1
1684 24 24 24 1
1685 25 25 25 1
1686 24 24 24 1
1687 22 22 22 1
1688 28 28 28 1
ID AVG(AGE) SUM(AGE) MAX(AGE) COUNT(*)
---------- ---------- ---------- ---------- ----------
1689 26 26 26 1
1690 26 26 26 1
1783 35 35 35 1
1784 1
1883 24 24 24 1
1884 1
25.2 378 35 17
having子句与group by 子句一般一起使用,可以在汇总相关数据后进一步筛选汇总的数据。
SQL> select ID,avg(age),sum(age),max(age),count(*)
2 from job group by id having avg(age)>25;
ID AVG(AGE) SUM(AGE) MAX(AGE) COUNT(*)
---------- ---------- ---------- ---------- ----------
1690 26 26 26 1
1783 35 35 35 1
1689 26 26 26 1
1688 28 28 28 1
多表连接查询
SQL> select job.name,job.id,job.job,job.age,users.name,users.age from job,users
2 where job.name=users.name;
NAME ID JOB AGE NAME AGE
-------- ---------- ---------- ---------- ---------- ----------
desc 在oracle数据库里有两种用法,一是查询表的结构 格式:desc table_name
二是在用排序时(order by)是降序的关键字 格式 :order by column_name desc;
查看表的segment大小,即表实际占用的物理大小,无论是否使用。
SQL> select segment_name,partition_name,bytes,blocks,extents from user_segments where segment_name='JOBS'; (segment名,即表明)
SQL> select segment_name,partition_name,count(extent_id),sum(bytes),sum(blocks) from user_extents where segment_name='JOBS' group by segment_name,partition_name;
查看控制文件:
SQL> select name from v$controlfile;
查看重做日志文件,简称日志文件:
SQL> select * from v$logfile;
查看表的索引:
SQL>select index_name,index_type,table_name from user_indexes where table_name='表名';
修改oracle时间格式:
SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';
指定开启某个监听:
SQL>lsnrctl start orc5_lisenter(此处是当初建监听时创建的监听名)
数据库SCN及时间查询。
SQL> select sysdate from dual; 查看数据库时间
SYSDATE
-----------------
20131216 23:52:55
SQL> select dbms_flashback.get_system_change_number from dual; 查看当前数据库的SCN号
GET_SYSTEM_CHANGE_NUMBER
------------------------
1583042
SQL> select to_char(scn_to_timestamp(1583042),'yyyy-mm-dd hh24:mi:ss') from dual; 根据数据库的SCN号查找对应的数据库时间
TO_CHAR(SCN_TO_TIME
-------------------
2013-12-16 23:45:38
SQL> select timestamp_to_scn(to_date('2013-12-16 15:30:19','yyyy-mm-dd hh24:mi:ss')) from dual; 根据数据库的时间查找对应的数据库SCN号
TIMESTAMP_TO_SCN(TO_DATE('2013-12-1615:30:19','YYYY-MM-DDHH24:MI:SS'))
----------------------------------------------------------------------
1519388
SQL> select * from (select time_dp,scn from smon_scn_time order by time_dp desc) where rownum<10; 条件查找,查找rownum小于10的SCN以对应的时间。
TIME_DP SCN
----------------- ----------
20131216 15:53:02 1584574
20131216 15:46:45 1583098
20131216 15:45:20 1583022
20131216 15:39:08 1582399
20131216 15:37:01 1581998
20131216 15:31:08 1579915
20131216 14:46:02 1577210
20131216 14:40:16 1576196
20131216 14:35:12 1575597
9 rows selected.
数据库游标设置
SQL> show parameter open_cursors; 查看游标参数
SQL> select count(*) from v$open_cursor; 查看打开的游标
SQL> select name,value from v$sysstat where name ='opened cursors current';查看当前打开的游标
SQL> alter system set open_cursors=3000 scope=both; 修改默认游标数
创建日志文件组:
SQL> alter database add logfile group 4
(
'/oracle/oradata/orc6/redo04.log'
)
size 10M;
查看日志文件组
SQL> select group#,status,member from v$logfile;
为日志文件组增加日志文件:
SQL> alter database add logfile member '/oracle/oradata/orc6/redo05.log' to group 3;
查看日志文件大小
SQL> select GROUP#,BYTES,BLOCKSIZE,MEMBERS from v$log;
SQL> desc dba_temp_files; 查询临时表空间
SQL> desc v$database; 查看数据库
SQL> desc dba_data_files; 查看数据文件
SQL> desc user_segments; 查看oracle segment(段)
SQL> desc dba_segments; 查看ORACLE segment
SQL> desc dba_tables; 查看表
SQL> desc dba_objects 查看对象
SQL> desc dba_users; 查看用户
SQL> desc dba_tablespaces; 查看表空间
SQL> desc user_segments; 查看数据段
SQL> desc dba_jobs; 查看job
SQL> desc dba_role_privs; 查看角色权限
SQL> desc dba_constraints 查看约束
SQL> desc dba_cons_columns 查看列约束
SQL> show parameter log_archive_dest; 查看archive log所在位置
SQL> archive log list; 查看归档目录以及log sequence
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE; 查看flash_recovery_area 使用情况。
SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage; 计算flash_recovery_area已经占用的空间。
SQL> show parameter recover; 查找recovery目录
SQL> desc v$process 通过v$process视图,我们获的是当前系统中所有进程信息,包括“后台进程”,也包括“服务器进程”。
SQL> select addr, program from v$process;
SQL> desc v$bgprocess 通过v$bgprocess视图,我们获得当前系统中启动的Oracle“后台进程”信息
SQL> select paddr, name from v$bgprocess where paddr<>'00';
通过v$bgprocess.paddr与v$process.addr关联起来的,关联后查询结果显而易见只会有Oracle“后台进程”的信息
SQL> select a.paddr, a.name, a.description from v$bgprocess a, v$process b where a.paddr=b.addr;
SQL> desc v$asm_disk;
SQL> desc v$asm_diskgroup;
1、set
set wrap on/off 查询返回的纪录每行超过默认宽度时,可选择换行(on )或不换行(off),默认为换行;
set linesize N 设置查询返回的纪录每行的宽度,超过这个宽度则截掉,不过这个宽度则补空格
。
SQL> startup
11停止数据库
SQL> shutdown
SQL> select * from v$version;
SQL> select name from v$database;
SQL> select * from all_users;
SELECT t.tablespace_name FROM dba_tablespaces t;
SQL> DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;
SQL> select count(*) from v$session where status='ACTIVE';
SQL> select * from v$sga;
19查看实时连接数
SQL> select count(*) from v$session;
20查看pfile文件位置
SQL> show parameter pfile;
监听器lsnrctl:提供数据库访问,默认端口1521
为了使客户端用户能连接到Oracle实例,要启动监听
1. 启动监听
启动(START)监听是Oracle用户在操作系统下执行的命令,可以直接在LSNRCTL后加参数,也可以在该命令提示符后在进行操作。
2.关闭监听
注意:先启动监听,后启动数据库。
三、表空间
1. 创建表空间
参数解释:
tablespacename:表空间名称
DATAFILE:指定组成表空间的一个或多个数据文件,当有多个数据文件时使用逗号分隔
filename:表空间中数据文件的路径和名称
SIZE:指定文件的大小,用K指定千字节大小,用M指定兆字节大小
AUTOEXTEND:用来启用或禁用数据文件的自动扩展
举例:
2. 表空间的管理
(1)调整表空间的大小。当表空间已满的情况下,可以通过ALTER语句来调整表空间的大小。
方法一:更改数据文件的大小,并指明数据文件的存放路径,通过使用RESIZE关键字,用于指定调整后的表空间的大小
方法二:向表空间内添加数据文件。为表空间添加一个新的数据文件
(2)改变表空间的读写状态
ALTER TABLESPACE 表空间名 READ WRITE ; --使表空间可读写
ALTER TABLESPACE 表空间名 READ ONLY ; --使表空间只读
(3)删除表空间,可以通过DROP语句来删除表空间,再加上表空间的名字即可。
DROP TABLESPACE 表空间名 [INCLUDING CONTENTS] ;
其中INCLUDING CONTENTS是可选项。如果删除仍包含数据的表空间,需要加上该选项。
四、用户管理
1. 创建用户
举例:
2. 修改用户的密码
ALTER USER 用户名 IDENTIFIED BY 密码 ;
3. 删除用户
使用DROP USER命令可以删除用户,当用户拥有模式对象时则无法删除用户,而必须使用CASCADE选项以删除用户及用户模式对象。
DROP USER 用户名 CASCADE;
创建用户前的准备工作:
选择用户名和密码
识别用户需用于存储对象的表空间
决定每个表空间的限额
分配缺省表空间和临时表空间
创建用户
向用户授予权限和角色
五、数据库权限管理
1. 系统权限
系统权限是指在数据库中执行某种系统级别的操作,或者针对某一类对象执行某种操作的权利
常用的系统权限如下:
CREATE SESSION:连接到数据库
CREATE TABLE:创建表
CREATE VIEW:创建视图
CREATE SEQUENCE:创建序列
2. 对象权限
对象权限是指针对某个特定模式对象执行操作的权利,只能针对模式对象来设置管理对象权限,包括:表、视图、序列、存储过程等。
Oracle数据用户有两种途径获得权限:
(1)直接向用户授予权限
(2)将权限授予给角色,再将角色授予给一个或多个用户。使用角色能够更加方便和高效地对权限进行管理,所以数据库管理员通常使用角色向用户授予权限,而不是直接向用户授予权限。
Oracle中常用系统预定义角色如下:
(1)CONNECT:拥有连接数据库的权限
(2)RESOURCE:拥有创建表、触发器、过程等权限
(3)DBA:数据库管理员角色,拥有管理数据库的最高权限
3. 新建的用户必须授予一定的权限才能进行相关数据库操作。
授权通过GRANT语句,取消授权则通过REVOKE语句。
授予权限语法格式如下:
GRANT 权限 | 角色 TO 用户名;
撤销权限语法格式如下:
REVOKE 权限 | 角色 FROM 用户名;
六、事务控制
COMMIT:提交事务,即把事务中对数据库的修改进行永久保存。
ROLLBACK:回滚事务,即取消对数据库所做的任何修改
自动提交:set autocommit on
关闭自动提交:set autocommit off
七、索引
索引是oracle的一个对象,是与表关联的可选结构,提供了一种快速访问数据的途径,提高了数据库检索性能。索引使数据库程序无需对整个表进行扫描,就可以在其中找到所需要的数据。就像书的目录,可以通过目录快速查找所需信息,无需阅读整本书。
1、索引的特点
适当地使用索引可以提高查询速度
可以对表的一列或多列建立索引
建立索引的数量没有限制
索引需要磁盘存储,可以指定表空间,由oracle自动维护
索引对用户透明,检索时是否使用索引由oracle自身决定
Oracle数据库管理系统在访问数据时使用以下三种方式:
当没有索引或者不选择使用索引时就用全表扫描的方式
2.索引的分类
(1)创建普通索引(B树索引)
参数解释:
index_name:创建索引的名称
tablename:为之创建索引的表名
columnname:在其上创建索引的列名列表,可以基于多列创建索引,列之间用逗号分隔
tablespace:为索引指定表空间
(2)创建唯一索引
保证定义索引的列中没有任何两行有重复值。唯一索引中的索引关键字只能指向表中的一行。
(3)创建反向键索引
与常规B树索引相反,反向键索引在保持列顺序的同时反转索引列的字节。反向键索引通过反转索引键的数据值,使得索引的修改平均分布到整个索引树上。主要应用于所多个实例同时访问一个数据库的场景中。
(4)创建位图索引
优点:相对于B树索引而言,基于位图索引列的查询可以减少响应时间。
相比其他索引技术,位图索引占用空间明显减少。
(5)其他索引
组合索引:在表内多列上创建。索引中的列不必与表中的列顺序一致,也不必相互邻接。
基于函数的索引:需要创建的索引需要使用表中一列或多列的函数或表达式,也可以将基于函数的索引创建为B树索引或位图索引
3. 创建索引的原则
频繁搜索的列可以作为索引列
经常排序,分组的列可以作为索引
经常用作连接的列(主键/外键)可以作为索引
将索引放在一个单独的表空间中,不要放在有回退段、临时段和表的表空间中
对于大型索引而言,考虑使用NOLOGIN子句创建大型索引。
根据业务数据发生频率,定期重新生成或重新组织索引,进行碎片整理
4. 查看索引
和索引有关的数据字典:
USER_INDEXS:用户创建的索引信息
USER_IND_COLUMNS:与索引相关的表列信息
5. 维护索引
(1)重建索引
索引需要维护,如果建立了索引的表中有大量的删除和插入操作,会使得索引很大,因为删除操作后,删除值的索引空间不能被自动重新使用,对于大表和DML操作很频繁的表,索引的维护是很重要的。Oracle提供了rebuild指令来重建索引。使索引空间可以重用删除值所占用的空间,使索引更加紧凑。
(2)合并索引碎片
合并索引碎片可以释放部分磁盘空间,是索引维护的一种重要方式,也是维护磁盘空间的方式,类似于磁盘碎片整理,把不用的空间释放出来再利用。
(3)重命名索引
(4)删除索引
八、视图
视图是一个虚表,不占用物理空间,因为视图本身的定义语句存储在数据字典里,视图中的数据是一个或多个实际表中获得的。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。
1. 视图的优点:
OR REPLACE:如果视图已存在,此选项将重新创建该视图。
FORCE:如果使用此关键字,则无论基表是否存在,都将创建视图。
NOFORCE:这是默认值,如果使用此关键字,则仅当基表存在时才创建视图。
VIEW_NAME:要创建视图的名称
Alias:指定由视图的查询所选择的表达式或列的别名。别名的数目必须与视图所选择的表达式的数目相匹配。
Select_statement:select语句
WITH CHECK OPTION :此选项指定只能插入或更新视图可以访问的行。术语constraint表示为CHECK OPTION约束指定的名称。
WITH READ ONLY:此选项保证不能在此视图上执行任何修改操作。
3. DML语句和复杂视图
DML语句是指用于修改数据的insert、delete和update语句。因为视图是一个虚拟的表,所以这些语句也可以与视图一同使用。一般情况下不通过视图修改数据,而是直接修改基表,因为这样条例更清晰。
在视图上使用DML语句有如下限制(相对于表)。
1)DML语句只能修改视图中的一个基表。
2)如果过记录的修改违反了基表的约束条件,则将无法更新视图。
3)如果创建的视图包含连接运算符,DISTINCT运算符、集合运算符、聚合函数和groupby子句,则将无法更新视图。
4)如果创建的视图包含伪列表达式,则将无法更新视图。
简单视图基于单个基表,不包括函数和分组函数,那么可以在此视图中进行insert、update、delete操作,这些操作实际上在基表中插入、更新和删除行。
复杂视图从多个表提取数据,包括函数分组函数。复杂视图不一定能进行DML操作。
4. 查询视图
select view_name from user_views;
5. 删除视图
drop view view_name;
6. 物化视图
含义:就是具有物理存储的特殊视图,占据物理空间,就像表一样
是远程数据的本地副本,或者用来生成基于数据表求和的汇总表
物化视图中两个重要概念:查询重写和物化视图同步
(1)查询重写:对sql语句进行重写,当用户使用sql语句对基表进行查询时,如果已经建立了基于这些表的物化视图,oracle将自动计算和使用物化视图来完成查询,在某些情况下可以节约查询时间,减少系统i/o。Oracle将这种查询优化技术成为查询重写。参数QUERY_REWRITE_ENABLED决定是否使用重写查询,该参数为布尔型。在创建物化视图需要用ENABLE_QUERY REWRITE来启动查询重写功能。通过SHOW指令可以查看该参数的值。
(2)物化视图的同步:
物化视图是基于表创建的,所以当基表变化时,需要同步数据以更新物化视图中的数据,这样保持物化视图中的数据和基表的数据一致性。Oracle提供了两种物化视图的刷新方式,决定何时进行刷新,即ON COMMIT方式和ON DEMAND方式。
ON COMMIT方式:指物化视图在对基表的DML操作事务提交的同时进行刷新。
ON DEMAND方式:指物化视图在用户需要的时候进行更新,可以手工通过DBMS_MVIEW.REFRESH等方式来进行刷新,也可以通过JOB定时进行刷新。
选择刷新方式之后,还需要选择一种刷新类型,刷新类型指定刷新时基表与物化视图如何实现数据的同步,oracle提供了以下4种刷新类型。
COMPLETE:对整个物化视图进行完全的刷新。
FAST:采用增量刷新,只刷新自上次刷新后进行的修改。
FORCE:oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE方式。
NEVER:物化视图不进行任何刷新。
默认值是FORCE刷新类型。
创建物化视图
(1)授予权限,具备创建物化视图的权限、QUERY REWRITE的权限,以及对创建物化视图所涉及的表的访问权限和创建表的权限。
通过SCOTT用户来演示
(2)创建物化视图日志
(3)创建物化视图语句
其中:
bulid immediate:该参数的含义是立即创建物化视图,也可以选择build deffered,该参数说明在物化视图定以后不会立即执行,而是延迟执行,在使用该视图时再创建。
Reffesh fast:刷新数据的类型选择FAST类型。
ON COMMIT:在基表有更新时提交后立即更新物化视图。
ENABLE QUERY REWRITE:启动查询重写功能。在创建物化视图时明确说明启用查询重写功能。
As:定义后面的查询语句。
查询体:物化视图的查询内容,该sql语句的查询结果集输出到物化视图中,保存在由oracle自动创建的表中。
(4)删除物化视图
drop materialized view view_name;
九、序列
序列是用来生成唯一、连续的整数数据库对象。序列通常用来自动生成主键或唯一键的值。序列可以按升序排列,也可以按降序排列。
1. 创建序列
参数解释:
2. 访问序列
创建了序列之后,可以通过NEXTVAL和CURRVAL伪列来访问该序列的值。可以从伪列中选择值。但是不能操纵他们的值。
NETXVAL:创建序列后第一次使用NEXTVAL时,将返回该序列的初始值。以后再引用NETXVAL时,将使用INCREMENT BY子句的值来增加序列值,并返回这个新值。
CURRVAL:返回序列的当前值,即最后一次引用NEXTVAL时返回的值
举例:
创建序列
创建表
插入数据
查看数据
查看序列的当前值
Currval返回序列的当前值,即最后一次引用NEXTVAL时返回的值
测试currval
3. 更改序列
Alter sequence命令用于修改序列的定义。如果要进行下列操作,则会修改序列。
设置或删除MINVALUE或MAXVALUE
修改增量值
修改缓存中的序列号的数目
不能修改序列的START WITH参数
CREATE DATABASE LINK 数据库链接名 CONNECT TO user名 IDENTIFIED BY 口令 USING ‘Oracle链接串’;
语法:
CREATE [OR REPLACE] SYNONYM [schema.]synonym_name FOR [schema.]object_name ;
参数解释:
[OR REPLACE]:在同义词存在的情况下替换该同义词
synonym_name:要创建同义词的名称
object_name:指定要为之创建同义词的对象的名称
(2)共有同义词
公有同义词被所有的数据库访问。公有同义词可以隐藏基表的身份,并降低sql语句的复杂性。要创建公有公有同义词,用户必须拥有create public SYNOYM的系统权限。
语法:
CREATE [OR REPLACE] PUBLIC SYNONYM [schema.]synonym_name FOR [schema.]object_name ;
DROP [PUBLIC] SYNONYM [schema.]synonym_name;
2)表更容易管理。因为分区表的数据存储在多个部分中,按分区加载和删除数据比在表中加载和删除更容易。
3)便于备份和恢复。可以独立地备份和恢复每个分区。
4)提高数据安全性。将不同的分区分布在不同的磁盘,可以减少所有分区的数据同时损坏的可能性。
符合一下条件的表可以建成分区表:
1)数据量大于2GB。
2)已有的数据和新添加的数据有明显的界限划分。
表分区对用户是透明的,及应用程序可以不知道表已被分区,在更新和查询分区表时当做普通表来操作,但oracle优化程序知道表已被分区。
2. 分区表的分类
Oracle提供的分区方法有范围分区、列表分区、散列分区、复合分区、间隔分区和虚拟列分区等。
3. 举例
(1)创建表并且分区,以age分区
(2)向表中插入数据
(3)查询P100分区的数据
查询P200分区的数据
(4)如果向表中插入以下记录,会提示插入的分区关键字未映射到任何分区
(5)按范围分区是,如果某些记录暂时无法预测范围,可以创建maxvalue分区,所有不在指定范围内的记录都会被存储到maxvalue所在的分区中
(6)再次插入以下数据
(7)查询
(8)查看所有分区的命令
一般创建范围分区时都会将最后一个分区设置为maxvalue,将其他数据落入此分区,一旦需要时可以利用拆分分区的技术将需要的数据从最后一个分区分离出入,单独形成一个分区,如果没有创建最大的分区,插入的数据查出范围就会报错。如果插入的数据是分区键上的值,则该数据落入下一个分区。
创建表空间
create tablespace TailThermalImaging datafile 'F:\hzy\oracle\data\data_1.dbf' size 2000M;
给该表空间创建用户
create user tf_hzy2020 identified by calcular default tablespace TailThermalImaging;
给用户授权
grant connect,resource to tf_hzy2020;
grant dba to tf_hzy2020;
查看表空间是否开启了自动扩展的功能 :
SELECT T.TABLESPACE_NAME,
D.FILE_NAME,
D.AUTOEXTENSIBLE,
D.BYTES,
D.MAXBYTES,
D.STATUS
FROM DBA_TABLESPACES T, DBA_DATA_FILES D
WHERE T.TABLESPACE_NAME = D.TABLESPACE_NAME
ORDER BY TABLESPACE_NAME, FILE_NAME;
开启/关闭表空间自动扩展:
alter database datafile '对应的数据文件路径信息' autoextend on;(开启)
alter database datafile '对应的数据文件路径信息' autoextend off;(关闭)
关闭“180”天密码过期
1.)查看用户的proifle是哪个,一般是default:
SELECT username,PROFILE FROM dba_users;
2.)查看指定概要文件(如default)的密码有效期设置:
SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
3.)将密码有效期由默认的180天修改成“无限制”:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
修改之后不需要重启动数据库,会立即生效。
一、Oracle忘记用户名和密码
1、打开命令提示符,输入命令sqlplus ,进入oracle控制台
2、用户名输入 sqlplus/as sysdba,口令:空(回车即可)
3、连接成功后,输入“select username from dba_users”查看用户列表
4、若修改某一个用户密码, 修改用户口令 格式为(注意后面的分号;):
alter user 用户名 identified by 新密码;
以system 为例,密码修改为 123456. 可输入
alter user system identified by 123456;
二、Oracle 用户解锁
SQL> ALTER USER 用户名 ACCOUNT UNLOCK;
三、Oracle修改用户密码
SQL> ALTER USER 用户名 IDENTIFIED BY 密码;
四、SQL查询~ 存在一个表而不在另一个表中的数据
A、B两表,找出ID字段中,存在A表,但是不存在B表的数据。
1、select distinct A.ID from A where A.ID not in (select ID from B)
2、使用 left join…on… , “B.ID is null” 表示左连接之后在B.ID 字段为 null的记录
Select A.ID from A left join B on A.ID=B.ID where B.ID is null
参考链接
linux下重启oracle服务步骤
https://mp.weixin.qq.com/s/U9iNOxnEkndjQglFy30EyQ
Linux环境下Oracle数据库常用命令 :https://mp.weixin.qq.com/s?__biz=MzAwMjg1NjY3Nw==&mid=2247487336&idx=1&sn=7f9956a69e1a415e461e56042d0403bf&source=41#wechat_redirect
Oracle 常用的十一大操作指令 :https://mp.weixin.qq.com/s/7gMB4Ywx4TZ6iEHELVKuLA
https://www.jianshu.com/p/d19361a516d5
ORACLE忘记用户名和密码、解锁、查询 :
https://mp.weixin.qq.com/s/MPLTCg0eKLHdJS1WLFlFFg