打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Oracle学习1_笔记B
一、实现数据库复制的前提条件

1、数据库支持高级复制功能
您可以用system身份登录数据库,查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能;否
则不支持。
2、数据库初始化参数要求
①、db_domain = test.com.cn
指明数据库的域名(默认的是WORLD),这里可以用您公司的域名。
②、global_names = true
它要求数据库链接(database link)和被连接的数据库名称一致。
现在全局数据库名:db_name+”.”+db_domain
③、有跟数据库job执行有关的参数
job_queue_processes = 1
job_queue_interval = 60
distributed_transactions = 10
open_links = 4 
第一行定义SNP进程的启动个数为n。系统缺省值为0,正常定义范围为0~36,根据任务的多少,可以配置不同的数值。 
第二行定义系统每隔N秒唤醒该进程一次。系统缺省值为60秒,正常范围为1~3600秒。事实上,该进程执行完当前任务后
,就进入睡眠状态,睡眠一段时间后,由系统的总控负责将其唤醒。 
如果修改了以上这几个参数,需要重新启动数据库以使参数生效。
 

二、实现数据库同步复制的步骤

假设在Internet上我们有两个数据库:一个叫深圳(shenzhen),一个叫北京(beijing)。
具体配置见下表:
数据库名 shenzhen beijing
数据库域名 test.com.cn test.com.cn
数据库sid号 shenzhen beijing
Listener端口号 1521 1521
服务器ip地址 10.1.1.100 10.1.1.200
 
1、确认两台数据库之间可以互相访问,在tnsnames.ora里设置数据库连接字符串。
①、例如:深圳这边的数据库连接字符串是以下的格式
beijing =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.200)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = beijing)
)

运行$tnsping beijing 
出现以下提示符:
Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.200)(PORT=1521))
OK(n毫秒) 
表明深圳数据库可以访问北京数据库。
②、在北京那边也同样配置,确认$tnsping shenzhen 是通的。
2、改数据库全局名称,建公共的数据库链接。
①、用system身份登录shenzhen数据库
SQL>alter database rename global_name to shenzhen.test.com.cn;
用system身份登录beijing数据库:
SQL>alter database rename global_name to beijing.test.com.cn;
②、用system身份登录shenzhen数据库
SQL>create public database link beijing.test.com.cn using 'beijing';
测试数据库全局名称和公共的数据库链接
SQL>select * from global_name@beijing.test.com.cn;
返回结果为beijing.test.com.cn就对了。
用system身份登录beijing数据库:
SQL>create public database link shenzhen.test.com.cn using 'shenzhen';
测试数据库全局名称和公共的数据库链接
SQL>select * from global_name@shenzhen.test.com.cn;
返回结果为shenzhen.test.com.cn就对了。
3、建立管理数据库复制的用户repadmin,并赋权。
①、用system身份登录shenzhen数据库
SQL>create user repadmin identified by repadmin default tablespace users temporary tablespace temp;
SQL>execute dbms_defer_sys.register_propagator('repadmin');
SQL>grant execute any procedure to repadmin;
SQL>execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');
SQL>grant comment any table to repadmin;
SQL>grant lock any table to repadmin;
②、同样用system身份登录beijing数据库,运行以上的命令,管理数据库复制的用户repadmin,并赋权。
说明:repadmin用户名和密码可以根据用户的需求自由命名。
4、在数据库复制的用户repadmin下创建私有的数据库链接。
①、用repadmin身份登录shenzhen数据库
SQL>create database link beijing.test.com.cn connect to repadmin identified by repadmin;
测试这个私有的数据库链接:
SQL>select * from global_name@beijing.test.com.cn;
返回结果为beijing.test.com.cn就对了。
②、用repadmin身份登录beijing数据库
SQL>create database link shenzhen.test.com.cn connect to repadmin identified by repadmin;
测试这个私有的数据库链接
SQL>select * from global_name@shenzhen.test.com.cn;
返回结果为shenzhen.test.com.cn就对了。
5、创建或选择实现数据库复制的用户和对象,给用户赋权,数据库对象必须有主关键字。
假设我们用ORACLE里举例用的scott用户,dept表。
①、用internal身份登录shenzhen数据库,创建scott用户并赋权
SQL>create user scott identified by tiger default tablespace users temporary tablespace temp;
SQL>grant connect, resource to scott;
SQL>grant execute on sys.dbms_defer to scott;
②、用scott身份登录shenzhen数据库,创建表dept
SQL>create table dept
(deptno number(2) primary key,
dname varchar2(14),
loc varchar2(13) );
③、如果数据库对象没有主关键字,可以运行以下SQL命令添加:
SQL>alter table dept add (constraint dept_deptno_pk primary key (deptno));
④、在shenzhen数据库scott用户下创建主关键字的序列号,范围避免和beijing的冲突。
SQL> create sequence dept_no increment by 1 start with 1 maxvalue 44 cycle nocache;
(说明:maxvalue 44可以根据应用程序及表结构主关键字定义的位数需要而定)
⑤、在shenzhen数据库scott用户下插入初始化数据
SQL>insert into dept values (dept_no.nextval,'accounting','new york');
SQL>insert into dept values (dept_no.nextval,'research','dallas');
SQL>commit;
⑥、在beijing数据库那边同样运行以上①,②,③
⑦、在beijing数据库scott用户下创建主关键字的序列号,范围避免和shenzhen的冲突。
SQL> create sequence dept_no increment by 1 start with 45 maxvalue 99 cycle nocache;
⑧、在beijing数据库scott用户下插入初始化数据
SQL>insert into dept values (dept_no.nextval,'sales','chicago');
SQL>insert into dept values (dept_no.nextval,'operations','boston');
SQL>commit;
6、创建要复制的组scott_mg,加入数据库对象,产生对象的复制支持
①、用repadmin身份登录shenzhen数据库,创建主复制组scott_mg
SQL> execute dbms_repcat.create_master_repgroup('scott_mg');
说明:scott_mg组名可以根据用户的需求自由命名。
②、在复制组scott_mg里加入数据库对象
SQL>execute dbms_repcat.create_master_repobject(sname=>'scott',oname=>'dept',
type=>'table',use_existing_object=>true,gname=>'scott_mg');
参数说明:
sname 实现数据库复制的用户名称
oname 实现数据库复制的数据库对象名称
(表名长度在27个字节内,程序包名长度在24个字节内)
type 实现数据库复制的数据库对象类别
(支持的类别:表,索引,同义词,触发器,视图,过程,函数,程序包,程序包体)
use_existing_object true表示用主复制节点已经存在的数据库对象
gname 主复制组名
③、对数据库对象产生复制支持
SQL>execute dbms_repcat.generate_replication_support('scott','dept','table');
(说明:产生支持scott用户下dept表复制的数据库触发器和程序包)
④、确认复制的组和对象已经加入数据库的数据字典
SQL>select gname, master, status from dba_repgroup; 
SQL>select * from dba_repobject;
7、创建主复制节点
①、用repadmin身份登录shenzhen数据库,创建主复制节点
SQL>execute dbms_repcat.add_master_database 
(gname=>'scott_mg',master=>'beijing.test.com.cn',use_existing_objects=>true, copy_rows=>alse,
propagation_mode => 'asynchronous');
参数说明:
gname 主复制组名
master 加入主复制节点的另一个数据库
use_existing_object true表示用主复制节点已经存在的数据库对象
copy_rows false表示第一次开始复制时不用和主复制节点保持一致
propagation_mode 异步地执行
②、确认复制的任务队列已经加入数据库的数据字典
SQL>select * from user_jobs;
8、使同步组的状态由停顿(quiesced )改为正常(normal)
①、用repadmin身份登录shenzhen数据库,运行以下命令
SQL> execute dbms_repcat.resume_master_activity('scott_mg',false);
②、确认同步组的状态为正常(normal)
SQL> select gname, master, status from dba_repgroup;
③、如果这个①命令不能使同步组的状态为正常(normal),可能有一些停顿的复制,运行以下命令再试试(建议在紧急的时
候才用):
SQL> execute dbms_repcat.resume_master_activity('scott_mg',true);
9、创建复制数据库的时间表,我们假设用固定的时间表:10分钟复制一次。
①、用repadmin身份登录shenzhen数据库,运行以下命令
SQL>begin
dbms_defer_sys.schedule_push (
destination => 'beijing.test.com.cn',
interval => 'sysdate + 10/1440',
next_date => sysdate);
end;
/
 
