数据库维护工作指南
2011-04-04 13:34
211 查看
数据库维护工作指南
(
image_id NUMBER(16) NOT NULL,
suffix VARCHAR2(4) NOT NULL,
scenario CHAR(1) DEFAULT 0 NOT NULL,
creater NUMBER(16) NOT NULL,
create_time DATE NOT NULL,
CONSTRAINT pk_image
PRIMARY KEY (image_id) USING INDEX TABLESPACE CATIDX,
CONSTRAINT fk_image_creater
FOREIGN KEY (creater) REFERENCES tb_user(user_id)
) TABLESPACE CAT;
1) 如果字段名为关键字,则加双引号,例如:"option"
2) 如果创建Unique,在外键声明下加上如下语句:CONSTRAINT UC_tb_visitor UNIQUE (mail) USING INDEX TABLESPACE ADMIDX
3) PK,FK,Unique命名请保持统一
CREATE PUBLIC SYNONYM tb_acc_account FOR tb_acc_account;
2)给sequence创建同义词
CREATE PUBLIC SYNONYM seq_acc_journal FOR seq_acc_journal;
3)给table授权(根据相应的需求授予SELECT, INSERT, DELETE, UPDATE权限)
GRANT SELECT, INSERT, DELETE, UPDATE ON tb_activation_link TO om_app_role;
4)给sequence授权
GRANT SELECT ON seq_acc_journal TO om_app_role;
ALTER TABLE tb_user ADD test_field2 CLOB DEFAULT 'NA' NOT NULL;
UPDATE tb_user SET test_field2=test_field;
COMMIT;
ALTER TABLE tb_user DROP COLUMN test_field;
ALTER TABLE tb_user RENAME COLUMN test_field2 TO test_field;
2)ALTER TABLE tb_acc_journal ADD CONSTRAINT FK_tb_acc_journal_account FOREIGN KEY (account_id) REFERENCES tb_acc_account (acc_account_id);
3)ALTER TABLE tb_item_category ADD CONSTRAINT UK_item_category_level_name UNIQUE(parent_cat_id,cat_name) USING INDEX TABLESPACE ADMIDX;
2)ALTER TABLE tb_acc_journal DROP CONSTRAINT FK_tb_acc_journal_account;
3)ALTER TABLE tb_item_category DROP CONSTRAINT UK_item_category_level_name;
CREATE OR REPLACE PROCEDURE bt_deal_promotion_visitor AS
BEGIN
update tb_visitor tv set tv.receive_mail_setting=bitor(tv.receive_mail_setting,1) where tv.mail in (select t.mail as email from tb_visitor t where t.status=1 and t.subscribe_sts!=9 and bitand(t.receive_mail_setting,1)=0
minus
select distinct substr(REGEXP_SUBSTR(t.referrer,'mail=[^&]+'),6) from tb_http_access_log t where t.url = '/unsubscribe/save' and t.referrer like '%/unsubscribe%' and (t.query_string is null or t.query_string like '%mailType=1%') and NOT REGEXP_LIKE(user_agent,
'(bot|scan|slurp|spider|craw)', 'i') and (ip <> '211.144.118.170' and ip <> '202.74.178.140' and ip <> '202.74.178.141'));
COMMIT;
END bt_deal_promotion_visitor;
/
var job NUMBER
begin
dbms_job.submit(:job,
'bt_deal_promotion_visitor;',
next_day(trunc(sysdate)+22/24,'SATURDAY'),
'trunc(sysdate+30)');
commit;
end;
/
2)查看
SQL> column log_user format a20
SQL> column WHAT format a50
SQL> column INTERVAL format a40
SQL> select job,log_user,what,next_date,next_sec,interval from user_jobs;
JOB LOG_USER WHAT NEXT_DATE NEXT_SEC INTERVAL
---------- ------------------------------ ------------------------------ --------- -------------------------------- --------------------
103 OM_SUPERVISOR bt_deal_promotion_visitor; 10/JUL/10 22:00:00 trunc(sysdate+30)
3)删除
begin
dbms_job.remove(103);
commit;
end;
/
drop procedure bt_deal_promotion_visitor;
4)暂停Job
begin
sys.dbms_job.broken(job => 103,
broken => true);
commit;
end;
/
alter table tablename move tablespace tabelspacename;
2)查看表空间的物理位置及具体参数
select * from dba_data_files where TABLESPACE_NAME='DEAL';
3)查看所有表空间的参数
select * from dba_tablespaces;
4) 查看表空间的空闲空间大小
select a.tablespace_name,b.file_name,sum(a.bytes) freespace,count(*) extcnt,b.bytes,max(a.bytes) largest,min(a.bytes) smallest
from dba_free_space a,dba_data_files b where a.tablespace_name=b.tablespace_name and a.file_id=b.file_id group by a.tablespace_name,b.file_name,b.bytes;
5) ORACLE中表、索引的表空间的批量更改方法
a. 查询当前用户下的所有表
select 'alter table '|| table_name ||' move tablespace
tablespacename;' from user_all_tables;
b. 查询当前用户下的所有索引
select 'alter index '|| index_name ||' rebuild tablespace
tablespacename;' from user_indexes;
c. 在当前用户下将查询结果批处理执行即可!
v$sqlarea,v$sql
-----------------------
从V$SQLAREA中查询最占用资源的查询
select b.username username,a.disk_reads reads,
a.executions exec,a.disk_reads/decode(a.executions,0,1,a.executions) rds_exec_ratio,
a.sql_text Statement
from v$sqlarea a,dba_users b
where a.parsing_user_id=b.user_id
and a.disk_reads > 100000
order by a.disk_reads desc;
用buffer_gets列来替换disk_reads列可以得到占用最多内存的sql语句的相关信息。
V$SQL是内存共享SQL区域中已经解析的SQL语句。
列出使用频率最高的5个查询:
select sql_text,executions
from (select sql_text,executions,
rank() over
(order by executions desc) exec_rank
from v$sql)
where exec_rank <=5;
消耗磁盘读取最多的sql top5:
select disk_reads,sql_text
from (select sql_text,disk_reads,
dense_rank() over
(order by disk_reads desc) disk_reads_rank
from v$sql)
where disk_reads_rank <=5;
找出需要大量缓冲读取(逻辑读)操作的查询:
select buffer_gets,sql_text
from (select sql_text,buffer_gets,
dense_rank() over
(order by buffer_gets desc) buffer_gets_rank
from v$sql)
where buffer_gets_rank<=5;
SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name,
s.LOCKWAIT,s.status,s.machine,s.terminal,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
FROM v$locked_object l,dba_objects o,v$session s
WHERE l.object_id=o.object_id AND lower(object_name)='tb_offer'
AND l.session_id=s.sid
ORDER BY o.object_id,xidusn DESC;
如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待
以上的语句可以查询到谁锁了表,而谁在等待。
以上查询结果是一个树状结构,如果有子节点,则表示有等待发生。
如果想知道锁用了哪个回滚段,还可以关联到V$rollname,其中xidusn就是回滚段的USN
找出谁锁定的记录,kill掉就行了。
alter system kill session '133,3506'; (其中133是SID,3506是SERIAL#)
--以下几个为相关表
SELECT * FROM v$lock;
SELECT * FROM v$sqlarea;
SELECT * FROM v$session;
SELECT * FROM v$process ;
SELECT * FROM v$locked_object;
SELECT * FROM all_objects;
SELECT * FROM v$session_wait;
1、创建新表流程
1.1 建表语句
CREATE TABLE tb_image(
image_id NUMBER(16) NOT NULL,
suffix VARCHAR2(4) NOT NULL,
scenario CHAR(1) DEFAULT 0 NOT NULL,
creater NUMBER(16) NOT NULL,
create_time DATE NOT NULL,
CONSTRAINT pk_image
PRIMARY KEY (image_id) USING INDEX TABLESPACE CATIDX,
CONSTRAINT fk_image_creater
FOREIGN KEY (creater) REFERENCES tb_user(user_id)
) TABLESPACE CAT;
1) 如果字段名为关键字,则加双引号,例如:"option"
2) 如果创建Unique,在外键声明下加上如下语句:CONSTRAINT UC_tb_visitor UNIQUE (mail) USING INDEX TABLESPACE ADMIDX
3) PK,FK,Unique命名请保持统一
1.2 创建sequence - 假如新表不需要sequence的话,则跳过
CREATE SEQUENCE seq_user MINVALUE 1000000000100001 MAXVALUE 9999999999999999 START WITH 1000000000100001 INCREMENT BY 1 NOCACHE;1.3 授权
1)给table创建同义词CREATE PUBLIC SYNONYM tb_acc_account FOR tb_acc_account;
2)给sequence创建同义词
CREATE PUBLIC SYNONYM seq_acc_journal FOR seq_acc_journal;
3)给table授权(根据相应的需求授予SELECT, INSERT, DELETE, UPDATE权限)
GRANT SELECT, INSERT, DELETE, UPDATE ON tb_activation_link TO om_app_role;
4)给sequence授权
GRANT SELECT ON seq_acc_journal TO om_app_role;
2、修改表结构
2.1 重命名表字段
ALTER TABLE tb_user RENAME COLUMN test_field TO test_field2;2.2 增加新的字段
ALTER TABLE tb_user ADD test_field NUMBER(16) DEFAULT 0 NOT NULL;2.3 删除字段
ALTER TABLE tb_user DROP COLUMN test_field;2.4 更改字段
ALTER TABLE tb_user MODIFY test_field VARCHAR2(16) DEFAULT '0' NULL;2.5 特殊情况
1) 例如修改字段类型VARCHAR2(2000)到CLOB,不能直接使用MODIFY,这时按以下流程操作:ALTER TABLE tb_user ADD test_field2 CLOB DEFAULT 'NA' NOT NULL;
UPDATE tb_user SET test_field2=test_field;
COMMIT;
ALTER TABLE tb_user DROP COLUMN test_field;
ALTER TABLE tb_user RENAME COLUMN test_field2 TO test_field;
2.6 增加主键,外键,UNIQUE等
1)ALTER TABLE tb_acc_journal ADD CONSTRAINT PK_tb_user PRIMARY KEY (user_id) USING INDEX TABLESPACE DEALIDX;2)ALTER TABLE tb_acc_journal ADD CONSTRAINT FK_tb_acc_journal_account FOREIGN KEY (account_id) REFERENCES tb_acc_account (acc_account_id);
3)ALTER TABLE tb_item_category ADD CONSTRAINT UK_item_category_level_name UNIQUE(parent_cat_id,cat_name) USING INDEX TABLESPACE ADMIDX;
2.7 删除主键,外键,UNIQUE
1)ALTER TABLE tb_acc_journal DROP CONSTRAINT PK_tb_user;2)ALTER TABLE tb_acc_journal DROP CONSTRAINT FK_tb_acc_journal_account;
3)ALTER TABLE tb_item_category DROP CONSTRAINT UK_item_category_level_name;
3、删除表
DROP TABLE tb_user CASCADE CONSTRAINTS;4、Procedure和Job
1) 创建CREATE OR REPLACE PROCEDURE bt_deal_promotion_visitor AS
BEGIN
update tb_visitor tv set tv.receive_mail_setting=bitor(tv.receive_mail_setting,1) where tv.mail in (select t.mail as email from tb_visitor t where t.status=1 and t.subscribe_sts!=9 and bitand(t.receive_mail_setting,1)=0
minus
select distinct substr(REGEXP_SUBSTR(t.referrer,'mail=[^&]+'),6) from tb_http_access_log t where t.url = '/unsubscribe/save' and t.referrer like '%/unsubscribe%' and (t.query_string is null or t.query_string like '%mailType=1%') and NOT REGEXP_LIKE(user_agent,
'(bot|scan|slurp|spider|craw)', 'i') and (ip <> '211.144.118.170' and ip <> '202.74.178.140' and ip <> '202.74.178.141'));
COMMIT;
END bt_deal_promotion_visitor;
/
var job NUMBER
begin
dbms_job.submit(:job,
'bt_deal_promotion_visitor;',
next_day(trunc(sysdate)+22/24,'SATURDAY'),
'trunc(sysdate+30)');
commit;
end;
/
2)查看
SQL> column log_user format a20
SQL> column WHAT format a50
SQL> column INTERVAL format a40
SQL> select job,log_user,what,next_date,next_sec,interval from user_jobs;
JOB LOG_USER WHAT NEXT_DATE NEXT_SEC INTERVAL
---------- ------------------------------ ------------------------------ --------- -------------------------------- --------------------
103 OM_SUPERVISOR bt_deal_promotion_visitor; 10/JUL/10 22:00:00 trunc(sysdate+30)
3)删除
begin
dbms_job.remove(103);
commit;
end;
/
drop procedure bt_deal_promotion_visitor;
4)暂停Job
begin
sys.dbms_job.broken(job => 103,
broken => true);
commit;
end;
/
5. Table Space
1) 改变表的表空间alter table tablename move tablespace tabelspacename;
2)查看表空间的物理位置及具体参数
select * from dba_data_files where TABLESPACE_NAME='DEAL';
3)查看所有表空间的参数
select * from dba_tablespaces;
4) 查看表空间的空闲空间大小
select a.tablespace_name,b.file_name,sum(a.bytes) freespace,count(*) extcnt,b.bytes,max(a.bytes) largest,min(a.bytes) smallest
from dba_free_space a,dba_data_files b where a.tablespace_name=b.tablespace_name and a.file_id=b.file_id group by a.tablespace_name,b.file_name,b.bytes;
5) ORACLE中表、索引的表空间的批量更改方法
a. 查询当前用户下的所有表
select 'alter table '|| table_name ||' move tablespace
tablespacename;' from user_all_tables;
b. 查询当前用户下的所有索引
select 'alter index '|| index_name ||' rebuild tablespace
tablespacename;' from user_indexes;
c. 在当前用户下将查询结果批处理执行即可!
6. 通过v$sqlarea,v$sql查询最占用资源的查询
-----------------------v$sqlarea,v$sql
-----------------------
从V$SQLAREA中查询最占用资源的查询
select b.username username,a.disk_reads reads,
a.executions exec,a.disk_reads/decode(a.executions,0,1,a.executions) rds_exec_ratio,
a.sql_text Statement
from v$sqlarea a,dba_users b
where a.parsing_user_id=b.user_id
and a.disk_reads > 100000
order by a.disk_reads desc;
用buffer_gets列来替换disk_reads列可以得到占用最多内存的sql语句的相关信息。
V$SQL是内存共享SQL区域中已经解析的SQL语句。
列出使用频率最高的5个查询:
select sql_text,executions
from (select sql_text,executions,
rank() over
(order by executions desc) exec_rank
from v$sql)
where exec_rank <=5;
消耗磁盘读取最多的sql top5:
select disk_reads,sql_text
from (select sql_text,disk_reads,
dense_rank() over
(order by disk_reads desc) disk_reads_rank
from v$sql)
where disk_reads_rank <=5;
找出需要大量缓冲读取(逻辑读)操作的查询:
select buffer_gets,sql_text
from (select sql_text,buffer_gets,
dense_rank() over
(order by buffer_gets desc) buffer_gets_rank
from v$sql)
where buffer_gets_rank<=5;
7. Oracle锁表查询
最近遇到这样一个问题,操作一个表,发现被人锁定了,于是查询谁锁定的表,发现多人锁定,安全起见,不能全部kill,于是用一下语句判定,谁锁定,谁等待。SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name,
s.LOCKWAIT,s.status,s.machine,s.terminal,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
FROM v$locked_object l,dba_objects o,v$session s
WHERE l.object_id=o.object_id AND lower(object_name)='tb_offer'
AND l.session_id=s.sid
ORDER BY o.object_id,xidusn DESC;
如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待
以上的语句可以查询到谁锁了表,而谁在等待。
以上查询结果是一个树状结构,如果有子节点,则表示有等待发生。
如果想知道锁用了哪个回滚段,还可以关联到V$rollname,其中xidusn就是回滚段的USN
找出谁锁定的记录,kill掉就行了。
alter system kill session '133,3506'; (其中133是SID,3506是SERIAL#)
--以下几个为相关表
SELECT * FROM v$lock;
SELECT * FROM v$sqlarea;
SELECT * FROM v$session;
SELECT * FROM v$process ;
SELECT * FROM v$locked_object;
SELECT * FROM all_objects;
SELECT * FROM v$session_wait;
相关文章推荐
- 触发器(八、用SERVERERROR触发器开展数据库错误维护工作)
- 数据库服务器 之 PostgreSQL数据库的日常维护工作
- Oracle 数据库日常维护手册
- PostgreSQL学习笔记(十二) 数据库维护
- hibernate框架中数据库的关系维护简析
- 数据库设计指南
- 数据库设计指南 第2 部分— 设计表和字段
- Log4Net使用指南之用log4net记录日志到数据库(含有自定义属性)------附Demo例子源代码
- 数据库移植工作——建库脚本移植
- SQL Server 2012实施与管理实战指南(笔记)——Ch4数据库连接组件
- DATAGRID控件里的这个HeaderText=日工作報告能否在后台根据数据库某字段的内容变化(死亡历险)
- SharePoint Portal Server 2003数据库迁移指南
- Linux 数据库学习的准备工作---mysql数据库的安装
- 微软提供的关于其它数据库迁移到SQL Server的技术指南
- 1.权限管理准备工作:Membership数据库的安装与说明
- 谈一谈在工作过程中搜集的.NET小工具小程序 数据库脚本工具 VS2010/2012风格的界面框架
- 数据库最最常用语句(10年工作笔记)
- SQL Server 2012实施与管理实战指南(笔记)——Ch5启动SQL Server服务和数据库
- MySQL必知必会笔记(七)安全管理 数据库维护 改善性能
- Yii框架官方指南系列增补版27——使用数据库:数据库迁移