分享

Oracle实践总结

 月影斜 2010-05-07
1.如何知道哪些表没有建立主键?
Select table_name from user_tables t
Where not exists (select table_name from user_constraints c where constraint_type=’P’ and t.table_name=c.table_name)
2.相关数据字典的意义
User_tables 表
User_tab_columns 表的列
User_constraints 约束
User_cons_columns 约束与列的关系
User_indexes 索引
User_ind_columns 索引与列的关系
3.关于角色和权限
对于数据库管理员,应该授予DBA角色;对于数据库开发用户,只需要授予CONNECT和RESOURCE角色
Oracle数据库的权限分为系统权限和对象权限。前者在系统级控制对数据库的存取和操作,如用户是否能通过建立会话而连接到数据库,是否能启动、停止数据库,是否能修改数据库参数等;对象权限在方案级控制对数据库的存取和操作,如用户可以存取哪个方案中的对象,是否能对该对象进行查询、插入、更新等。
4.关于Oracle的回收站以及闪回技术
用drop命令删除的表其实并没有物理删除,而是放在了回收站里,还占用着数据库空间。用select * from  User_recyclebin就可以看到回收站中的表。
Purge table temp1—将回收站中的某个表彻底删除
Purge recyclebin:清空oracle的回收站;
Flashback table tablename to before drop(rename to temp2) —还原某张表(可以进行更名);
Flashback table temp to timestamp(systimestamp-interval ‘1’ minute) ---恢复到1分钟前的数据(也可以是second等),但是要注意,首先要启动表的行移动功能:alter table temp enable row movement;
5.选择数据库实例
Windows下:set oracle_sid=…
Unix下:export oracle_sid=…
6.表和表之间的关联更新
Update file_dept a set a.id=(select b.id from temp1 b where a.dept_id=b.dept_id)
7.创建用户:
第一步:建立用户
Create user web identified by web
Default tablespace web
Temporary tablespace temp
Profile “DEFAULT”—大写
Account unlock; —未锁定
第二步:授予权限
与scott相同:grant connect to web;
Grant resource to web;
Grant create view to web;
8.删除某个用户的连接
Select sid,serial#,status from v$session where username=’…’
Alter system kill session ‘sid,serial#’;
9.启动关闭监听
>lsnrctl start
>lsnrctl stop
>lsnrctl status
10.启动和关闭数据库
Ø  启动数据库
>startup nomount ---启动例程,但不装载数据库,并未打开控制文件和数据文件
>startup mount ---启动例程并装载数据库,但不打开数据库,打开控制文件,但并未打开数据文件
>startup open ---启动例程,装载数据库,打开数据库,既打开了控制文件也打开了数据文件
>startup force ---强制启动
>startup restrict
>startup pfile=… ---注意是pfile,不是spfile。可以先用create pfile=… from spfile=…语句将服务器初始化文件导出成文本初始化参数文件后,再使用导出后的文本初始化参数文件
Ø  关闭数据库
过程:关闭数据库-->卸载数据库-->终止例程
语法:shut down[ normal | transactional | immediate | abort ]
尽量避免用abort选项来关闭数据库,如果想尽快关闭,可以使用IMMEDIATE选项,这样所有未提交的事物均被回退,使数据信息以及完整性得以保证。
Ø  说明
在NOMOUNT启动模式下,只能访问那些与SGA区相关的数据字典视图,如V$PARAMETER,V$SGA,V$OPTION,V$PROCESS,V$SESSION,V$VERSION,V$INSTANCE等。这些视图中的信息都是从SGA区中获取的,与数据库无关;
在MOUNT启动模式下,除了可以访问那些与SGA区相关的数据字典视图之外,还可以访问到那些与控制文件相关的数据字典视图,如V$THREAD,V$CONTROLFILE,V$DATABASE,V$DATAFILE,V$LOGFILE等,这些视图中的信息都是从控制文件中获取的。
11.更改用户密码
当忘记了system与sys的密码时,可用如下方法更改:
C:>sqlplus/nolog
SQL>connect 空格/空格 @myoracle as sysdba
SQL>alter user system identified by manager
要注意的是,以上方法只能在服务器端执行,客户端不能执行。
12.设置主机首选身份证明
1).选择“开始”-->“程序”-->“管理工具”-->“本地安全策略”,打开“本地安全策略”窗口
2).选择“本地策略”中的“用户权限分配”项
3).在右边的“策略”列中双击“作为批处理作业登录”项,打开其属性对话框
4).将Administrator加入用户中,这样,该用户就有了“作为批处理作业登录”的权限
13.如何将数据库从noarchivelog改成archivelog方式?
首先打开INIT.ora文件,确保存档日志目标指向一有效目录,然后启动sqlplus
SQL>shutdown immediate
SQL>startup mount
SQL>alter database archivelog
SQL>alter database open
SQL>archive log list ---列出现在数据库是否归档
在INIT.ora中设置参数archive_log_start=true,它设置存档日志为自动启动。
14.创建表空间的SQL
Create smallfile tablespace “FILEEXCHANGE”
Datafile’D:\oracle\myoracle\fileexchange.dbf’ size 10M
Reuse autoextend on next 5120k MAXSIZE 32767M—最大
Nologging extend management local—区管理方式:本地管理
Segment space management Auto—使用Auto段管理方式
15.Sqlplus技巧
清屏:SQL>ho cls
Sqlplus中的所有命令可用>help index看到,关于每个指令具体的用法可用>?…或help …来查看。
16.修改系统日期格式
Alter session set NLS_DATE_FORMAT=’dd-mon-yyyy hh:mi:ss’;
Select current_date from dual;
Select sysdate from dual;
17.如何将角色赋予用户
1).创建一个角色:create role myrole;
2).将对scott.dept表的select权限赋予这个角色:grant select on scott.dept to myrole;
3).将这个角色赋予用户test:grant myrole to test.
18.SQLLoad的使用
1).数据文件Loader.txt,文件内容如下
abcd,qq
abc,ee
2).控制文件cont.ctl(以ctl为后缀),内容如下:
Load data
Infile ‘c:\loader.txt’ ---数据文件
Append
Into table mm(
M1 char terminated by “,”,
M2 char terminated by “,”)---用逗号分隔字段
3).执行命令:>sqlldr scott/tiger control=c:\cont.ctl data=c:\loader.txt
如果成功就会提示:commit point reached—logical record count 3—表示插入了3条记录
如果每列长度固定,那么可写成mm(m1 position(1:3) char,m2 position(5:7) char)—表示提取1-3位和5-7位
4).SQLLoader的4种装入表的方式:
APPEND:原先的表有数据,就加在后面;
INSERT:装载空表,如果原先的表有数据,SQLLoader就会停止
REPLACE:原先的表有数据,原先的数据会全部删除
TRUNCATE:指定的内容和REPLACE相同,会用truncate语句删除现存数据
19.如何查看对象所占用的空间
Ø 查看表和索引的大小:select * from user_segments where segmentname=’’
Ø 查看此用户所有对象所占空间大小:select sum(bytes) from user_segments;
Ø 查看每个用户表空间的大小(已使用的表空间,而不是初始化分配的空间):select tablespace_name sum(bytes)/1024/1024 from dba_segments group by tablespace_name
Ø 查看当前用户每个表占用空间的大小:select segment_name,sum(bytes)/1024/1024 from user_extents group by segment_name
20.查看一个表所用的分区
Select table_name,partition_name
from user_tab_partitions
where table_name=’daryxxb’
21.将一个schema中的对象导入到属于另一个表空间的schema中
>imp system/manager@myoracle from user=web to user=net tablespaces=net file=f:\web.dmp
22.数据库链(Database link)
1).创建(首先要有create public database link权限)
Create public database link remotedb using ‘remote’;表示用目前用户去链接远程服务器,如果要指定用户名,则在using前加上connect 用户名 identified by 口令,最后的’remote’是连接字符串
2).应用数据库链
Select * from tablename @remotedb;
复制表结构:create table test as select * from test @remotedb where 1=2;
也可以远端进行Update、insert操作
3).删除(要有drop public database link权限)
Drop public database link remotedb;
4).查询数据库链信息
Dba_db_links,all_db_links,user_db_links
23.物化视图
1).主键物化视图          
create materialized view mv_emp_pk
Refresh fast start with sysdate next sysdate+1/48 with primary key
As select * from emp@remotedb;
注意:当用fast选项创建物化视图,必须创建基于主表的视图日志,如下:
Create materialized view log on emp;
2).Rowid 物化视图
Create materialized view mv_emp_rowid
Refresh with rowid
As select * from emp@remote_db
3).Refresh选项说明
Ø Oracle是用刷新方法在物化视图中刷新数据
Ø 是基于主键还是基于rowid的物化视图
Ø 物化视图的刷新时间和间隔刷新时间
4).Refresh的方法
Ø Fast—增量刷新,用物化视图日志来发送主表已经修改的数据行到物化视图中
Ø Complete—完全刷新,重新生成整个视图
Ø Force—如果增量刷新可用将完成增量刷新,否则完成完全刷新
24.关于归档日志的空间问题
Ø 查看归档日志的容量使用:select * from v$recovery_file_dest;
Ø 更改归档日志容量空间:
alter system set db_recovery_file_dest_size=8G scope=BOTH;
Alter database open;
Ø 手动删除归档日志文件,需要以下几步:
手动删除archivelog文件夹中的早期的归档日志文件
登录rman :>rman target /
对归档日志进行验证:rman>crosscheck archivelog all;
删除失效的归档日志:rman>delete expired archivelog all;
25.备份与还原
数据文件的联机备份(热备份)
第一步:将数据库置为归档日志状态:
1).首先查看是否是归档日志模式 >archive log list;
2).如果不是,那么将其设为归档模式 >alter system set log_archive_start=true scope=spfile
3).关闭数据库 >shutdown immediate
4).启动数据库为Mount方式 >startup mount
5).将数据库切换到归档日志模式:>alter database archivelog
6).打开数据库 >alter database open;
7).这时再查看 >archive log list;便显示是归档日志模式了
第二步:备份与恢复
1).alter tablespace web begin backup
2).将表空间web的数据文件进行备份
3).Alter tablespace web end backup;
4).将当前的联机日志进行归档:>alter system archive log current
5).将日志文件切换:>alter system switch logfile; 有几个日志文件就进行几次切换
6).关闭数据库 >shutdown immediate
下面是模拟错误:
7).将web的数据文件删除
8).打开数据库:>startup open;报错—web.dbf文件不能找到
9).让此数据文件脱机,并drop掉>alter database datafile 6 offline drop;6代表6号文件,也就是web.dbf文件
10).将数据库打开>alter database open;
11).将备份的web.dbf文件拷贝到原来的位置
12).恢复数据文件:>recover datafile 6; auto;
13).让数据文件联机:>alter database datafile 6 online;
14).这样,便可以查询web表空间中的数据了
控制文件的备份
1).>alter database backup controlfile to trace; 备份控制文件,会存放在…\admin\myoracle\udump\目录下最近的一个文件,这个文件中的语句就是执行控制文件时的脚本
2).将文件中的语句拷贝出来,另存为一个文件,比如create_ctl.txt
3).关闭数据库
4).执行加载控制文件:sql>@c:\create_ctl.txt;这样就重新创建了控制文件,并且将数据库打开了
日志文件的备份
当日志文件丢失后,可采用如下方法:
1).基于取消的恢复数据库: >recover database until cancel;
2).重新生成日志文件:>alter database open resetlogs;
脱机备份
1).整理需要备份的文件,包括参数文件、控制文件、数据文件和重做日志文件
Ø  参数文件:…\db_1\database\init<sid>.ora 以及关于此sid的所有文件
Ø  控制文件:select status,name from v$controlfile;
Ø  数据文件:selelct status,name from dba_data_files;
Ø  重做日志文件:select group#,status,member from v$logfile
2).用sysdba身份用户登录后,>shutdown immediate;关闭数据库
3).将上述整理的文件一一进行备份
4).打开数据库 >startup open;
恢复:当文件丢失,就需要恢复数据库
1).关闭数据库:>shutdown immediate
2).将所有的备份文件复制到原来所在的位置,不得漏掉一个,以便恢复备份时刻数据库的镜像
3).恢复完成后,以open方式启动数据库 >startup open;
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lihui_79/archive/2009/04/10/4060010.aspx

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多