SQL>begin
dbms_defer_sys.schedule_purge (
next_date => sysdate,
interval => 'sysdate + 10/1440',
delay_seconds => 0,
rollback_segment => '');
end;
/
 
②、用repadmin身份登录beijing数据库,运行以下命令
SQL>begin
dbms_defer_sys.schedule_push (
destination => ' shenzhen.test.com.cn ',
interval => 'sysdate + 10 / 1440',
next_date => sysdate);
end;
/
 
SQL>begin
dbms_defer_sys.schedule_purge (
next_date => sysdate,
interval => 'sysdate + 10/1440',
delay_seconds => 0,
rollback_segment => '');
end;
/
10、添加或修改两边数据库的记录,跟踪复制过程
如果你想立刻看到添加或修改后数据库的记录的变化,可以在两边repadmin用户下找到push的job_number,然后运行:
SQL>exec dbms_job.run(job_number);
 

三、异常情况的处理

1、检查复制工作正常否,可以在repadmin 用户下查询user_jobs
SQL>select job,this_date,next_date,what, broken from user_jobs;
正常的状态有两种:
任务闲——this_date为空,next_date为当前时间后的一个时间值
任务忙——this_date不为空,next_date为当前时间后的一个时间值
异常状态也有两种:
任务死锁——next_date为当前时间前的一个时间值
任务死锁——next_date为非常大的一个时间值,例如:4001-01-01
这可能因为网络中断照成的死锁
解除死锁的办法:
$ps –ef|grep orale
找到死锁的刷新快照的进程号ora_snp*,用kill –9 命令删除此进程
然后进入repadmin 用户SQL>操作符下,运行命令:
SQL>exec dbms_job.run(job_number);
说明:job_number 为用select job,this_date,next_date,what from user_jobs;命令查出的job编号。
2、增加或减少复制组的复制对象
①、停止主数据库节点的复制动作,使同步组的状态由正常(normal)改为停顿(quiesced )
用repadmin身份登录shenzhen数据库,运行以下命令
SQL>execute dbms_repcat.suspend_master_activity (gname => 'scott_mg');
②、在复制组scott_mg里加入数据库对象,保证数据库对象必须有主关键字。
SQL>execute dbms_repcat.create_master_repobject(sname=>'scott',oname=>'emp',
type=>'table',use_existing_object=>true,gname=>'scott_mg');
对加入的数据库对象产生复制支持
SQL>execute dbms_repcat.generate_replication_support('scott','emp','table');
③、在复制组scott_mg里删除数据库对象。
SQL>execute dbms_repcat.drop_master_repobject ('scott','dept','table');
④、重新使同步组的状态由停顿(quiesced )改为正常(normal)。
SQL> execute dbms_repcat.resume_master_activity('scott_mg',false);
 
