Oracle数据库维护文档
1.Oracle死锁
--1.1.查出已死锁定表的sid, serial#,os_user_name, machine_name, terminal,锁的type,mode
SELECT SESS.SID, SESS.SERIAL#, LO.ORACLE_USERNAME, LO.OS_USER_NAME, AO.OBJECT_NAME, LO.LOCKED_MODE ,SESS.SQL_EXEC_START ,sess.LOGON_TIME FROM V$LOCKED_OBJECT LO, DBA_OBJECTS AO, V$SESSION SESS WHERE AO.OBJECT_ID = LO.OBJECT_ID AND LO.SESSION_ID = SESS.SID;
--1.2.查看什么语句导致锁表
select l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#, l.os_user_name, s.machine, s.terminal, a.sql_text, a.action from v$sqlarea a, v$session s, v$locked_object l where l.session_id = s.sid and s.prev_sql_addr = a.address order by sid, s.serial#;
--1.3.杀掉进程 sid,serial#
alter system kill session '210,11562'; --210,11562需替换
2.增加表空间
--增加表空间的数据文件
ALTER TABLESPACE LINKMES_DGGF_DEFAULT_DATA ADD DATAFILE '+DATA/gfmes/datafile/linkmes_dggf_default_data.2020092901' SIZE 30G;
/*增加数据文件,自动扩展 */
ALTER TABLESPACE LINKMES_XYGFDZ_DEFAULT_DATA ADD DATAFILE 'D:\app\admin\oradata\GFDZDATA\linkmes_xygfdz_default_data02.dbf' size 2048M autoextend on next 100M maxsize UNLIMITED;
3.查看Oracle日记
--6.查询归档日志的信息: select recid,stamp,thread#,sequence#,name from v$archived_log;
--2.查看在线日志组的位置 select MEMBER from v$logfile;
4.恢复删除表
--查看oracle删除记录
select * from user_recyclebin;
查看oracle是否开启闪回功能,FLASHBACK_ON为NO,则表示闪回特性尚未启用
select log_mode,open_mode,flashback_on from v$database;
--1、根据表名恢复表信息
flashback table 表名 to before drop;
--2、根据表名重命名表信息
flashback table 表名 to before drop rename to new_table_name;
--3、利用flashback table恢复表到过去某一时刻
alter table tab_test enable row movement; flashback table tab_test to timestamp ('20140917 10:00:00','yyyymmdd hh24:mi:ss'); alter table tab_test disable row movement;
5.新建Oracle数据库
/*分为四步 */ /*第1步:创建临时表空间 */
create temporary tablespace mes_temp tempfile 'D:\app\admin\oradata\GFDZDATA\MES_TEMP.DBF' size 1024M autoextend on next 64M maxsize UNLIMITED extent management local; /*第2步:创建数据表空间 */
create tablespace LINKMES_XYGFDZ_DEFAULT_DATA datafile 'D:\app\admin\oradata\GFDZDATA\linkmes_xygfdz_default_data01.dbf' size 2048M autoextend on next 100M maxsize UNLIMITED extent management LOCAL segment space management AUTO;
/*创建数据索引表空间 */
create tablespace LINKMES_XYGFDZ_INDEX datafile 'D:\app\admin\oradata\GFDZDATA\linkmes_xygfdz_index.dbf' size 2048M autoextend on next 100M maxsize UNLIMITED extent management LOCAL segment space management AUTO;
/*第3步:创建用户并指定表空间 */
create user XYGFDZ_USER identified by XYGFDZ_USER default tablespace LINKMES_XYGFDZ_DEFAULT_DATA temporary tablespace temp;
/*第4步:给用户授予权限,给用户授予 conect,resource 权限*/
grant connect,resource,dba to XYGFDZ_USER;
6.备份Oracle数据库
7.重启数据库
shutdown immediate;
startup;
8.查看Oracle数据库连接数
select count(*) from v$process --当前的连接数
select value from v$parameter where name = 'processes' --数据库允许的最大连接数
修改最大连接数:
alter system set processes = 300 scope = spfile;
查询oracle的并发连接数
select count(*) from v$session where status='ACTIVE';
9.Oracle常规Sql语句操作
创建表:
create table 表名 (
字段名1 字段类型 默认值 是否为空 ,
字段名2 字段类型 默认值 是否为空,
字段名3 字段类型 默认值 是否为空,
......
);
创建一个user表:
create table user (
id number(6) primary key, ---主键
name varchar(50) not null, ---姓名 不为null
sex varchar2(6) default '男' check ( sex in ('男','女')) ---性别 默认'男'
);
修改表名:
rename 旧表名 to 新表名;
rename user to newuser;
删除表:
delete from 表名;
delete删除数据是一条一条的删除数据,后面可以添加where条件,不删除表结构。注意:如果表中有identity产生的自增id列,delete from后仍然从上次的数开始增加。
truncate table 表名;
truncate是一次性删掉所有数据,不删除表结构。注意:如果表中有identity产生的自增id列,truncate后,会恢复初始值。
drop table 表名;
drop删除所有数据,会删除表结构。
修改表:
添加新字段:
alter table 表名 add(字段名 字段类型 默认值 是否为空);
alter table user add(age number(6));
alter table user add (course varchar2(30) default '空' not null);
修改字段:
alter table 表名 modify (字段名 字段类型 默认值 是否为空);
alter table user modify((age number(8));
修改字段名:
alter table 表名 rename column 列名 to 新列名;
alter table user rename column course to newcourse;
删除字段:
alter table 表名 drop column 字段名;
alter table user drop column course;