本篇博文是我在刚学习完之后整理的东西,可能比较的浅,只是一些基础的知识,但这也是入门之前应该有的功底,希望有错误的地方能有大神指点。
1
Oracle Enterprise Manager : 图形化管理监控工具,管理监控数据库。
( 1 )
配置 Oracle Enterprise Manager
(1) 在终端输入命令 sqlplus / as sysdba; 输入sql语句查询实例名:select instance_name fro m v$instance;
(2) 输入 emca -config dbcontrol db -repos recreate
提示输入数据库 SID : instanceName
输入 sys 、 dbsnmp 、 sysman 的口令
(3) 显示数据库主目录,本地主机名,监听程序、端口号,数据库 SID 等信息,输入 y 继续
(4) 开始配置 enterprise manager
(5) 输入 emctl status dbconsole 查看 database control 的状态,看 是否启动,如未启动,输入 emctl start dbconsole 启动
(6) 打开浏览器,输入地址进入 Oracle enterprise manager 11g database control
(7) emctl stop dbconsole --------- 停止 Database Control
oem使用图像化管理监控数据库。架构分别的的是 databases control ( 管数据的接口) 和 repositery (资料库) 。 repos在本地的表空间sysaux中 emca创建oem:config all db [-repos (create | recreate)],没有repos就create ,存在repos就recreate.自动把repos放在当 前 所在数据库的console中,要启动oem就需要先启动数据库。 database control一个oem只能监听一台数据库。
( 2 )
( 3 )
2
( 1 )
从 Shell 脚本 调用 SQL*Plus 通过调用 sqlplus 和使用操作系统脚本语法来传递参数,可从 shell 脚本或 BAT 文件调 用 SQL*Plus。
( 2 )
新建了一个脚本后执行操作sh vim 1.sh sqlplus /as sysdba <<aaa------- 输入重定向 ,可以在操作系统运行时,进入sqlplus执行 select * from t1; select * from t1; aaa ls -l /home/oracle 运行 sh 1.sh 就能执行sh这个文件,执行完后这个文件执行了sqlplus的命令和ls的命令; 或者 sqlplus /as sysdba select * from t1; select * from t1; ! ls -l /home/oracle ------ 也可以执行完sqlplus后直接进入操作系统进行相关的操作, 注 : !的使用,是在sqlplus中调用操作系统的命令。 </a<>
3
数据库启动与关闭
( 1 )
SQL> startup ; -------- 该命令启动实例,将数据库文件与该实例关联,然后装载并打开数据库
SQL> startup nomount ------ 开启实例(读取 parameter files) 该命令启动实例,但不装载数据库,没有关联数据库,先放出资源
SQL> alter database mount; -------- 该命令装载处于 NOMOUNT 状态的数据库。 把实例与数据库联系起来 --------> 读取 control_files (属于数据库) ------> 在参数文件中查找。
SQL> alter database open; -------- 该命令打开处于 MOUNT 状态的数据库。open状态是找相对应的数据库文件
启动到nomount阶段需要读取参数文件,数据库只要是静态参数文件启动了nomount阶段就不能动态修改参数文件,需要修改就需要关闭修改静态参数文件。spfileoracl.ora动态参数文件。init.ora静态参数文件。 mount状态时,找到了相对应的控制文件就能启动mount,不能少一个控制文件,有几个就要找到几个,否则无法启动 mount,把实例和控制文件连接起来了。
动态参数文件( spfile)
所谓的 动态 ,就是说你可以在 不关 实例 的情况下, 更改数据库参数, 记录在 spfile 里面。更改参数的时候,有 3 种 scope 选项 .
1
scope= both : 必须以下两项都满足
2
scope= memory : 仅仅更改内存,不改 spfile 。也就是 重新 启动就失效了 , 就会恢复原值 。 ++ scope=both 内存和 spfil _ e 都更改 ++ 不指定 scope 参数,等同于 scope=both.
3
scope= spfile : 仅仅更改 spfile 里面的记载,不更改内存,也就是不立即生效 , 必须 重启实例才能生效 。
静态参数文件( pfile )
不可以进行修改,必须得关闭实例了才能进行修改。
注:
动态参数文件什么都不加的时候, scope 默认的是 both
静态参数文件什么都不加的时候默认, scope 默认的是 memory
指定静态参数文件开启: startup pfile=/u01/app/……../initprod1.ora
select NAME,ISSES_MODIFIABLE,ISSYS_MODIFIABLE from v$system_parameter ;
cd /u01/app/oracle/diag/rdbms 后台控制文件位置 ---------> log.xml文件为告警日志 --------->ls--------> 显示prod2为db_unique_name --------> 显示prod2为db_unique_name ---------> log.xml文件为告警日志 动态参数文件 -------> alter system set open_cursors=500 ( 默认为scope为bo th); 动态参数文件什么都不加的时候, scope 默认的是 both -------------> alter system set open_cursors=500等于alter system set open_cursors=500 scope=memory ( 静态参数文件什么都不加的时候默认, scope 默认的是 memory)
参数文件有动态参数文件 先读动态 没有再读静态。 要是存在动静态参数文件,要想读 静态 可以 startup file=<静态参数文件位置>。 静态参数文件不能更改位置 ,动态文件可以修改文件位置. 可以做个实验,将动态参数文件移至别处,然后可以在静态参数设置一个spfile=<动态参数文件的位置>,这样我们就可以修改动态参数文 件的位置并通过这种方式进行访问,但是反过来,换了静态参数文件的位置,这么指向就不可行了 .
查看参数文件: SQL>show parameter_pfile;
cd $ORACLE_HOME
pwd----> 查看当前路径
cd /dbs
修改动态参数文件( spfile):
SQL>create pfile from spfile;
vim initPROD1 .ora
SQL>create spfile from pfile;
修改初始化参数
SQL>show parameter processes;
SQL>show parameter db_files;
SQL>alter system set processes=500 scope=spfile;
SQL>alter system set job_queue_processes=500;
SQL>alter system set db_files=500b scop=spfile;
SQL>shutdown immiediate;
SQL>startup
SQL>show parameter processes;
SQL>show parameter db_files;
SQL>startup force;----> 重启
关闭实例:
Shutdown nomoral
1
可以建立新的连接
2
oracle 服务器在完成关闭之前先等待所有用户断开连接
3
数据库和重做缓冲区被写入磁盘当中
4
后台进程已经终止,从内存中删除了 SGA
5
oracle 服务器在关闭实例之前先关闭数据库
6
下一次启动的时候不需要进行实例恢复
Shutdown t ransaction a
1
采用事物处理的关闭方式可防止客户机数据丢失
2
不能启动新事物处理
3
会等待客户机结束正在进行的事物处理后断开客户机
4
完成所有事物后立即执行关闭
5
下一次启动的时候不需要进行实例恢复
shutdown immediate
18
执行立即关闭数据库
2
oracle 数据库正在处理的当前的 SQL 语句未完成
3
oracle 服务器不等待当前连接到数据库的用户断开连接
4
oracle 服务器会 回退活动的事物处理 ,而且会断开所有用户连接
5
oracle 服务器在关闭实例之前关闭并断开数据库
6
下一次启动不需要进行实例恢复
shutown abort
1
相当于直接断电的方式
2
oracle 数据库正在处理的当前的 SQL 语句会立即终止
3
oracle 服务器不等待当前连接到数据库的用户断开连接
4
数据库和重做缓冲区并没有写入磁盘
5
不回退未提交的事物处理
6
实例已经关闭,但是并没有关闭文件
7
数据库没有关闭
8
下一次启动时要进行实例恢复,实例恢复是自动进行的
4
警告日志;
用命令行得到警告日志的路径:
oracle10g 的查询方法: show parameter background_dump_dest
Oracle11g 的查询方法: show parameter background_dump_dest
select value from v$diag_info where name='Diag Trace';
select value from v$diag_info where name='Diag Alert';
5
创建表空间: SQL> create tablespace enmo datafile '/u01/app/oracle/oradata/ENMO11G/enmo_01.dbf' size 10m;
修改表空间: SQL> alter tablespace enmo add datafile'/u01/app/oracle/oradata/ENMO11G/enmo_01.dbf'size 20;
修改文件: SQL> alter database datafile '/u01/app/oracle/oradata/ENMO11G/enmo_01.dbf'size 20;
alter session 是在 会话级别 对某些参数进行更改,在 v$parameter 视图中的 ISSES_MODIFIABLE 字段为 true 的表示这个参数可以使用 alter session 修改;
alter system 是在 系统级别 对某些参数进行更改,它的影响不仅仅是某个会话,而是整个实例。在 v$parameter 视图中的 ISSYS_MODIFIABLE 字段为 immediate 和 deferred 的表示这个参数可以使用 alter system 命令修改。
alter system 命令在中,如果你的 scope 指定如下的指,它们分别代表不同的含义:
j/
scope=spfile 表示会在 spfile 中修改这个参数,在正在运行的实例的内存中不进行修改,那么只有数据库的实例重启以后,对这个参数的修改才会起作用;
scope=memory 表示在当前实例的内存中修改这个参数,而不在 spfile 中修改,那么这个参数的修改会影响到当前实例的运行,而如果数据库重新启动以后,你这次对这个参数的修改是没有起作用的。
scope=both , 以上两种情况都得满足 。
6
创建用户: SQL>create user enmo identified by enmo;
赋权限: SQL>grant create session to enmo;
SQL>grant create table to enmo;
SQL>grant unlimited tablespace to enmo;-----> 给插入数据赋权限
7
系统权限:
1
Create table;create user;create session;create view;drop user; drop table 。。。。。。。。。
( 1 )
创建测试环境,创建用户 enmo ,赋予 create session 权限(即 connect 角色中的唯一权限)及 resource 角色
SQL>create user enmo identified by enmo;
SQL>grant create session,resource to enmo;
连接到测试用户 enmo ,查看当前用户的系统权限;
SQL>select * from session_privs;
8
对象权限:
1
Alter table ; delete table;update ; select ;index
(1)
将 hr 用户的 jobs 表的查询权限赋予 scott
SQL>conn hr/hr
SQL>grant select on jobs to scott;
SQL>conn scott/oracle
SQL>select count(*) from hr.jobs;
(2)
查看当前用户下所有的对象权限
SQL>select * from user_tab_privs_recd;
(3)
通过 SCOTT 更新 hr 的 jobs 表的 max_salary 字段,更新条件为 job_id='ST_MAN'; 将 max_salary 更新为 9000 ;
SQL>select * from hr.jobs where job_id='ST_MAN';
SQL>update hr.jobs set max_salary=9000 where job_id='ST_MAN';--------- 发生错误!
原因:因为 scott 没有更新 hr.jobs 的对象权限
SQL>conn hr/hr
SQL>grant update(max_salary) on jobs to scott;---- 在赋予对象权限的时候,可以只赋予更新某个字段的更新权限
SQL>conn scott/oracle
SQL>select * from hr.jobs where job_id='ST_MAN';
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30606702/viewspace-1874771/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30606702/viewspace-1874771/