5.简说Oracle启动及关闭数据库实例
oracle用户,dbstart和dbshut启动及关闭/var/opt/oracle/oratab或/etc/oratab中设定的数据库实例,dbstart采用
normal方式,dbshut采用immediate方式。
或者使用手工方式
sqlplus “/ as sysdba”
启动
normal
SQL>startup
mount
SQL>startup mount;  #启动实例进程,载入数据库文件,允许DBA权限的某些操作,但禁止对数据库文件的一般性操作
SQL>完成某些操作
SQL>alter database open;
nomount
SQL>startup nomount;  #启动实例进程,但不允许访问数据库,常用于创建数据库、介质恢复或创建controlfile
SQL>完成某些操作
SQL>alter database open;
关闭
normal
SQL>shutdown或SQL>shutdown transactional;  #等待每个连接交易完成后,切断连接,再关闭数据库
immediate
SQL>shutdown immediate;  #立刻中止每个连接,交易回滚
abort
SQL>shutdown abort;  #立刻关闭数据库,不保证交易完整性,在下一次启动打开数据库文件时会进行介质恢复
 
6.常用监控SQL
1.监控事例的等待:
         select event,sum(decode(wait_time,0,0,1)) prev, sum(decode(wait_time,0,1,0)) curr,count(*)
from v$session_wait
group by event order by 4;
2.回滚段的争用情况:
select name,waits,gets,waits/gets ratio from v$rollstat a,v$rollname b where a.usn=b.usn;
3.监控表空间的I/O比例:
select df.tablespace_name name,df.file_name "ile",f.phyrds pyr,f.phyblkrd pbr,f.phywrts pyw,
f.phyblkwrt pbw
from v$filestat f,dba_data_files df
where f.file#=df.file_id
4.监空文件系统的I/O比例:
select substr(a.file#,1,2) "#",substr(a.name,1,30) "name",a.status,a.bytes,
b.phyrds,b.phywrts
from v$datafile a,v$filestat b
where a.file#=b.file#
5.在某个用户下找所有的索引:
select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name
from user_ind_columns, user_indexes
where user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = user_indexes.table_name
order by user_indexes.table_type, user_indexes.table_name,
user_indexes.index_name, column_position;
6. 监控 SGA 的命中率
 
select a.value + b.value "logical_reads", c.value "phys_reads",
round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO"
from v$sysstat a, v$sysstat b, v$sysstat c
where a.statistic# = 38 and b.statistic# = 39
and c.statistic# = 40;
 
7. 监控 SGA 中字典缓冲区的命中率
 
select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio",
(1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio"
from v$rowcache
where gets+getmisses <>0
group by parameter, gets, getmisses;
 
8. 监控 SGA 中共享缓存区的命中率,应该小于1%
 
select sum(pins) "Total Pins", sum(reloads) "Total Reloads",
sum(reloads)/sum(pins) *100 libcache
from v$librarycache;
 
select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins) "reload percent"
from v$librarycache;
 
9. 显示所有数据库对象的类别和大小
 
select count(name) num_instances ,type ,sum(source_size) source_size ,
sum(parsed_size) parsed_size ,sum(code_size) code_size ,sum(error_size) error_size,
sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required
from dba_object_size
group by type order by 2;
 
10. 监控 SGA 中重做日志缓存区的命中率,应该小于1%
 
SELECT name, gets, misses, immediate_gets, immediate_misses,
Decode(gets,0,0,misses/gets*100) ratio1,
Decode(immediate_gets+immediate_misses,0,0,
immediate_misses/(immediate_gets+immediate_misses)*100) ratio2
FROM v$latch WHERE name IN ('redo allocation', 'redo copy');
 
11. 监控内存和硬盘的排序比率,最好使它小于 .10,增加 sort_area_size
 
SELECT name, value FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts (disk)');
 
 
12. 监控当前数据库谁在运行什么SQL语句
 
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece;
 
13. 监控字典缓冲区
 
SELECT (SUM(PINS - RELOADS)) / SUM(PINS) "LIB CACHE" FROM V$LIBRARYCACHE;
SELECT (SUM(GETS - GETMISSES - USAGE - FIXED)) / SUM(GETS) "ROW CACHE" FROM V$ROWCACHE;
SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM V$LIBRARYCACHE;
 
后者除以前者,此比率小于1%,接近0%为好。
 
SELECT SUM(GETS) "DICTIONARY GETS",SUM(GETMISSES) "DICTIONARY CACHE GET MISSES"
FROM V$ROWCACHE
 
14. 找ORACLE字符集
 
select * from sys.props$ where name='NLS_CHARACTERSET';
 
15. 监控 MTS
 
select busy/(busy+idle) "shared servers busy" from v$dispatcher;
 
此值大于0.5时,参数需加大
 
select sum(wait)/sum(totalq) "ispatcher waits" from v$queue where type='dispatcher';
select count(*) from v$dispatcher;
select servers_highwater from v$mts;
 
servers_highwater接近mts_max_servers时,参数需加大
 
16. 碎片程度
 
select tablespace_name,count(tablespace_name) from dba_free_space group by tablespace_name
having count(tablespace_name)>10;
 
alter tablespace name coalesce;
alter table name deallocate unused;
 
create or replace view ts_blocks_v as
select tablespace_name,block_id,bytes,blocks,'free space' segment_name from dba_free_space
union all
select tablespace_name,block_id,bytes,blocks,segment_name from dba_extents;
 
select * from ts_blocks_v;
 
select tablespace_name,sum(bytes),max(bytes),count(block_id) from dba_free_space
group by tablespace_name;
 
查看碎片程度高的表
 
SELECT segment_name table_name , COUNT(*) extents
FROM dba_segments WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name
HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY segment_name);
 
