您现在的位置是:主页 > news > 公司网站制作深圳/网站推广优化排名教程
公司网站制作深圳/网站推广优化排名教程
admin2025/6/12 22:56:06【news】
简介公司网站制作深圳,网站推广优化排名教程,ps做字幕模板下载网站有哪些,wordpress 显示一个类目Oracle维护操作简介 1. 数据库结构表空间是Oracle数据库存放Table的存储空间,它由一个或多个操作系统上的文件(或者裸设备)组成。 一个文件加入到表空间后,无法把它单独撤离,除非删除整个表空间。 1.1. 表空间的创建语…
Oracle维护操作简介
1. 数据库结构
表空间是Oracle数据库存放Table的存储空间,它由一个或多个操作系统上的文件(或者裸设备)组成。
一个文件加入到表空间后,无法把它单独撤离,除非删除整个表空间。
1.1. 表空间的创建语句
create tablespace TBS_BACKUP datafile '/oradata/bill/backup0001_8g.dbf' size 8192M extent management local segment space management auto;
1.2. 表空间的扩展语句
alter tablespace TBS_BACKUP add datafile '/oradata/bill/backup0002_8g.dbf ' size 8192M ;
1.3. 表空间的删除语句
drop tablespace TBS_BACKUP;
删除表空间之前要先删除存放在该表空间上的所有表,可通过如下语句来查询
SELECT * FROM DBA_SEGMENTS WHERE TABLESPACE_NAME=' TBS_BACKUP ';
1.4. 表空间使用情况的查询语句
SELECT A.TABLESPACE_NAME "表空间名",A.TOTAL_SPACE "总空间(1M)",NVL(B.FREE_SPACE,0) "剩余空间(1M)",NVL(B.FREE_SPACE8,0) "剩余空间(8M)", ROUND(NVL(B.FREE_SPACE,0)/A.TOTAL_SPACE*100,2) "百分比%"
FROM
(
SELECT TABLESPACE_NAME ,SUM(BYTES)/1024/1024 TOTAL_SPACE
FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME LIKE '%%'
GROUP BY TABLESPACE_NAME
) A,
(
SELECT TABLESPACE_NAME,SUM(TRUNC(BYTES/1024/1024,0)) FREE_SPACE ,SUM(TRUNC(BYTES/1024/1024/8,0))*8 FREE_SPACE8
FROM DBA_FREE_SPACE
WHERE TABLESPACE_NAME LIKE '%'
GROUP BY TABLESPACE_NAME
) B
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+)
ORDER BY 5
注:Oracle9i的表空间是自管理型,剩余空间看字段"剩余空间(1M)"就可以了,"剩余空间(8M)"字段可以忽略。
2. 用户和角色
Oracle系统的权限分两类,一类是系统预定义的权限点,如”create table”, “create view” ,这是权限控制的基础,比较细。一类是对表的查询、修改等权限,表的所有权归表的属主,由属主赋予其他用户查询修改录入的权限。
日常维护常用的几个系统权限如下:
? select any dictionary :赋予用户查看系统字典的权限
? select any table :赋予用户查看任何表的权限
? unlimited tablespace :赋予用户对表空间的完全使用权限
为了使用方便,有了角色的概念,角色就是一堆权限的集合。系统有预定义了几个角色,与我们密切相关的角色如下:
? CONNECT: 有了该角色,用户才可以连接数据库
? RESOURCE: 有了该角色,用户建表、建视图等常用操作都可以进行了
? PUBLIC:给予了该角色什么权限,该数据库中所有用户都获得了该权限
? DBA:顾名思义,数据库管理员角色。
2.1. 创建用户的语句
create user AUSERNAME
identified by APASSWORD
default tablespace XXXXX
temporary tablespace TEMP
profile DEFAULT;
2.2. 删除用户的语句
删除了用户,该用户的所有对象也一同被删除,因此在删除用户前,要确保该用户的所有对象都是没有用的。
drop user AUSERNAME;
如果该用户下还有对象,上述语句执行失败,如果确认用户及其对象都是可以删除的,可以使用如下语句:drop user AUSERNAME cascade;
2.3. 赋权的语句
赋予权限用 grant; 收回权限用 revoke, 例如:
grant connect to AUSERNAME;
grant resource to AUSERNAME;
grant select on ATABLENAME to AUSERNAME;
2.4. profile
每个用户都有一个Profile ,不指定就使用默认的profile。
Profile 创建语句如下:
create profile QUERY_PROFILE limit
sessions_per_user unlimited
cpu_per_session unlimited
cpu_per_call unlimited
connect_time unlimited
idle_time unlimited
logical_reads_per_session unlimited
logical_reads_per_call unlimited
composite_limit unlimited
private_sga unlimited
failed_login_attempts 20
password_life_time unlimited
password_reuse_time 1800
password_reuse_max unlimited
password_lock_time .0005
password_grace_time 5
password_verify_function VERIFY_FUNCTION;
修改一个用户的profile的语句如下:
alter user AUSERNAME profile QUERY_PROFILE;
3. 数据字典
Oracle数据库的系统信息大都可以从数据字典中查得。
常用的数据字典可以从如下SQL中查到select * from dictionary
DBA_ 开头的字典,保存的都是系统的静态信息
USER_ 开头的字典,任何用户都可以查询,查到的是本用户相关的信息
V$ 开头的字典,是系统运行时的动态信息,从中可以看出系统的执行情况。
4. 杂项
数据库链: user_db_links
同义词:user_synonyms
序列号:user_sequences (.nextval)
函数、存储过程、包 :dba_source
alter table ATABLENAME move tablespace ATABLESPACE;
4.1. 执行SQL的Shell脚本
$ cat runsql.sql
#!/bin/sh
sqlplus /nologin <<EEOOFF
connect username/passwd@dbserv
select * from dual;
EEOOFF
nohup sh runsql.sql >sql.log &
5. 分区
详见Oracle的手册。
分区和表的概念相当,分区的索引有Local型和全局型两种。Local型是按分区建索引,表有几个分区索引就有几个分区,分区名也相同。全局型索引忽略表的分区情况,按普通表来建分区,此时索引可以不分区,也可以按照用户指定的方式分区,与表分区没有任何联系。
当分区有调整时,相应分区的Local索引必须重建:
alter index IDX_SENDACCTITEMLOG rebuild partition P_200607;
任何分区有调整,全局索引都必须重建。
5.1. Range分区方式的切割分区语句
alter table send_acct_item_log split partition P_MAX at ( TO_DATE('2006-07-01', 'YYYY-MM-DD') ) into
( partition P_200606 tablespace acctdata,partition P_Max tablespace acctdata);
5.2. List分区方式的新增分区语句
alter table ticket_info_station_591 add Partition PART_OTHER values (default) tablespace JFTEST2
5.3. 分区移动表空间语句
ALTER TABLE parts MOVE PARTITION depot2 TABLESPACE ts094 NOLOGGING;ALTER TABLE ATABLENAME TRUNCATE PARTITION APARTITIONNAME ;
6. SESSION
当一个用户通过SQLPLUS或者PL/SQL Developer,或者其他任何方式连接到数据库时,数据库自动创建一个进程来接待该用户,这就是一个Session,在PL/SQL中开多个窗口,实际上将产生多个Session。
6.1. Session的信息查询
Session的信息可以通过查询数据字典 V$SESSION 来获得,点PL/SQL软件的菜单Tools->Sessions 也可以查看。
相关的几个常用数据字典:
v$session_wait 从中可以看出session目前正在等待的事件,分析这张表可以大致知道Session的执行情况
v$process 从中可以查询Oracle自动创建的接待进程的信息。
v$open_cursor 顾名思义,这里保存Session当前打开的游标的信息。
6.1.1. 查某个Session正在执行的SQL
select * from v$sqltext_with_newlines
where (address,hash_value) in
(
select sql_address,sql_hash_value from v$session
where SID= &SID
)
order by ADDRESS,HASH_VALUE,piece
6.2. 锁
在执行update 和 delete 语句时,Oracle数据锁住正在操作的数据行,避免其他用户同时对这些记录做update或delete,直到用户执行了commit或者rollback,锁才会释放。
有些用户执行了语句后忘了提交,或其他异常原因导致锁长期未被释放,影响了其他用户的操作,这时需要查出这些锁,以及持有锁的Session,必要时可以强行杀死这些Session来释放锁。
6.2.1. 锁的查询
select b.sid, c.username, c.osuser, c.terminal, c.PROGRAM,C.PROCESS,decode(b.id2, 0, a.object_name, 'Trans-'||to_char(b.id1)) object_name,b.type,decode(b.lmode,0,'--Waiting--',1,'NULL',2,'Row Share',3,'Row Excl',4,'Share',5,'Sha Row Exc',6,'Exclusive','Other') "Lock Mode",decode(B.request,0,' ',1,'NULL',2,'Row Share',3,'Row Excl',4,'Share',5,'Sha Row Exc',6,'Exclusive','Other') "Req Mode",'ALTER SYSTEM KILL SESSION '''||TO_CHAR(C.SID)||','||TO_CHAR(C.SERIAL#)||''';',C.MACHINE,'kill -9 '||TO_CHAR(P.SPID)
from DBA_OBJECTS A, V$LOCK B, V$SESSION C, V$PROCESS P
where a.object_id(+) = b.ID1and b.sid = c.sidand c.username is not nullAND C.PADDR=P.ADDR
order by b.sid,b.id2
6.3. 长时间连接Session的查询
有些Session因为比较特殊的原因而挂住,不工作了,通过锁无法查出。下面的语句查询出所有长时间连在数据库上的Session ,对结果需要人工确认,找出异常的Session
select w.sid, s.SERIAL#, trunc(w.seconds_in_wait/3600/24,2) Days_in_Wait,s.USERNAME,s.PROGRAM,s.MACHINE,s.OSUSER, w.*, s.*,p.*,'ALTER SYSTEM KILL SESSION '''||TO_CHAR(S.SID)||','||TO_CHAR(S.SERIAL#)||''';',S.MACHINE,S.PROGRAM, 'kill -9 '||TO_CHAR(P.SPID)
from v$session_wait w, v$session s, v$process p
where s.sid=w.sid and s.PADDR=p.ADDR and w.seconds_in_wait >7200and w.EVENT not like '_mon%'
order by w.seconds_in_wait desc
6.4. 杀Session
系统提供的杀Session命令是:alter system kill session ‘sid, serial#’;
用该命令来杀进程是比较安全的,但在很多情况下,该命令执行后Session依然不死,这时可以通过关联V$PROCESS 查出Oracle的对应后台进程的进程号(SPID),通过操作系统的 “kill -9” 命令强制结束后台进程,达到杀Session的目的,执行前先确认该进程不是Oracle的系统进程。
上两节的查锁的SQL中,同时也提供了这两种杀Session的语句,只需复制出来执行即可。
7. 导入导出
exp和imp 是Oracle提供的导入导出工具,在数据库服务器上执行
命令的基本格式是 exp keyword1=value1 keyword2=value2 ……..
exp help=y 或者 imp help=y 可以看到他们的帮助信息。
导出有:导出全库数据、导出指定用户的数据、导出指定表的数据 三种模式,第一种模式目前我们不考虑。
导出的几个重要keyword 说明如下;
BUFFER 指定导出时使用的缓冲区的大小,为加快速度,可以设成10M
FILE 文件名,数据导出到该文件中
INDEXES 当索引不需要导出时,设置该参数为N,导出大量数据时建议不导索引,在导入后重建索引,速度更快
ROWS 决定了是否导出表中的数据,如果”=N”,只导出建表语句,不导出数据
LOG 文件名,导出的日志存放到该文件中,导出完毕后最好看看日志,确认导出是否成功
DIRECT 导出大量数据时,设置该参数=Y,可以大幅度提高导出速度
OWNER 指定导出用户名,此时按用户导出数据
TABLES 指定导出的表名,多个表名时用逗号分割
导出的简单例子如下:
nohup exp system/passwd@ibsjf file=exp.dmp owner=bill_t2 direct=y buffer=10240000 indexs=n log=exp_bill_t2.log &
导入的几个常用keyword如下:
IGNORE 在导入出现创建对象失败时,继续后续导入流程,比如一个表已经存在了,希望从文件中导入数据,就需要设置该参数为Y
FROMUSER、TOUSER 默认导出时的用户时A,导入时也是A,如果要把数据导入到B用户中,就需要使用这两个参数
导入范例如下:
nohup imp system/passwd@IBSCX ignore=n file=exp.dmp fromuser=user_a touser=user_b buffer=10240000 log=imp.log &
提醒:1. 如果exp时连接的用户具有DBA的权限,imp时也必须连有DBA权限的用户才能导入。
2. 按表导出时,如果表间通过外键关联,要注意导出的次序。
7.1. 字符集
数据库的字符集不匹配可能导致导入不成功。
查询字符集语句如下:select userenv('language') from dual;
结果形式如下: SIMPLIFIED CHINESE_CHINA.ZHS16CGB231280最后部分是字符集,是关键部分。
GB231280涵盖了US7ASCII,GBK又涵盖了GB231280,从子集到全集的转换是可以支持的。作法是导出时,客户端的字符集设置为目标数据库的字符集即可,如set nls_lang=AMERICAN_AMERICA.ZHS16GBK;
Unicode是不同的编码方式,GB到Unicode是无法自动转换的。
7.2. 外键的屏蔽
导入数据时经常因为外键的关系导致导入失败,可暂时屏蔽外键,导入成功后再启用。
declarecursor C_FK isselect 'alter table '||table_name||' disable constraint '||constraint_name SQLSTRfrom user_constraintswhere constraint_type ='R';
beginfor REC in C_FK loopEXECUTE IMMEDIATE REC.SQLSTR;end loop;
end;
8. Oracle手册和PLSQL Dev的使用