Oracle DBA需要了解的一些基本概念,这里把自己的一些经验分享下,如有错误请指出,谢谢!
1. Oracle安装过程中如果不设置新的用户,默认只有SYS,SYSTEM,SYSMAN,DBSNMP这4个用户,其中SYS是Oracle中权限最高的账户,拥有创建数据库(CREATE DATABASE)的权限。这里所说的数据库是指Oracle安装时通过Database Configuration Assistant配置的实例,比如默认的orcl,也就是SID(System Identifier),在配置过程中向导会执行createdb.sql脚本来创建数据库文件,这个脚本的位置和内容可能是:
### /u01/app/oracle create database orcl MAXINSTANCES 1 MAXLOGHISTORY 1 MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXDATAFILES 100 DATAFILE '/u01/app/oracle/oradata/orcl/system01.dbf' size 100m reuse autoextend on next 1m maxsize unlimited extent management local sysaux datafile '/u01/app/oracle/oradata/orcl/sysaux01.dbf' size 100m reuse autoextend on next 1m maxsize unlimited default temporary tablespace TEMP tempfile '/u01/app/oracle/oradata/orcl/temp01.dbf' size 20m reuse autoextend on next 640k maxsize unlimited undo tablespace UNDOTBS1 datafile '/u01/app/oracle/oradata/orcl/undo01.dbf' size 20m reuse autoextend on next 5M maxsize unlimited logfile GROUP 1 ('/u01/app/oracle/oradata/orcl/redo1.dbf') size 10m, GROUP 2 ('/u01/app/oracle/oradata/orcl/redo2.dbf') size 10m, GROUP 3 ('/u01/app/oracle/oradata/orcl/redo3.dbf') size 10m, CHARACTER SET ZHS16GBK NATIONAL CHARACTER SET AL16UTF16
以上脚本创建了一个数据库orcl,数据文件的位置在/u01/app/oracle/oradata/orcl/目录下,也就是说,如果要新建另一个SID(数据库),可以使用sys用户登录连接到oracle后执行对应createdb.sql脚本就可以了。
另外,SYS用户的角色是SYSDBA,SYSDBA是Oracle中拥有权限最高的角色,用于管理数据库。除了SYSDBA角色外,还有SYSOPER角色,用于操作数据库,SYSTEM用户的角色就是SYSOPER,SYSTEM用户不能进行创建数据库的操作。其他用户的角色只能由SYS和SYSTEM用户授予,由于SYSTEM的权限小于SYS,因此SYSTEM的角色也可以被SYS更改。另外,DBA角色不同于SYSDBA和SYSOPER角色,DBA角色不具有上述两个超级用户的特权。
如果安装过程中没有修改密码,SYS的默认密码为:change_on_install;SYSTEM的默认密码为:manager。
2. 创建Oracle普通用户时,需要为用户确定2件事,(1)为用户设置表空间(2)为用户分配角色。设置表空间的目的是为了与系统表空间区分开,在物理上的表现就是磁盘上独立的数据文件。表空间包含数据表空间和临时表空间,创建用户时最好两个表空间都指定。比如使用下面的脚本创建数据表空间:
create tablespace test_ts logging datafile '/u01/app/oracle/oradata/orcl/test_ts.dbf' size 100m autoextend on next 16m maxsize 2048m extent management local;
脚本含义不再赘述,有问题可以Google。这里可以看出,Oracle中的表空间就相当于SQL Server中的独立数据库。
临时表空间可以使用下面的脚本创建:
create temporary tablespace test_ts_temp tempfile '/u01/app/oracle/oradata/orcl/test_ts_temp.dbf' size 100m autoextend on next 16m maxsize 2048m extent management local;
删除表空间(包括所有内容和数据文件并且级联删除外键):
drop tablespace test_ts including contents and datafiles cascade constraints;
表空间建立后就可以使用下面的脚本创建用户了:
create user new_user identified by user_pwd default tablespace test_ts temporary tablespace test_ts_temp;
删除用户(包括级联对象):
drop user new_user cascade; ## 别忘了提交事务: commit;
角色是一组权限的集合,也就是说角色由多个权限组成,为用户分配角色就会将这个角色中的所有权限赋予用户,方便管理。另外,为用户分配角色的过程是必须的,否则用户无法登录或操作数据库,为用户分配角色可以使用下面的脚本:
grant connect,resource to new_user;
就为用户new_user分配了connect和resource角色,connect和resource角色是一般用户需要被分配的默认角色。
如果需要分配自定义角色,可以新建一个角色并赋予特定的权限:
create role new_role; grant create table,create procedure to new_role; grant new_role to new_user;
权限回收(权限或角色):
revoke dba from new_user; revoke create trigger from new_role; ## 别忘了提交事务: commit;
3. Oracle数据库的备份和恢复不用进入sqlplus,在命令行下就可以操作:
导出整个数据库:
exp system/manager@orcl file=~/export_full.dmp full=y
还原整个数据库:
imp system/manager@orcl file=export_full.dmp full=y ignore=y
导出数据库orcl下GIS用户的所有对象:
exp system/manager@orcl file=~/exp_gis.dmp owner=(gis)
导出表gis_title和gis_type的所有内容:
exp gis/gis@orcl file=~/exp_gis_new.dmp tables=(gis_title,gis_type)
导出命令中还可以附加查询语句:
exp system/manager@orcl file=exp_gis_test.dmp tables=(gis_test) query="where name like '%test%'"
还原数据库orcl下GIS用户的所有对象:
imp gis/gis@orcl file=exp_gis.dmp ignore=y
注意:使用exp命令进行数据库导出时如果出现下列错误,在括号前加转义字符“\”即可。
-bash: syntax error near unexpected token `(' exp system/manager@orcl file=~/exp_gis.dmp owner=\(gis\)
另外一些SQL的常用查询可以参考这里,在此对作者表示感谢。