17. 表、索引的存储情况检查
 
select segment_name,sum(bytes),count(*) ext_quan from dba_extents where
tablespace_name='&tablespace_name' and segment_type='TABLE' group by tablespace_name,segment_name;
 
select segment_name,count(*) from dba_extents where segment_type='INDEX' and owner='&wner'
group by segment_name;
 
18、找使用CPU多的用户session
 
12是cpu used by this session
 
select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by value desc;
 
20.监控log_buffer的使用情况:(值最好小于1%,否则增加log_buffer 的大小)
select rbar.name,rbar.value,re.name,re.value,(rbar.value*100)/re.value||'%' "radio"
from v$sysstat rbar,v$sysstat re
where rbar.name='redo buffer allocation retries'
and re.name='redo entries';
 
 
19、查看运行过的SQL语句:
 
SELECT SQL_TEXT
FROM V$SQL
 
 
 
 
 
7. 安装Oracle后,经常使用的修改表空间的SQL代码配置:
Windows NT 4.0 中文版
5块10.2GB SCSI硬盘
分:C:盘、D:盘、E:盘、F:盘、G:盘
Oracle 8.0.4 for Windows NT
NT安装在C:\WINNT,Oracle安装在C:\ORANT
 
目标:
因系统的回滚段太小,现打算生成新的回滚段,
建立大的、新的表空间(数据表空间、索引表空间、回滚表空间、临时表空间、)
建两个数据表空间、两个索引表空间,这样建的目的是根据实际应用,
如:现有10个应用用户,每个用户是一个独立子系统(如:商业进销存MIS系统中的财务、收款、库存、人事、总经理等)
尤其大型商场中收款机众多,同时访问进程很多,经常达到50-100个进程同时访问,
这样,通过建立多个用户表空间、索引表空间,把各个用户分别建在不同的表空间里(多个用户表空间放在不同的物理磁
盘上),
减少了用户之间的I/O竞争、读写数据与写读索引的竞争(用户表空间、索引表空间也分别放在不同的物理磁盘上)
 
规划:
C:盘、NT系统,Oracle系统
D:盘、数据表空间1(3GB、自动扩展)、回滚表空间1(1GB、自动扩展)
E:盘、数据表空间2(3GB、自动扩展)、回滚表空间2(1GB、自动扩展)
F:盘、索引表空间1(2GB、自动扩展)、临时表空间1(0.5GB、不自动扩展)
G:盘、索引表空间2(2GB、自动扩展)、临时表空间2(0.5GB、不自动扩展)
 
注:这只是一个简单的规划,实际规划要依系统需求来定,尽量减少I/O竞争
 
实现:
1、首先查看系统有哪些回滚段及其状态。
 
SQL> col owner format a20
SQL> col status format a10
SQL> col segment_name format a20
SQL> col tablespace_name format a20
 
SQL> SELECT OWNER,SEGMENT_NAME,TABLESPACE_NAME,SUM(BYTES)/1024/1024 M
  2  FROM DBA_SEGMENTS
  3  WHERE SEGMENT_TYPE='ROLLBACK'
  4  GROUP BY OWNER,SEGMENT_NAME,TABLESPACE_NAME
  5  /
 
OWNER                SEGMENT_NAME         TABLESPACE_NAME              M
-------------------- -------------------- -------------------- ---------
SYS                  RB1                  ROLLBACK_DATA        .09765625
SYS                  RB10                 ROLLBACK_DATA        .09765625
SYS                  RB11                 ROLLBACK_DATA        .09765625
SYS                  RB12                 ROLLBACK_DATA        .09765625
SYS                  RB13                 ROLLBACK_DATA        .09765625
SYS                  RB14                 ROLLBACK_DATA        .09765625
SYS                  RB15                 ROLLBACK_DATA        .09765625
SYS                  RB16                 ROLLBACK_DATA        .09765625
SYS                  RB2                  ROLLBACK_DATA        .09765625
SYS                  RB3                  ROLLBACK_DATA        .09765625
SYS                  RB4                  ROLLBACK_DATA        .09765625
SYS                  RB5                  ROLLBACK_DATA        .09765625
SYS                  RB6                  ROLLBACK_DATA        .09765625
SYS                  RB7                  ROLLBACK_DATA        .09765625
SYS                  RB8                  ROLLBACK_DATA        .09765625
SYS                  RB9                  ROLLBACK_DATA        .09765625
SYS                  RB_TEMP              SYSTEM               .24414063
SYS                  SYSTEM               SYSTEM                .1953125
 
查询到18记录.
 
SQL> SELECT SEGMENT_NAME,OWNER,
  2         TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS
  3         FROM DBA_ROLLBACK_SEGS
  4  /
 
SEGMENT_NAME         OWNER                TABLESPACE_NAME      SEGMENT_ID   FILE_ID STATUS
-------------------- -------------------- -------------------- ---------- --------- ----------
SYSTEM               SYS                  SYSTEM                        0         1 ONLINE
RB_TEMP              SYS                  SYSTEM                        1         1 OFFLINE
RB1                  PUBLIC               ROLLBACK_DATA                 2         3 ONLINE
RB2                  PUBLIC               ROLLBACK_DATA                 3         3 ONLINE
RB3                  PUBLIC               ROLLBACK_DATA                 4         3 ONLINE
RB4                  PUBLIC               ROLLBACK_DATA                 5         3 ONLINE
RB5                  PUBLIC               ROLLBACK_DATA                 6         3 ONLINE
RB6                  PUBLIC               ROLLBACK_DATA                 7         3 OFFLINE
RB7                  PUBLIC               ROLLBACK_DATA                 8         3 OFFLINE
RB8                  PUBLIC               ROLLBACK_DATA                 9         3 OFFLINE
RB9                  PUBLIC               ROLLBACK_DATA                10         3 OFFLINE
RB10                 PUBLIC               ROLLBACK_DATA                11         3 OFFLINE
RB11                 PUBLIC               ROLLBACK_DATA                12         3 OFFLINE
RB12                 PUBLIC               ROLLBACK_DATA                13         3 OFFLINE
RB13                 PUBLIC               ROLLBACK_DATA                14         3 OFFLINE
RB14                 PUBLIC               ROLLBACK_DATA                15         3 OFFLINE
RB15                 PUBLIC               ROLLBACK_DATA                16         3 OFFLINE
RB16                 PUBLIC               ROLLBACK_DATA                17         3 OFFLINE
 
查询到18记录.
 
2、修改代码如下,可把以下代码存入一.sql文件,如cg_sys.sql,然后以SQL> @cg_sys.sql调用执行。
 
--注意:各个硬盘上要事先建好oradata目录
 
--修改现有回滚段,使之失效,下线
alter rollback segment rb1 offline;
alter rollback segment rb2 offline;
alter rollback segment rb3 offline;
alter rollback segment rb4 offline;
alter rollback segment rb5 offline;
alter rollback segment rb6 offline;
alter rollback segment rb7 offline;
alter rollback segment rb8 offline;
alter rollback segment rb9 offline;
alter rollback segment rb10 offline;
alter rollback segment rb11 offline;
alter rollback segment rb12 offline;
alter rollback segment rb13 offline;
alter rollback segment rb14 offline;
alter rollback segment rb15 offline;
alter rollback segment rb16 offline;
 
--删除原有回滚段
drop rollback segment rb1;
drop rollback segment rb2;
drop rollback segment rb3;
drop rollback segment rb4;
drop rollback segment rb5;
drop rollback segment rb6;
drop rollback segment rb7;
drop rollback segment rb8;
drop rollback segment rb9;
drop rollback segment rb10;
drop rollback segment rb11;
drop rollback segment rb12;
drop rollback segment rb13;
drop rollback segment rb14;
drop rollback segment rb15;
drop rollback segment rb16;
 
--建数据表空间1
--收款、库存、订货、远程通信
create tablespace USER_DATA1 datafile
'd:\oradata\user1_1.ora' size 512M,
'd:\oradata\user1_2.ora' size 512M,
'd:\oradata\user1_3.ora' size 512M,
'd:\oradata\user1_4.ora' size 512M,
'd:\oradata\user1_5.ora' size 512M,
'd:\oradata\user1_6.ora' size 512M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
default storage (initial 128K next 2M pctincrease 0);
--initial 128K,因为,用户建在表空间上,而表建在用户里,为用户所拥有,
--用户继承数据表空间的存储参数,表继承用户的存储参数
--如果initial设的过大,如:5M,则每建一个空表就要占用5M的空间,即使一条记录也没有
--AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED,设置数据文件自动扩展,每一次扩展增加5M,最大空间不受限
 
--建数据表空间2
--物价、人事、结算、财务、总经理、合同、统计
create tablespace USER_DATA2 datafile
'e:\oradata\user2_1.ora' size 512M,
'e:\oradata\user2_2.ora' size 512M,
'e:\oradata\user2_3.ora' size 512M,
'e:\oradata\user2_4.ora' size 512M,
'e:\oradata\user2_5.ora' size 512M,
'e:\oradata\user2_6.ora' size 512M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
default storage (initial 128K next 2M pctincrease 0);
 
--建索引表空间1
create tablespace INDEX_DATA1 datafile
'f:\oradata\index1_1.ora' size 512M,
'f:\oradata\index1_2.ora' size 512M,
'f:\oradata\index1_3.ora' size 512M,
'f:\oradata\index1_4.ora' size 512M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
default storage (initial 128K next 2M pctincrease 0);
 
--建索引表空间2
create tablespace INDEX_DATA2 datafile
'g:\oradata\index2_1.ora' size 512M,
'g:\oradata\index2_2.ora' size 512M,
'g:\oradata\index2_3.ora' size 512M,
'g:\oradata\index2_4.ora' size 512M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
default storage (initial 128K next 2M pctincrease 0);
 
--建回滚表空间1
--设置初始值40M(initial 40M),则每在这个表空间中建一个回滚段,
--此回滚段自动继承此回滚表空间的存储参数,也即默认文件为40M
create tablespace ROLLBACK_DATA1 datafile
'd:\oradata\roll1_1.ora' size 512M,
'd:\oradata\roll1_2.ora' size 512M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
default storage (initial 40M next 5M pctincrease 0);
 
--建回滚表空间2
create tablespace ROLLBACK_DATA2 datafile
'e:\oradata\roll2_1.ora' size 512M,
'e:\oradata\roll2_2.ora' size 512M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
default storage (initial 40M next 5M pctincrease 0);
 
--建临时表空间1
create tablespace TEMPORARY_DATA1 datafile
'f:\oradata\temp1_1.ora' size 512M
default storage (initial 10M next 3M pctincrease 0);
 
--建临时表空间2
create tablespace TEMPORARY_DATA2 datafile
'g:\oradata\temp2_1.ora' size 512M
default storage (initial 10M next 3M pctincrease 0);
 
--使其真正成为临时的
alter tablespace TEMPORARY_DATA1 temporary;
alter tablespace TEMPORARY_DATA2 temporary;
 
--建立新的回滚段,每个都一样大,不同大小的回滚段没有什么意义,系统是随机选择的。
--建多少个,根据并发访问用户的多少,
--如果你们公司每天有50-100个人员使用Oracle系统开发的管理软件,应该20个以上
 
create public rollback segment rb01 tablespace rollback_data1;
create public rollback segment rb02 tablespace rollback_data1;
create public rollback segment rb03 tablespace rollback_data1;
create public rollback segment rb04 tablespace rollback_data1;
create public rollback segment rb05 tablespace rollback_data1;
create public rollback segment rb06 tablespace rollback_data1;
create public rollback segment rb07 tablespace rollback_data1;
create public rollback segment rb08 tablespace rollback_data1;
create public rollback segment rb09 tablespace rollback_data2;
create public rollback segment rb10 tablespace rollback_data2;
--前8个建在回滚表空间1中,后8个在回滚表空间2
create public rollback segment rb11 tablespace rollback_data2;
create public rollback segment rb12 tablespace rollback_data2;
create public rollback segment rb13 tablespace rollback_data2;
create public rollback segment rb14 tablespace rollback_data2;
create public rollback segment rb15 tablespace rollback_data2;
create public rollback segment rb16 tablespace rollback_data2;
create public rollback segment rb17 tablespace rollback_data2;
create public rollback segment rb18 tablespace rollback_data2;
create public rollback segment rb19 tablespace rollback_data2;
create public rollback segment rb20 tablespace rollback_data2;
 
--使回滚段online,即有效
alter rollback segment rb01 online;
alter rollback segment rb02 online;
alter rollback segment rb03 online;
alter rollback segment rb04 online;
alter rollback segment rb05 online;
alter rollback segment rb06 online;
alter rollback segment rb07 online;
alter rollback segment rb08 online;
alter rollback segment rb09 online;
alter rollback segment rb10 online;
alter rollback segment rb11 online;
alter rollback segment rb12 online;
alter rollback segment rb13 online;
alter rollback segment rb14 online;
alter rollback segment rb15 online;
alter rollback segment rb16 online;
alter rollback segment rb17 online;
alter rollback segment rb18 online;
alter rollback segment rb19 online;
alter rollback segment rb20 online;
 
--查看现有回滚段及其状态
col segment format a30
SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS;
 
--查看数据文件及其所在表空间、大小、状态
col file_name format a40
col tablespace_name format a20
select file_name,file_id,tablespace_name,bytes,status from dba_data_files;
 
 
至此,表空间重新规划完毕,这里讲的比较通俗,还有好多参数值得设置,能够把Oracle设置到最优的境界,
表空间设置完了,下面,就该好好的整理一下Oracle的内存区了,
Oracle很有意思,内存越大,效果越明显,所以有必要好好调整一下SGA区,也就是主要配置ininorcl.ora参数文件。
 
 
 
 
 
 
 
 
 
 
 
 
8.用户如何有效地利用数据字典
 
ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生, 随着数据库的变化而变化,
体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。
 
    数据字典里存有用户信息、用户的权限信息、所有数据对象信息、表的约束条件、统计分析数据库的视图等。
我们不能手工修改数据字典里的信息。
 
  很多时候,一般的ORACLE用户不知道如何有效地利用它。
 
  dictionary   全部数据字典表的名称和解释,它有一个同义词dict
    dict_column   全部数据字典表里字段名称和解释
  
    如果我们想查询跟索引有关的数据字典时,可以用下面这条SQL语句:
   
    SQL>select * from dictionary where instr(comments,'index')>0;
   
    如果我们想知道user_indexes表各字段名称的详细含义,可以用下面这条SQL语句:
   
    SQL>select column_name,comments from dict_columns where table_name='USER_INDEXES';
   
    依此类推,就可以轻松知道数据字典的详细名称和解释,不用查看ORACLE的其它文档资料了。
   
    下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。
   
    一、用户
 
     查看当前用户的缺省表空间
     SQL>select username,default_tablespace from user_users;
 
查看当前用户的角色
SQL>select * from user_role_privs;
 
查看当前用户的系统权限和表级权限
SQL>select * from user_sys_privs;
SQL>select * from user_tab_privs;
 
    二、表
    
     查看用户下所有的表
     SQL>select * from user_tables;
        
     查看名称包含log字符的表
     SQL>select object_name,object_id from user_objects
         where instr(object_name,'LOG')>0;
    
     查看某表的创建时间
     SQL>select object_name,created from user_objects where object_name=upper('&table_name');
    
     查看某表的大小
     SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
         where segment_name=upper('&table_name');
    
     查看放在ORACLE的内存区里的表 
     SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;
    
    三、索引
   
     查看索引个数和类别
     SQL>select index_name,index_type,table_name from user_indexes order by table_name;
    
     查看索引被索引的字段
     SQL>select * from user_ind_columns where index_name=upper('&index_name');
    
     查看索引的大小
     SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
         where segment_name=upper('&index_name');
    
    四、序列号
   
     查看序列号,last_number是当前值
     SQL>select * from user_sequences;
   
    五、视图
   
     查看视图的名称
     SQL>select view_name from user_views;
    
     查看创建视图的select语句
     SQL>set view_name,text_length from user_views;
     SQL>set long 2000;  说明:可以根据视图的text_length值设定set long 的大小
     SQL>select text from user_views where view_name=upper('&view_name');
   
    六、同义词
   
     查看同义词的名称
     SQL>select * from user_synonyms;
   
    七、约束条件
   
     查看某表的约束条件
     SQL>select constraint_name, constraint_type,search_condition, r_constraint_name
         from user_constraints where table_name = upper('&table_name');
        
SQL>select c.constraint_name,c.constraint_type,cc.column_name 
     from user_constraints c,user_cons_columns cc
     where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
     and c.owner = cc.owner and c.constraint_name = cc.constraint_name
     order by cc.position;        
   
    八、存储函数和过程
   
     查看函数和过程的状态
     SQL>select object_name,status from user_objects where object_type='FUNCTION';
     SQL>select object_name,status from user_objects where object_type='PROCEDURE';
    
     查看函数和过程的源代码
     SQL>select text from all_source where owner=user and name=upper('&plsql_name');
    
    九、触发器
   
     查看触发器
 
     set long 50000;
     set heading off;
     set pagesize 2000;
 
     select
     'create or replace trigger "' ||
              trigger_name || '"' || chr(10)||
      decode( substr( trigger_type, 1, 1 ),
              'A', 'AFTER', 'B', 'BEFORE', 'I', 'INSTEAD OF' ) ||
                   chr(10) ||
      triggering_event || chr(10) ||
      'ON "' || table_owner || '"."' ||
            table_name || '"' || chr(10) ||
      decode( instr( trigger_type, 'EACH ROW' ), 0, null,
                 'FOR EACH ROW' ) || chr(10) ,
      trigger_body
     from user_triggers;
 
9.oracle数据库的各种文件类型和默认的存放位置这方面的资料
查询v$logfile查询oracle的重做日志文件的位置
tzxd@webora9> col member format a60 heading 'log filename'
tzxd@webora9> select * from v$logfile;
查询v$controlfile得到oracle的控制文件的位置
tzxd@webora9> col name format a60 heading 'control filename'
tzxd@webora9> select * from v$controlfile;
查询v$tempfile得到系统中临时表空间的临时表文件的位置
tzxd@webora9> col name format a50 heading 'temp filename'
tzxd@webora9> col bytes format 999999 heading 'M Bytes'
tzxd@webora9> col file# format 99
tzxd@webora9> col ts# format 99
tzxd@webora9> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
查询v$datafile得到系统中的数据文件,系统文件,回滚段文件的位置
tzxd@webora9> select file#,creation_time,ts#,status,enabled,bytes/1024/1024 bytes,name
  2  from v$datafile;
使用show parameter查出用户存放trc文件的位置
tzxd@webora9> show parameter dump_dest
 
10. Oracle数据库的几种启动和关闭方式有以下几种启动方式:
1、startup nomount
   非安装启动,这种方式启动下可执行:重建控制文件、重建数据库
 
   读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。  
2、startup mount dbname
   安装启动,这种方式启动下可执行:
   数据库日志归档、
   数据库介质恢复、
   使数据文件联机或脱机,
   重新定位数据文件、重做日志文件。
 
   执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置,
   但此时不对数据文件和日志文件进行校验检查。
 
3、startup open dbname
   先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件,
   这种方式下可访问数据库中的数据。
 
4、startup,等于以下三个命令
   startup nomount
   alter database mount
   alter database open
 
5、startup restrict
   约束方式启动
   这种方式能够启动数据库,但只允许具有一定特权的用户访问
   非特权用户访问时,会出现以下提示:
   ERROR:
   ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用
 
6、startup force
   强制启动方式
   当不能关闭数据库时,可以用startup force来完成数据库的关闭
   先关闭数据库,再执行正常启动数据库命令
 
7、startup pfile=参数文件名
   带初始化参数文件的启动方式
   先读取参数文件,再按参数文件中的设置启动数据库
   例:startup pfile=E:\Oracle\admin\oradb\pfile\init.ora
 
8、startup EXCLUSIVE
============================================
有三种启动方式:
1、shutdown normal
   正常方式关闭数据库。
 
2、shutdown immediate
   立即方式关闭数据库。
   在SVRMGRL中执行shutdown immediate,数据库并不立即关闭,
   而是在Oracle执行某些清除工作后才关闭(终止会话、释放会话资源),
   当使用shutdown不能关闭数据库时,shutdown immediate可以完成数据库关闭的操作。
 
3、shutdown abort
   直接关闭数据库,正在访问数据库的会话会被突然终止,
   如果数据库中有大量操作正在执行,这时执行shutdown abort后,重新启动数据库需要很长时间。
11.ORACLE数据库常见问题诊断方法---(常见错误篇)
1.ORA-12571、ORA-03113、ORA-03114、ORA-01041
特征:客户端(代理或应用服务器)有时报这类断连错误
原因:如果偶尔出现一次,则可能为网络原因或用户异常中止,如果经常出现则为客户端与服务端的字符集不一致。
措施:如果偶尔出现,可在服务端的协议配置文件PROTOCOL.ORA中增加一行TCP.NODELAY=YES;
 
如果经常出现,则为客户端与服务端字符集不一致或网络原因。
客户端的字符集在注册表里定义:HKEY__LOCAL__MACHINE/SOFTWARE/ORACLE/NLS__LANG
在客户端注册表中的TCP参数项中设置TCPMAXDATARETRANSMITIONS=20。
2.ORA-01000
特征:达到会话允许的最大游标数
原因:达到会话允许的最大游标数
措施:有两种解决方法:
(1)在初始化文件INIT<SID>.ORA文件中增加OPEN_CURSORS的数量,一般要求大于200。
(2)在应用级,与开发工具有关,例如设置MAXOPEN_CURSORS等。
3.ORA-01545
特征:某个回滚段不可用
原因:
(1)当使回滚段ONLINE时,但回滚段不可用,例如回滚段所在表空间OFFLINE;
(2)当使回滚段ONLINE时,但回滚段已ONLINE,例如回滚段被使用两次,典型的案例如OPS方式时,回滚段不能公有;
(3)删除回滚段时,回滚段中有活动的事务;措施:
    (1)确保回滚段可
    (2)从初始化文件INIT<SID>.ORA的参数ROLLBACK)SEGMENTS中删除指定的回滚段。
    (3)可以将回滚段所在表空间删除,取消UNDO事务
4.ORA-0165x
特征:表空间没有足够的空间供分配
原因:表空间已满;存储参数不合理,NEXT太小;没有连续的区间
措施:如果表空间已满,则需为表空间增加文件;如果存储参数不合理,则需增加INITIAL和NEXT;如果没有连续的区间,
需要合并空闲的表空间。
查看空间碎片用DBA_FREE_SPACE
5.ORA-01555
特征:当前会话无法读到以前版本的数据
原因:原因很多,主要原因有下列:回滚段太小、太少;回滚段冲突;交叉提交(FETCH_ACROSS)
措施:增加回滚段数量;
6.ORA-04031
特征:共享池内存区内存不够,或产生内存碎片
原因:当试图装载一个大包时或执行一个较大的存储过程时,而共享池没有连续的内存空间。
措施:如果是内存不够,则增加SHARE)POOL_SIZE;
如果是内存碎片,执行altersystemflushshare_pool
7.ORA-04091
特征:触发器工作不正常
原因:一个行触发读取或修改变化的表(正在修改、插入)时,产生这种错误。
措施:检查触发器脚本,保证引用完整性
 
8.ORA-01242、ORA-01113
特征:介质故障导致数据库宕机
原因:介质故障。
 
措施:检查硬件故障;修改dbshut脚本,将其中的STARTUP命令修改为:
Startupopenrecover
Alterdatabaseopen
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Oracle备份与恢复案例(五)
ORACLE备份&恢复案例之四
提高ORACLE数据库的查询统计速度
Oracle学习笔记(8)管理回滚数据
Oracle表空间(tablespaces)
深入浅出Oracle学习笔记(7)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服