2007年12月28日星期五

Oracle学习笔记20071227

管理角色
角色类似于部门,成员,某个部门需要有特殊的权限,而对应得员工就应该有相应的权限
对应语句
SQL>CREATE ROLE oe_clerk;
SQL>CREATE ROLE hr_clerk IDENTIFIED BY bonus;
SQL>CREATE ROLE hr_manager IDENTIFIED EXTERNALLY;

已经定义好的角色connect,resource,dba 这些权利提供了什么什么的协调性(backward compatibility)
exp_full_database 管理进入的database
imp_full_database 管理出去的database
delete_catalog_role delete权限角色
execute_catalog_role execute执行权限角色
select_catalog_role select权限角色

修改角色
SQL>ALTER ROLE oe_clerk IDENTIFIED BY order;
SQL>ALTER ROLE hr_clerk IDENTIFIED EXTERNALLY;
SQL>ALTER ROLE hr_manager NOT IDENTIFIED;


分配角色:
SQL>GRANT oe_clerk TO scott;
SQL>GRANT hr_clerk TO hr_manager;
SQL>GRANT hr_manager TO scott WITH ADMIN OPTION;


建立默认的角色:
SQL>ALTER USER scott DEFAULT ROLE hr_clerk, oe_clerk;
SQL>ALTER USER scott DEFAULT ROLE ALL;
SQL>ALTER USER scott DEFAULT ROLE ALL EXCEPT hr_clerk;
SQL>ALTER USER scott DEFAULT ROLE NONE;


运用角色(Application roles)
SQL>CREATE ROLE admin_role IDENTIFIED USING hr.employee;

admin_role就是一个应用角色,只能通过hr.employee里面定义的模块来启用

开启和关闭角色
SET ROLE选项开启和关闭角色

SQL>SET ROLE hr_clerk;
SQL>SET ROLE oe_clerk IDENTIFIED BY order;
SQL>SET ROLE ALL EXCEPT oe_clerk;

可以使用alter user ... default role来指定用户登录时的缺省角色
SQL>set role oe_clerk identified by order;
SQL>set role all except oe_clerk;

后面的命令只在所有的角色不需要密码时才可以
回收角色权限
SQL>REVOKE oe_clerk FROM scott;
SQL>REVOKE hr_manager FROM PUBLIC;

删除角色
SQL>DROP ROLE hr_manager;

和role有关的视图
DBA_ROLES,DBA_ROLE_PRIVS,ROLE_ROLE_PRIVS,DBA_SYS_PRIVS,ROLE_SYS_PRIVS,ROLE_TAB_PRIV,SSESSION_ROLES

全球支持Unicode 数据类型选择数据库字符集考虑事项数据库必须支持哪些语言?
有哪些互操作与系统资源和应用程序相关?对性能的要求如何?有哪些限制条件?尽管数据库可以维护和处理实际字符数据,但是您还必须依赖操作系统中的其它资源。
例如,操作系统提供与所选字符集相对应的字体。另外,支持所需语言和应用程序软件的输入法也必须与特定字符集保持一致。如果所选的字符集与操作系统中的可用字符集不同,Oracle 会将操作系统字符集转换为数据库字符集。但是,这样做会产生一些字符集转换开销,同时您应确保操作系统字符集中包含等价的全套字符,以避免可能出现的数据丢失情况。为了获得最佳性能,您应该尝试选择一个无需进行转换的字符集,并将对所需语言使用最有效的编码方案。单字节字符集在性能方面要优于多字节字符集,此外,在空间需求方面,该字符集也是最有效的。但是
,单字节字符集对所能使用的语言数目有所限制。
AL16UTF16 和 UTF8 这两种选择都适用于国家字符集。AL16UFT16 是宽度固定的双字节 Unicode 字符集。而 UTF8 是宽度可变的、一至三个字节的 Unicode 字符集。欧洲字符在 UTF8 中按一至两个字节存储,而在 AL16UTF16 中按两个字节存储,相比之下,前一种 选择可以节省空间。亚洲字符在 UTF8 中按三个字节存储,这样,所需的空间比在 AL16UTF16 中要多。要将多语言 BLOB 和 Oracle 文本一起使用,则必须使用 Unicode 数据库解决方案。初始化参数 NLS_LANGUAGE 定义语言相关惯例值,例如:Oracle 消息所使用的语言日期和月份名称及其缩写所使用的语言a.m.、p.m.、A.D. 和 B.C. 的等价语言所使用的符号缺省的字符数据排序顺序初始化参数 NLS_LANGUAGE 定义地域相关惯例值,其中包括:缺省日期格式十进制字符和组分隔符本地货币符号ISO 货币符号ISO 周数计算一周起始日当地域名包含空格时,如 The Netherlands,应该用双引号将地域名引起来,如 “The Netherlands”。
相关语言和地域的缺省值
NLS_LANGUAGE : AMERICANNLS_DATE_LANGUAGE : AMERICANNLS_SORT : BINARYNLS_TERRITORY :AMERICANLS_ISO_CURRENCY :AMERICANLS_DATA_FORMATE :
DD-MON-RR初始化参数
NLS_LANGUAGE 确定下列参数的缺省值:NLS_DATE_LANGUAGE:显式更改日期、月份名及其缩写和其它日期格式元素的拼写值所使用的语言。
NLS_SORT:更改 Oracle 服务器用于排序字符值的文字排序顺序(排序值必须是是文字排序顺序名。)NLS_CURRENCY:显式指定新的本地货币符号NLS_ISO_CURRENCY:显式指定应使用 ISO 货币符号的地域NLS_DATE_FORMAT:显式指定新的缺省日期格式(值必须是 日期格式模型。)NLS_NUMERIC_CHARACTERS:显式指定新的十进制字符和组分隔符1999 年 1 月 1 日,欧共体新货币-欧元首次亮相。为了支持这个新的欧共体货币,新增 了对特定国家
的双重货币支持。初始化参数 NLS_DUAL_CURRENCY 为用户会话设置一个代用货币符号。WE8ISO8859P15 和 MS 代码页 WE8MSWIN1252 等 ISO 字符集已指定了欧元符号的代 码点。NLS_LANG=_.只有在客户环境中才能设置下列变量:NLS_CREDITNLS_DEBITNLS_DISPLAYNLS_LANGNLS_LIST_SEPARATORNLS_MONETARY如果将环境变量 ORA_NLS33 设置为无效目录,则有可能仅能使用缺省字符集 US7ASCII 创建数据库。
在 UNIX 上,ORA_NLS33 应该设置为: $ORACLE_HOME/ocommon/nls/admin/data如果未设置 ORA_NLS33,这即是缺省设置。ALTER SESSION SET NLS_DATE_FORMAT=‘DD.MM.YYYY’;DBMS_SESSION.SET_NLS(‘NLS_DATE_FORMAT’, ’’’DD.MM.YYYY’’’) ;文字排序二进制排序是一种传统排序机制,它依据字符编码所用的二进制值对字母进行排序。对于不同的语言,字符在字母表里的位置可能有所不同。对于单语言排序,Oracle 在比较按单语言顺序排序的字符串时要执行两遍排序。第一遍排序是比较主表中
整个字符串的主值,第二遍排序是比较次表中的次值。通常,具有相同外观的字母的主值也相同。Oracle 根据音调符号和大小写的不同来区分主值相同而次值不同的字母。单语言排序要优于二进制排序,但仍存在限制。对于多语言排序,Oracle 提供了一种基于 ISO 标准 (ISO14651) 和 Unicode 3.0 标准的排序机制。这样,就可以对每种语言的每个编码字符进行正确地排序。
SQL> SELECT num, word, def2 FROM list3 ORDER BY NLSSORT
(word,'NLS_SORT=FRENCH_M');在 SQL 函数中使用 NLS 参数SQL 字符函数支持单字节和多字节字符。有些 SQL 函数需要将 NLS 参数显式指定为其参数列表的一部分。因此,SQL 函数可以覆盖环境所指定的
行为。
SQL>SELECT TO_CHAR(hire_date,’DD.Mon.YYYY’,‘NLS_DATE_LANGUAGE=FRENCH’)
FROM employees;
SQL>SELECT ename,
TO_CHAR(sal,’9G999D99’,‘NLS_NUMERIC_CHARACTERS=‘‘,.’’’) FROM emp;

函数 NLS 参数 TO_DATE NLS_DATE_LANGUAGE,NLS_CALENDARTO_NUMBER NLS_NUMERIC_CHARACTERS,NLS_CURRENCY,NLS_ISO_CURRENCYTO_CHAR NLS_DATE_LANGUAGE,NLS_NUMERIC_CHARACTERS,NLS_CURRENCYNLS_ISO_CURRENCYNLS_CALENDARNLS_UPPER, NLS_LOWER NLS_SORTNLS_INITCAP, NLSSORT 数字格式掩码元素:“D” 代表十进制分隔符“G” 代表组(千位)分隔符“L” 代表本地货币符号“C” 代表本地 ISO 货币符号“U” 代表欧元的双重货币符号日期格式掩码元素:“RM, rm” 代表罗马月份数字“IW” 代表 ISO 星期号“IYYY, IYY, IY,” 和 “I” 代表 ISO 年份函数型索引专门用于创建按文字排序的索引。SQL 函数 NLSSORT 以给定的文字排序顺序返回用于对第一个参数排序的字节串。通过本地排序获取高性能 CREATE INDEX list_word ON list (NLSSORT(word, ‘NLS_SORT = French_M’));NLS_COMP 是一个动态初始化参数,它用于控制 <、> 和 = 等比较运算符处理文字顺序的方式。当这个参数设置为 BINARY(缺省设置)时,将基于字符串的二进制值进行比较。当设置为 ANSI 时,比较运算符通过文字排序顺序来确定依据 NLS_SORT 会话参数执行的操作结果。在导入过程中,数据将从导出文件字符集转换成数据库 字符集。SQL*Loader:常规路径:将数据转换为 NLS_LANG 指定的会话字符集。直接路径:数据直接转换为数据库字符集
NLS_DATABASE_PARAMETERS:PARAMETER(NLS_CHARACTERSET, NLS_NCHAR_CHARACTERSET)VALUE
NLS_INSTANCE_PARAMETERS:PARAMETER(已显式设置的初始化参数)VALUENLS_SESSION_PARAMETERS:PARAMETER(会话参数)VALUEV$NLS_VALID_VALUES:PARAMETER (LANGUAGE, SORT, TERRITORY, CHARACTERSET)VALUEV$NLS_PARAMETERS:PARAMETER (NLS 会话参数,NLS_CHARACTERSET)VALUEV$NLS_VALID_VALUES 视图显示出 NLS 数据引导文件的内容。它返回一个随给定数据库版本一起提供的列
表,该列表包含所有字符集、语言、文字排序以及地域定义。该列表中可能还包含不受支持或内部使用的定义。其它视图可能包含有一个新列 CHARACTER_SET_NAME,用于显示字符集的名称:CHAR_CS 是数据库字符集的名称,NCHAR_CS 是国家字符集的名称。 字符集扫描程序扫描数据库,以确定字符集是否可以进行更改提供详细说明问题及解决方法的报表Oracle 区域设置构建器 (Oracle Locale Builder)易于使用图形界面用于查看、修改和创建区域设置定义字符集扫描程序是命令行实用程序,用于辅助字符集转换。扫描程序可以标识字符集转换和数据截断可能发生的区域、所需的工作量以及应该扩展的列的宽度。它提供可行性评估、报告潜在的移植问题、检查所有字符数据并生成数据库扫描摘要。在转换任意字符集前,都应该使用字符集扫描程序。Oracle9i 服务器提供了一组完整的区域设置定义,包括语言、地域、字符集和文字排序。如果需要对任何现有的区域设置定义进行自定义,或者创建新的区域设置定义,则可以使用新增的 Oracle 区域设置构建器 (Oracle Locale Builder),它提供了一种简单易用的图形用户界面,使您可以轻松地查看、自定义和定义各种区域设置。

上面的中文是完全从网络上抄下来的,因为队伍GOBAL设定来说,更多的是时间设定,所以暂时没有这方面的需要。而且似乎目前以上的中文在排版方面字有点看不清楚,而具体的链接我放在study link上来哦,名字是OCP

下面开始Database Administration Fundamentals II-二合一的学习
第一章网络网络所遇到的挑战控制网络环境,维护网络(maintaining the network),协调,排难,监控网络,9i的网络解决方案联系,直接服务器,安全,可接近的,可攀登的
连接性:Oracle Net Services
与协议无关
支持多种平台集成的
GUI 管理工具
多种配置选项
跟踪和诊断工具集
基本安全性

-------------------------------分割线----------------------------------------


《投名状》——领悟10条人生哲理
1、对兄弟,忠诚要有个度。过了度,被杀了都不知道是咋死的。
2、从一无所有到腰缠万贯或权倾一时是展现你权衡上下关系的时候。
3、后台没人,你在前台再风光也只是一时的。
4、赢得了天下输了她的事情无处不在。
5、人总以为眼前平坦便高枕无忧,可在我们后边永远是未知。
6、患难之交随着身份和地位的改变,这份交情早已变质,守着那份承诺,你能落得可怜。
7、你可以用实力来证明自己的与众不同,但美好的结局却未必是你所能享受得了的。
8、你无论何时都要谦虚地向前辈取经,尽管你可能一点都不喜欢他们,但他们的一言一行足够让你从天堂到地狱。
9、如果你连兄弟与女人都不知道该如何取舍,就说明你不配做大哥。
10、一条汉子,说过的话不可不算

言简意赅

2007年12月27日星期四

Oracle学习笔记20071226

管理用户
首先需要了解data schemaSchema的对象:tables,triggers,constraints,indexes,views,sequences,stored program units,synonyms,user-defined data types,database links

Schema是多个对象的集,一个用户建立了那么对应的schema也建立了,用户只能操作一个schema,用户名和schema经常被用于交换

一份creating users的确认表建立新的User通过数据库认证(Database Authentication)




SQL>CREATE USER aaron IDENTIFIED BY soccer(PASSWORD)DEFAULT TABLESPACE data TEMPORARY TABLESPACE temp QUOTA 15m ON dataPASSWORD EXPIRE;

建立新的USER通过操作系统认证(Operating System Authentication)




SQL>CREATE USER aaron IDENTIFIED EXTERNALLY(和数据库严重的不同点) DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE temp QUOTA 15m ON data PASSWORD EXPIRE;

修改User的Quota(限额)




SQL>ALTER USER aaron QUOTA 0 ON USERS;

删除USER




SQL>DROP USER aaron;

使用CASCADE删除所有的




SQL>DROP USER aaron CASCADE;


和USERS有关的表DBA_USERS和DBA_TS_QUOTAS

管理权限用户权限分为两种,一种是SYSTEM一种是OBJECT的SYSTEM对特殊DATABASE做一些特殊的动作。
OBJECT对特殊的OBJECT权利
系统特权(system privileges)有超过100个不同的权限,用any可以让权限签名到任何的schema上,grant是用来赋予权限的,revoke是收回权限的
SYSTEM的权限INDEX,TABLE,SESSION,TABLESPACE

GRANT的权限




SQL>GRANT CREATE SESSION TO emi;
SQL>GRANT CREATE SESSION TO emi WITH ADMIN OPTION;

SYSDBA和SYSOPER之间的权利对比
SYSTEM权利的约束O7_DICTIONARY_ACCESSIBILITY 这个参数管理着,如果选项为TRUE则SYS schema可操作,默认是FALSE确保system的权限可操作任何schema除了sys schema

回收权限




SQL>REVOKE CREATE TABLE FROM emi;
赋予对象权利




SQL>GRANT EXECUTE ON dbms_output TO jeff;
SQL>GRANT UPDATE ON emi.customers TO jeff WITH GRANT OPTION;

赋予别人这个权限的同时也能让这个人赋予别人同样的权限
回收对象权利




SQL>REVOKE SELECT ON emi.orders FROM jeff;

和privilege有关系的表DBA_SYS_PRIVS,SESSION_PRIVS,DBA_TAB_PRIVS,DBA_COL_PRIVS

审查(auditing)P330
开始Auditing是一个监视所选用户的动作Statement auditing




SQL>AUDIT TABLE;Privilege auditing;
SQL>AUDIT create any trigger;

Schema object auditing




SQL>AUDIT SELECT ON emi.orders;

和auditing有关的视图
ALL_DEF_AUDIT_OPTS,DBA_STMT_AUDIT_OPTS,DBA_PRIV_AUDIT_OPTS,DBA_OBJ_AUDIT_OPTS
和auditing有关的表
DBA_AUDIT_TRAIL,DBA_AUDIT_EXISTS,DBA_AUDIT_OBJECT,DBA_AUDIT_SESSIONDBA_AUDIT_STATEMENT

缺点在于系统说花费的时间和成本比较大,可对非常重要的表进行监控。

今天在做一个例子
--练习目标建立一个role然后添加用户,让用户使用这个ROLE权限
SQL>CREATE USER aatu IDENTIFIED BY atu DEFAULT TABLESPACE atu;
SQL>SELECT default_tablespace FROM dba_users WHERE username = 'AATU';
SQL>GRANT create session to aatu;
SQL>GRANT create table to aatu;
SQL>CREATE table employee1 as select * from hyf.employeesSELECT * FROM employee1;
SQL>GRANT select,update,delete on employee1 to aatu;
SQL>grant connect to aatu;
SQL>grant resource to aatu;
--在做这个的时候发现是role权限dba_tab_privs中查不到,但是在dba_role_privs确能找到
SQL>SELECT * FROM DBA_TAB_PRIVS WHERE grantee = 'AATU';
SQL>SELECT * FROM DBA_TAB_PRIVS WHERE grantee in ('ATU','AATU');
SQL>SELECT default_tablespace FROM dba_users WHERE username = 'AATU'
SQL>SELECT * FROM user_tables;

--AATU用户登录后所作的
SQL>SELECT * FROM employee1;--当我使用这个查询语句的时候提示该表不存在,不知道为什么,尝试建立新用户,做查询后提示该用户在system表空间下,放弃。后请教后发现如果把语句改成SQL>SELECT * FROM atu.employee1后,那么就能查询到,虽然在同一表空间下,但是还需要加这个语句才能查询的到,除非建立别名。。(-_______-!!迷茫)
SQL>CREATE SYNONYM employee1 FOR atu.employee1
SQL>SELECT * FROM employee1

--建立role
SQL>CREATE ROLE testrole IDENTIFIED BY test;
SQL>SELECT * FROM dba_roles WHERE role='TESTROLE';
SQL>GRANT testrole to aatu;
SQL>SELECT * FROM dba_role_privs WHERE grantee='AATU';
--做了以后发现defualt role testrole是YES
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
AATU CONNECT NO YES
AATU RESOURCE NO YES
AATU TESTROLE NO YES
SQL>ALTER USER aatu DEFAULT ROLE ALL EXCEPT testrole;
SELECT * FROM dba_role_privs WHERE grantee='AATU'
--做了以后发现defualt role testrole是no
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
AATU CONNECT NO YES
AATU RESOURCE NO YES
AATU TESTROLE NO NO

2007年12月26日星期三

Oracle学习笔记20071225

建立临时表从公共表中建立临时表
SQL>CREATE GLOBAL TEMPORARY TABLE hr.employees_temp AS SELECT * FROM hr.employees;


修改表的存贮参数
SQL>ALTER TABLE hr.employees PCTFREE 30 PCTUSED 50 STORAGE(NEXT
500K MINEXTENTS 2 MAXEXTENTS 100);

手动分配允许的extent
SQL>ALTER TABLE hr.employees ALLOCATE EXTENT(SIZE 500K DATAFILE '/DISK3/DATA01.DBF';

不分割表进行重组(Nonpartitioned Table Reorganization)
SQL>ALTER TABLE hr.employees MOVE TABLESPACE data1;

(上个礼拜五做这个重新分割移动表的时候,出现了错误,由于先前的错误导致了半灾难性的后果,所以对于目前来说整体的复习也是比较重要的。
例如这个语句,上次就可以写成SQL>ALTER TABLE A MOVE TABLESPACE atu;)
删除表(Truncating a Table)
SQL>TRUNCATE TABLE hr.employees;

这个删除表的意思是删除表的所有行并不是所有表,包括所有索引,具体的语句可以在sql三合一中找到
删除表(Dropping a Table)
SQL>DROP TABLE hr.department CASCADE CONSTRAINTS;

这个语句才是删除表,包括所有定义的语句。
删除列(Dropping a Column)
SQL>ALTER TABLE hr.employees DROP COLUMN comments CASCADE CONSTRAINTS CHECKPOINT 1000;


使用UNUSED选项将comments设为unused,因为comments有constraints
SQL>ALTER TABLE hr.employees SET UNUSED COLUMN comments CASCADE CONSTRAINTS;

删除unused列
SQL>ALTER TABLE hr.employees DROP UNUSED COLUMNS CHECKPOINT 1000;

继续删除unused列
SQL>ALTER TABLE hr.employees DROP COLUMNS CONTINUE CHECKPOINT 1000;

具体的信息查找可以在dba_tablesdba_objects中找到。
管理索引(index)索引分类逻辑(单个列或者连锁列,唯一或非唯一,基于函数,基于域)物理(分割或未分割,B数列,位图)
建立B树形的INDEX
SQL>CREATE INDEX hr.employees_last_name_idx ON hr.employees(last_name)PCTFREE 30 STORAGE(INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50)TABLESPACE indx;

建立bitmap型index
SQL>CREATE BITMAP INDEX orders_region_id_idx ON orders(region_id)PCTFREE 30 STORAGE(INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50)TABLESPACE indx;


改变index的存贮函数
SQL>ALTER INDEX employees_last_name_idx STORAGE(NEXT 400K MAXEXTENTS 100);

允许使用index space
SQL>ALTER INDEX orders_region_id_idx ALLOCATE EXTENT (SIZE 200KDATAFILE '/DISK6/indx01.dbf');


不允许使用index space
SQL>ALTER INDEX orders_id_idx DEALLOCATE UNUSED;


重建索引(rebuilding index)使用alter index,将一个index引到另外个不同的表空间,提高空间利用,改变在B树形INDEX的坏的index.使用下列语句:
SQL>ALTER INDEX orders_region_id_idx REBUILD TABLESPACE indx02;


在线rebuilding index
SQL>ATLER INDEX orders_region_id_idx REBUILD ONLINE;

联合index(coalsecing index)

SQL>ALTER INDEX orders_region_id_idx COALESCE;


检查index的有效性(check index validity)

SQL>ANALYZE INDEX orders_region_id_idx VALIDATE STRUCTURE;


删除index

SQL>DROP INDEX hr.deptartments_name_idx;


检验unused索引(identifying Unused Indexes)开始监视usage of an index

SQL>ALTER INDEX summit.orders_id_idx MONITORING USAGE

停止监视

SQL>ALTER INDEX summit.orders_id_idx NOMONITORING USAGE


关于INDEX的几个表DBA_INDEXES,DBA_IND_COLUMNS,DBA_IND_EXPRESSIONS,V$OBJECT_USAGE


作为一个DBA,需要保证数据的正确性(Maintaining Data Integrity),所以来学习下面的课:
首先是数据完整约束(constraint):包括有not null,unique,primary key,foreign key,check立刻或者延期定义约束:使用set constraints命令进行deferred或者immediate,其他的话用ALTER SESSION命令来set constraints
建表时可以直接定义约束:

SQL>CREATE TABLE hr.employee( id NUMBER(7) CONSTRAINT employee_id_pk PRIMARY KEY DEFERRABLE USING INDEX STORAGE(INITIAL 100K NEXT 100K)TABLESPACE indx, last_name VARCHAR2(25) CONSTRAINT employee_last_name_nn NOT NULL, dept_id
NUMBER(7))TABLESPACE users;


开启约束Enable Novalidate:No locks on table,Primary and unique keys must use nonunique indexes

SQL>ALTER TABLE hr.departments ENABLE NOVALIDATE CONSTRAINT dept_pk;


Enable Validate:Locks table,Can use unique or nonunique indexes,Needs valid table data

SQL>ALTER TABLE hr.employees ENABLE VALIDATE CONSTRAINT emp_dept_fk;


使用特别的exceptions TABLE 貌似没啥用。
涉及到约束的两张表DBA_CONSTRAINTS DBA_CONS_CONLUMNS
管理密码安全和资源
ProfilesProfile是密码和资源限制,Profile用create user或者alter user,可以被开启和关闭,可以和默认相关联
开启Password管理锁定PASSWORD帐户参数:

Failed_login_attempts 登录失败次数

Password_lock_time:登录失败后锁定的天数

password_life_time:密码的有效天数

password_grace_time:从第一登录到修改密码的时间

password_reuse_time:密码能被重新使用的天使

password_reuse_max:Maximum number of times a password can be

reusedPASSWORD_VERIFY_FUNCTION:需要用到VERIFY_FUNCTION


建立一个PROFILE

SQL>CREATE PROFILE grace_5 LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME UNLIMITED PASSWORD_LIFE_TIME 30 PASSWORD_REUSE_TIME 30 PASSWORD_VERIFY_FUNCTION
verify_function PASSWORD_GRACE_TIME 5;

修改PROFILE

SQL>ALTER PROFILE default FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LIFE_TIME 60 PASSWORD_GRACE_TIME 10;


删除PROFILEDROP PROFILE developer_prof CASCADE;
资源管理:可以控制等级,限制可在create profile的时候定义,开启定义用resource_limit,使用alter system命令开启资源管理

SQL>ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;


所拥有的RESOURCECPU_PER_SESSION,SESSIONS_PER_USER,CONNECT_TIME,IDLE_TIME,

LOGICAL_READS_PER_SESSION,PRIVATE_SGA,CPU_PER_CALL,LOGICAL_READS_PER_CALL


LIMIT的例子

SQL>CREATE PROFILE developer_prof LIMIT SESSIONS_PER_USER 2CPU_PER_SESSION 10000 IDLE_TIME 60 CONNECT_TIME 480;


所对应的表DBA_USERS DBA_PROFILES

2007年12月25日星期二

Oracle学习笔记20071224

移动data files
tablespace类
首先需要将tablespace设置为offline,然后目标data files必须存在
然后使用:
SQL>ALTER TABLESPACE userdata RENAME DATAFILE '/u01/oradata/userdata01.dbf'
TO '/u01/oradata/userdata01.dbf';

database类
database必须mount,目标datafile必须存在
SQL>ALTER DATABASE RENAME FILE '/u01/oradata/system01.dbf'TO
'/u03/oradata/system01.dbf';

修改Tablespace的建立在Oracle的管理文件
SQL>ALTER SYSTEM SET db_create_file_dest = '/u01/oradata/db01';


关于表
从逻辑结构来说分为oracle,extent,segment,tablespace,database
物理测试datafile,OS blocks

segments的种类分为table,cluster,index,partition,index-organized table,index partition,undo segment,temporary segment,lob segment,nested table,bootstrap segment

DATABASE BLOCK最小的单位的I/O,由一个或多个OS blocks组成,由tablespace creation建立,db_block_size是默认大小
管理DATA BLOCK有两种方法,一种自动,一种手动。
自动语法:
SQL>CREATE TABLESPACE data02 DATAFILE '/u01oradata/data02.dbf' SIZE 5M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K SEGMENT SPACE MANAGEMENT AUTO;

手动语法需要用到PCTFREE,PCTUSED,FREELIST这几个参数
例如,假设整个blockspace为100,那么set pctfree = 20,pctused =40,如果PCTUSED>80的话那么将不能插入,如果大于40的话则可以在插入。

Used extents对应的是dba_extents视图,Fredd extents对应的是dba_free_space,Segments对应的是dba_segments,Data Files对应的是dba_data_files,tablespace对应的是dba_tablespaces,

管理UNDO DATA
同样的对于UNDO DATA而言也是有两种方法的,一种自动,一种手动
undo这个术语有点像rollback
undo的类型
system类用的是system tablespace
non-system类用别的tablespace,自动模式需要一个undospace,非自动模式私有的需要单个实例,公共的任何实例
延迟的,当使用时把tablespace设置为offline immediate,temporary,或者recovery


自动undo管理的概念:
undo data管理应用的是undo tablespace
你为工作实例用一个用足够的空间undo tablespace分配给每个实例。
配置自动undo需要用的到参数是undo_managerment和undo_tablespace
undo_managerment参数:特别的,显示undo是自动还是手动
undo_tablespace参数:显示正在使用的undo名称

通过以下语句可以建立一个undo tablespace:
这句是在建立DATABASE时候一起建立的
SQL>CREATE DATABASE db01 . . . UNDO TABLESPACE undo1 DATAFILE 'undo1db01.dbf'
SIZE 20M AUTOEXTEND ON;

这句是在以后建立的
SQL>CREATE UNDO TABLESPACE undo1 DATAFILE 'undo1db01.dbf' SIZE 20M


自动模式下修改undo tablespace:
使用方法用alter tablespace语句
修改方式用下列语句:
SQL>ALTER TABLESPACE undotbs ADD DATAFILE 'undotbs2.dbf' SIZE 30M AUTOEXTEND
ON;

自动模式下更改undo tablespace
交换到另外一个undotablespace,只有一个能被交换的实力,允许多个undo tablespace存在于一个实例,但只能激活一个。使用一个:
SQL>ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2;

自动模式下删除undo tablespace
SQL>DROP TABLESPACE UNDOTBS2;

自动模式下其他的参数:
undo_supperss_errors 当为ture的时候将那些在手动处理的时候转会自动模式
undo_retention:Controls the amount of undo data to retain for
consistent read(翻译不出来)

查看undo data statistics
SQL>SELECT end_time,begin_time,undoblks FROM V$UNDOSTAT


在自动模式下修改undo tablespace的大小:
决定undo tablespace大小需要三个条件ur,ups,dbs
undospace=[ur*(ups*dbs)]+(dbs*24)

Undo Quota没有细研究,貌似E文都是概念性的东西

Undo下用到的视图为dba_rollback_segs,功能表达视图
V$ROLLNAME
V$ROLLSTAT
V$UNDOSTAT
V$SESSION
V$TRANSACTION

管理表~
Oracle中有很多datatype。详细的。。暂时不说
其次比较重要的rowid,rowid是唯一固定的,rowid的格式:
oooooofffbbbbbbrrr,oooooo是数据对象的号码fff是相对文件的数字bbbbbb是块号码rrr是行号码
restricted rowid format bbbbbbbbrrrrffff,bbbbbbbb是块号码rrrr是行码ffff是文件码

建表的语句是create table,建临时表create global temporary table

2007年12月24日星期一

Oracle学习笔记20071221

在建立datafile的时候设立自动增大MB的data files
SQL>ALTER DATABASE DATAFILE '/u01/oradata/userdata02.dbf' SIZE 200MAUTOEXTEND ON NEXT 10M MAXSIZE 500M;


修改已有的DATAFILE
SQL>ALTER DATABASE DATAFILE '/u03/oradata/userdata02.dbf' RESIZE 200M;


将Data Files加入Tablespace

SQL>ALTER TABLESPACE app_data ADDDATAFILE'/u01/oradata/userdata03.dbf' SIZE 200M;


---------------------------------大名鼎鼎的分割线---------------------------------------------

今天朋友问我 "‘任务管理器已被系统管理员停用’ 想问一下如何把任务管理器打开",先是以为是在管理服务里面,后来没找到google了一下,其实是在组策略下下面是解决方法:
方法一:使用组策略编辑器来设置禁止访问任务管理器
首先使用管理员级别的帐号登陆系统,然后在开始菜单的“运行”中输入:“Gpedit.msc”打开组策略编辑器。在组策略编辑器中找到“用户设置\管理模板\系统\Ctrl+Alt+Del选项”双击右侧的“删除任务管理器”(Remove Task Mangaer),打开如图2所示的“移除任务管理器”属性设置页面。选中“开启”(Enabled),点击“OK”则再也不能使用“Ctrl+Alt+Del”来打开任务管理器了。
方法二:使用用户限制来禁止访问任务管理器
上述方法虽然可以禁止访问任务管理器,但这种方法并不能禁止用户通过直接点击任务管理器的方法来打开,而且不能使用“Ctrl+Alt+Del”这个组合热键来打开任务管理器也会给我们正常使用造成不便。下面我们介绍通过使用用户限制来禁止非授权用户访问任务管理器的方法。在系统安装目录的“System32”目录下找到“TaskMgr.exe”,点击右键,选择“打开方式(Run as)”, 选中“下列用户”(The following user),然后输入用户名和密码。即可设定以以上的用户来运行任务管理器。有一点要注意的是,上面要使用管理员级别的用户名和密码。
通过修改注册表,可以禁止用户使用“任务管理器”。
新建一个双字节(REG_DWORD)值项HKEY_CURRENT_USER\Software\Microsoft\ Windows\CurrentVersion\Policies\System\DisableTaskMgr,修改其值为1。 取消禁用就改为0

2007年12月21日星期五

Oracle学习笔记20071220

数据库启动是STARTUP, NOMOUNT - MOUNT - OPEN
我们启动数据库,便是并不挂载数据库示例:
SQL>STARTUP NOMOUNT 

然后可以使用
SQL>ALTER DATABASE MOUNT
来挂上数据库。
使用
SQL>STARTUP MOUNT
来启动数据库,并挂载上数据库,但是保持数据库的关闭状态。 稍后可以使用
SQL>ALTER DATABASE OPEN
来打开数据库。
还可以在数据库的启动过程中限制数据库的访问:
SQL>STARTUP RESTRICT
来启动并装载打开数据库示例。
当然还可以在数据库的启动过程中限制数据库的访问:
SQL>STARTUP RESTRICT
来启动并装载打开数据库示例。
稍后可以使用:
SQL>ALTER SYSTEM DISABLE RESTRICTED SESSION

来取消数据库的受限制状态。
在数据库受限制的过程中,只有对数据库拥有CREATE SESSION权限的用户才能够连接到数据库。这种状态有利于对数据库进行备份,恢复,导入,导出等操作。
还有一个命令就是强迫数据库示例启动:
SQL>STARTUP FORCE
 

二、改变数据库的状态:
1、当你只是启动数据库,但是并不有装数据库时,也即是使用:STARTUP NOMOUNT来启动数据库时,必须使用ALTER DATABASE MOUNT来装载数据库,并启动示例。
2、打开一个关闭的数据库:
当你只是装载了数据库,但是保持数据库关闭的情况,也即是使用:
SQL>STARTUP MOUNT

来启动数据库时, 必须使用:
SQL>ALTER DATABASE OPEN
来打开一个关闭的数据库。
3、以只读或者是可读可写的方法打开数据库。注意:可读可写是默认的操作: 
SQL>ALTER DATABASE OPEN READ ONLY

恢复以:
SQL>ALTER DATABASE OPEN READ WRITE

4、在使用过程中对数据库进行限制:
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION

取消限制: 
SQL>ALTER SYSTEM DISABLE RESTRICTED SESSION
 
即可取消对数据库的限制。

三、数据库的关闭:
oracle的数据库关闭只有一个命令:SHUTDOWN,但是这个命令还有几个选项:NORMAL, IMMEIDATE, TRANSACTION, ABORT。
NORMAL是默认选项。表示正常的关闭,等候客户的请求完成,所有的事务提交,拒绝再次进行连接。
IMMEIDATE:立即关闭数据库,不允许新连接,事务回滚,下一次启动不需要任何恢复过程。 TRASACTION:不允许新连接,完成事务后,有连接的用户将被解除连接,下一次启动不需要任何恢复过程。 
ABORT:不允许新连接,马上断开所有的用户连接,终止事务,不回滚事务。下一次启动需要恢复过程。
插一个LINUX命令,查看单个文件大小可以时候du -sh ... 或者ls -lh ...查看硬盘使用情况df -h

修改CONTROLFILE
命令
SQL> ALTER SYSTEM SET control files
='$HOME/ORADATA/u01/ctrl01.ctl', 2 '$HOME/ORADATA/u02/ctrl02.ctl'
SCOPE=SPFILE;


Log switches can be forced using the ALTER
SQL> SYSTEM SWITCH LOGFILE

添加GROUP
SQL> ALTER DATABASE ADD LOGFILE GROUP
3('$HOME/ORADATA/u01/log3a.rdo','$HOME/ORADATA/u02/log3b.rdo') SIZE 1M

删除到GROUP
SQL> ALTER DATABASE DROP LOGFILE GROUP 3;

制定添加到GROUP
SQL>ALTER DATABASE ADD LOGFILE MEMBER '$HOME/ORADATA/u04/log1c.rdo' TO GROUP
1,'$HOME/ORADATA/u04/log2c.rdo' TO GROUP 2,'$HOME/ORADATA/u04/log3c.rdo' TO
GROUP 3;

删除一个成员
SQL>ALTER DATABASE DROP LOGFILE MEMBER '$HOME/ORADATA/u04/log3c.rdo';

清空LOG
SQL>ALTER DATABASE CLEAR LOGFILE '$HOME/ORADATA/u01/log2a.rdo';
下面是我上次做错的:这个是TABLESPACE
SQL>CREATE TABLESPACE userdata DATAFILE '/u01/oradata/userdata01.dbf'
SIZE 500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;
SQL>CREATE TABLESPACE userdataDATAFILE '/u01/oradata/userdata01.dbf'
SIZE 500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;

这个是UNDO TABLESPACE
SQL>CREATE UNDO TABLESPACE undo1 DATAFILE '/u01/oradata/undo101.dbf'
SIZE 40M
SQL>alter system set undo_tablespace='undotbs1'
scope=spfile;(目前看到的是这样的,但是具体为什么不能如同tablespace和temporary tablespace就不知道了)

这个是Temporary Tablespace
SQL>CREATE TEMPORARY TABLESPACE temp TEMPFILE '/u01/oradata/temp01.dbf' SIZE
500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M;

当修改临时表空间的时候语句的步骤如同修改tablespace一样
SQL>alter user default temporary tablespace <临时表>

网页提供http://www.itpub.net/viewthread.php?tid=622120&extra=&page=2
Offline tablespace is not available for data access.
some tablespaces must be online:
-SYSTEM
-Tablespaces with active undo segments
-Default temporary
SQL>ALTER TABLESPACE userdata OFFLINE;
SQL>ALTER TABLESPACE userdata ONLINE;

将tablespace改成read only
SQL>ALTER TABLESPACE userdata READ ONLY;

Move the data file to the WORM drive
SQL>ALTER TABLESPACE ..RENAME DATAFILE ..;

删除tablespace
SQL>DROP TABLESPACE userdata INCLUDING CONTENTS AND DATAFILES;

2007年12月20日星期四

投名状

昨天晚上实在无聊,就屁颠屁颠的去看了《投名状》,本来去奥斯卡的,发觉已经只有9点以后的场次,还特别的翘,我说那九点看了直接去看《集结号》首映算了,别人不愿意,那行,然后出来瞎晃悠,还好几个周围的电影院还近,去了胜利,人那还没上片,看来没希望,突然想去唱歌,行,反正金歌也进,就那么走过去吧,突然眼前豁然开朗,这不是西湖电影院么,一阵小跑,发觉上片,最近的场次还只有头牌了,虽然头牌脖子有点罩不住,但是至少看看片子还可以的。
网上大概了解了下《投名状》,陈可辛翻拍的《刺马》,加上了几个现代的演员。故事的大概是:姜午阳、赵二虎本为草莽,在一次争斗中与庞青云结识。三人惺惺相惜,结为异姓兄弟。不料日就生变,赵二虎的妻子莲生爱上了大哥庞青云,庞青云也对莲生心生爱慕。不久后,庞青云升为两江总督,欲望逐渐膨胀,变得心狠手辣。他的道德防线也逐渐崩溃,霸占莲生,还要对兄弟下手……
剧情也就那么个回事情,其实故事梗概不然,一个从死人堆里爬出来的人,什么都失去过了 。已经改变了他的原有个性,他已经从开始就知道什么是他要的,而唯一觉得真是的就是老徐那一次,其实古时候也挺简单的,说得好就上了。只是一种人性做本质的释放。受苦挨饿无非就是为了有着一日飞黄腾达,为了生活隐姓埋名,别人都在抢军粮的时候什么都不做,唯一的只是在金城武快要被杀掉的时候救助,然后直接取了押送大将的首级。擒贼先擒王。。。。
而刘德华的出场也特别犀利,从他的眼神看出他已经被锻炼的很老练,已经是一个大将之才,错的地方就是信错了人,在后面苏州一役的时候,从为了一个被困一年的军队,只身一人去刺城主。被困一年无论对于城内还是城外都是极大的考验,心里防线都已经到了崩溃的边缘。而城主以他的解脱来换大众的解脱,这是很等的伟大,而战争是残酷的,不能收编的俘虏虽然答应了别人,可没有粮食来养活那么多人。敌军的气节也让人唏嘘不已。
刘德华的演绎的性格有情有义,到最后死也不认为是李连杰派人杀的他。李连杰演绎的则是在战场上全军覆没后,心里从此极大改变,为了目的不择手段,从始至终就是在利用刘和金,但也为曾经的战场情了矛盾,权还是义一直是在他的心理纠结着,当苏州一役,李看到刘走出城那种又喜又悲的感情时,看出了他心理是多的纠结。金城武么,唉,演技确实很好,但是角色赋予的他是个傻蛋的角色,只为了情谊,一心想挽回情谊,而在战场上也为了情谊能甘当敢死队,同时也为了情谊而轻手弑杀了大嫂,杀了李连杰(虽然是因为后面的木狙帮忙)。只能说当政者永远在控制着你,如果你想突破那只有自己当皇帝。

总体评价:战争的场面,情谊的变现相当的不错,化妆和特技技巧也显得比较真实,人物感情把握细腻。唯一的缺点不能和MM一起看,因为我认识的MM一直为了到底这本片子想表达什么。
我认为是权与义的斗争。还有可恨的那什么总局,一本都是大老爷们的片子,难得有那么女的,难得有那么几场戏,你TMD都给剪了,还有打苏州和南京正分析着呢,你丫的又给剪了。你还有什么不能剪的,你JJ能剪不。

总体表现:8分。

看长江7号的预告片,发觉那小女孩被周星星熏陶过了,表情也差不多夸张了,可是老觉得有周星星的影子。年底有很多片子,放松一下未尝不可

2007年12月19日星期三

关于tablespace和table

今天拿测试库做练习,想来该做点什么,那么就建个tablespace吧。
第一次输入

SQL>CREATE TABLESPACE username DATAFILE '/SERVER/ora9/oradata/ora9 ' SIZE
100M AUTOEXTEND ON NEXT 5M MAXSIZE 200M;
(后面回想的,前面怎么做的我在putty上也找不到了,SELECT了一个语句不知道不刷到哪里去了)然后发觉username应该是自己的用户名(傻了,-______-)继续写了下面这条
SQL>CREATE TABLESPACE atu DATAFILE '/SERVER/ora9/oradata/ora9/atu.dbf ' SIZE
100M AUTOEXTEND ON NEXT 5M MAXSIZE 200M;

然后第一条就成了今天郁闷的关键,因为在本来ora9是已经存在的文档目录所有.dbf文件都存放在这个下。

当我自己在linux环境下检查的时候发觉同时存在,就rm掉了,回到sqlplus下

SQL>shutdown immedaite;时候出现以下问题
ORA-01116: error in opening database file 15
ORA-01110: data file 15: '/SERVER/ora9/oradata/ora9'
ORA-27041: unable to open fileLinux Error: 2: No such file or
directory

无解,求助领导。

SQL>select file_id,file_name,tablespace_name from dba_data_files;
1 /SERVER/ora9/oradata/ora9/system01.dbf SYSTEM
2 /SERVER/ora9/oradata/ora9/hyf.dbf HYF
3 /SERVER/ora9/oradata/ora9/cwmlite01.dbf CWMLITE
4 /SERVER/ora9/oradata/ora9/drsys01.dbf DRSYS
5 /SERVER/ora9/oradata/ora9/indx01.dbf INDX
6 /SERVER/ora9/oradata/ora9/odm01.dbf ODM
7 /SERVER/ora9/oradata/ora9/tools01.dbf TOOLS
8 /SERVER/ora9/oradata/ora9/users01.dbf USERS
9 /SERVER/ora9/oradata/ora9/xdb01.dbf XDB
10 /SERVER/ora9/oradata/ora9/t2007q1.dbf T2007Q1
11 /SERVER/ora9/oradata/ora9/t2007q2.dbf T2007Q2
12 /SERVER/ora9/oradata/ora9/t2007q3.dbf T2007Q3
13 /SERVER/ora9/oradata/ora9/t2007q4.dbf T2007Q4
14 /SERVER/ora9/oradata/ora9/undo.dbf UNDO
15 /SERVER/ora9/oradata/ora9 USERDATA
16 /SERVER/ora9/oradata/ora9/atu.dbf ATU

由于我刚刚的失误,导致第15条语句无法加载,而且无法正常的shutdown想直接删除表空间:

SQL>drop tablespace USERDATA ;
ORA-01116: error in opening database file 15
ORA-01110: data file 15: '/SERVER/ora9/oradata/ora9'
ORA-27041: unable to open fileLinux Error: 2: No such file or directory

OFFLINE办法:

SQL>alter tablespace UESRDATA offline;
ORA-01116: error in opening database file 15
ORA-01110: data file 15: '/SERVER/ora9/oradata/ora9'
ORA-27041: unable to open fileLinux Error: 2: No such file or directory

试着更名,可是不能OFFLINE也不能改名.

  • 先SHUTDOWN ABORT;
  • STARTUP MOUNT:
  • Alter database backup controlfile to trace;得到重建控制文件脚本;
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORA9" RESETLOGS FORCE LOGGING
ARCHIVELOG
-- SET STANDBY TO MAXIMIZE PERFORMANCE
MAXLOGFILES 5
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 226
LOGFILE
GROUP 1 '/SERVER/ora9/oradata/ora9/redo01.log' SIZE 20M,
GROUP 2 '/SERVER/ora9/oradata/ora9/redo02.log' SIZE 20M,
GROUP 3 '/SERVER/ora9/oradata/ora9/redo03.log' SIZE 20M
-- STANDBY LOGFILE
DATAFILE'/SERVER/ora9/oradata/ora9/drsys01.dbf',
'/SERVER/ora9/oradata/ora9/indx01.dbf',
'/SERVER/ora9/oradata/ora9/odm01.dbf',
'/SERVER/ora9/oradata/ora9/tools01.dbf',
'/SERVER/ora9/oradata/ora9/users01.dbf',
'/SERVER/ora9/oradata/ora9/xdb01.dbf',
'/SERVER/ora9/oradata/ora9/t2007q1.dbf',
'/SERVER/ora9/oradata/ora9/t2007q2.dbf',
'/SERVER/ora9/oradata/ora9/t2007q3.dbf',
'/SERVER/ora9/oradata/ora9/t2007q4.dbf',
'/SERVER/ora9/oradata/ora9/undo.dbf',
'/SERVER/ora9/oradata/ora9',
'/SERVER/ora9/oradata/ora9/atu.dbf'
CHARACTER SET ZHS16GBK
并在脚本中删除错误的数据文件: '/SERVER/ora9/oradata/ora9'

在重建控制文件后,试着打开数据库:


SQL> alter database open resetlogs;
alter database open resetlogs
*ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1:
'/SERVER/ora9/oradata/ora9/system01.dbf'//需要恢复

SQL> recover database using backup controlfile;
ORA-00279: change 10703011 generated at 12/19/2007 07:22:31 needed for
thread
ORA-00289: suggestion : /SERVER/ora9/arc/1_108.dbf
ORA-00280: change 10703011 for thread 1 is in sequence #108
Specify
log: {=suggested filename AUTO
CANCEL}/SERVER/ora9/oradata/ora9/redo02.log
ORA-00310: archived log contains sequence 107; sequence 108 required
ORA-00334: archived log: '/SERVER/ora9/oradata/ora9/redo02.log'

SQL> recover database using backup controlfile;
ORA-00279: change 10703011 generated at 12/19/2007 07:22:31 needed for
thread
ORA-00289: suggestion : /SERVER/ora9/arc/1_108.dbf
ORA-00280: change 10703011 for thread 1 is in sequence #108

Specify log: {=suggested filename AUTO
CANCEL}/SERVER/ora9/oradata/ora9/redo03.log (使用的是当前日志)
ORA-00283: recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to controlfile by media recovery
ORA-01110: data file 15: '/SERVER/ora9/oradata/ora9'ORA-01112: media
recovery not started

SQL> recover database using backup controlfile;
ORA-00283: recovery session canceled due to errors
ORA-01111: name for data file 15 is unknown - rename to correct file
ORA-01110: data file 15: '/SERVER/ora9/product/9.2/dbs/UNNAMED00015'
ORA-01157: cannot identify/lock data file 15 - see DBWR trace file
ORA-01111: name for data file 15 is unknown - rename to correct file
ORA-01110: data file 15: '/SERVER/ora9/product/9.2/dbs/UNNAMED00015'
由于系统表空间中,在记录这个数据文件,而在控制文件中没有,所以系统报这个错误.

SQL> select name from v$datafile;
NAME--------------------------------------------------------------------------------/SERVER/ora9/oradata/ora9/system01.dbf/SERVER/ora9/oradata/ora9/hyf.dbf/SERVER/ora9/oradata/ora9/cwmlite01.dbf/SERVER/ora9/oradata/ora9/drsys01.dbf/SERVER/ora9/oradata/ora9/indx01.dbf/SERVER/ora9/oradata/ora9/odm01.dbf/SERVER/ora9/oradata/ora9/tools01.dbf/SERVER/ora9/oradata/ora9/users01.dbf/SERVER/ora9/oradata/ora9/xdb01.dbf/SERVER/ora9/oradata/ora9/t2007q1.dbf/SERVER/ora9/oradata/ora9/t2007q2.dbf
NAME--------------------------------------------------------------------------------/SERVER/ora9/oradata/ora9/t2007q3.dbf/SERVER/ora9/oradata/ora9/t2007q4.dbf/SERVER/ora9/oradata/ora9/undo.dbf/SERVER/ora9/product/9.2/dbs/UNNAMED00015/SERVER/ora9/oradata/ora9/atu.dbf
16 rows selected.

SQL> alter database
datafile'/SERVER/ora9/product/9.2/dbs/UNNAMED00015' offline;
Database
altered.

SQL> alter database open resetlogs;alter database open
resetlogs*ERROR at line 1:
ORA-01113: file 1 needs media recoveryORA-01110: data file 1:
'/SERVER/ora9/oradata/ora9/system01.dbf'

SQL> recover database using backup controlfile;
ORA-00279: change 10712117 generated at 12/19/2007 10:12:24 needed for
thread 1
ORA-00289: suggestion : /SERVER/ora9/arc/1_108.dbf
ORA-00280: change 10712117 for thread 1 is in sequence #108
Specify
log: {=suggested filename AUTO CANCEL}/SERVER/ora9/oradata/ora9/redo03.log
(当前日志)Log applied.Media recovery complete.

SQL> alter database open resetlogs;alter database open
resetlogs*ERROR at line 1:
ORA-01245: offline file 15 will be lost if RESETLOGS is done
ORA-01111: name for data file 15 is unknown - rename to correct file
ORA-01110: data file 15: '/SERVER/ora9/product/9.2/dbs/UNNAMED00015'

SQL> alter database
datafile'/SERVER/ora9/product/9.2/dbs/UNNAMED00015' offline;Database altered.
SQL> alter database open resetlogs;alter database open resetlogs*ERROR at
line 1:
ORA-01245: offline file 15 will be lost if RESETLOGS is done
ORA-01111: name for data file 15 is unknown - rename to correct file
ORA-01110: data file 15: '/SERVER/ora9/product/9.2/dbs/UNNAMED00015'

SQL> alter database datafile 15 offline drop;Database altered.

SQL> alter database open resetlogs;Database altered.
到此,数据库正常打开,恢复全部完成.

以上是我领导恢复的,借鉴下例子,
其实在做事情的时候首先想到的应该是备份,上次在市府那次也应该是这样,不论你的数据有多么的重要先做好备份是一个好习惯。
其实在更改你的id名想让你的id名字和你的tablespace一致的话其实可以这样。

SQL>SELECT default_tablespace FROM dba_users WHERE username =
'ATU';
结果应该是hyf
SQL>CREATE TABLESPACE atu DATAFILE '/SERVER/ora9/oradata/ora9/atu.dbf'
SIZE 100M;
SQL>ATLER USER atu default tablespace atu;
SQL>SELECT default_tablespace FROM dba_users WHERE username = 'ATU'

现在看就是atu了原来在hyf下我所建立的表转到atu下
SQL>ALTER table atu.a move atu
现在所看到的是a表转到atu这个tablespace了,然后批量转需要做一个脚本,脚本目前还暂时不会做。刚刚也没看清楚生成后在sql,command下完成。

P.S. (网络上找的消息)
数据文件就好像水桶。
水桶中没有被水淹过的地方(高水位以上), 空间可以回收。

alter datafile datafile FILE resize xxxM ;

如果水桶都被淹过了,那就有点困难了。
一种方法是alter table move tablespace 命令。

比如表T的tablespace为system,现在要把它移动到tablespace users,
语法是: alter table T move tablespace users;
如果是索引,比如是idx1,要移动到tablespace ts_idx,语法是: alter index idx1 rebuild
tablespace ts_idx ;

另一种方法是使用exp/imp。

方法二:
alter database create datafile 15 as ’/ server/ora9.../ora9 ' reuse;recover datafile 15
。。。。似乎是因为我乱删东西造成的

今天买了双鞋子,几个人看了都不好,我觉得差不多,便宜么,能打就好了,打得时候看着是何不适合。


2007年12月17日星期一

Windows 快捷键

现在的键盘上有个windows键位,现在发现的是windows+D 显示桌面,windows+l到logoning,windows+F查找,windows+r运行,其他的不知道了

2007年12月16日星期日

祭奠我得两年

此文祭典我的两年。两年过去了,从毕业开始第一份工作,从一个不懂事地孩子每天坐在那里不停地training with JDE/Oracle.不停的作sales man support.维持和客户间地关系,听他们的抱怨。听老板的抱怨,忍耐下来了。然后转去作night staff,从没人会到我开始作Team leader,开始管理5个人,每天重复重复的support,做好每天的update.唯一的快乐就是能和你聊天,看着你也不断地成长,从一个作技术什么都要问得女孩,到能够独当一面。很高兴能帮助你,因为我觉得大学四年终于能找到一个和我志趣相投的女孩了,当那一年你告诉我你和他分开以后,真的我感觉到一丝的希望。6月到了该回校的日子,到上海找了你一起返回,一路上有说有笑,虽然知道在机场来接你得是你的那个他。是你告诉我你和他已经分开,为什么我还是能看到你挽着他的手开心的走着,为什么我每次问你为什么地时候,你可以很方便地说一声别多想了。毕业那一天你告诉我我们只是朋友起,我知道了,我真是个不折不扣地傻瓜,你只是想找人抒发下没有人在身边的寂寞而已。而我当时因为别人地排挤光荣地失业了。
时间真是个很奇妙的东西。失业了还是继续做外贸,一个我至今不想提起的公司,不过让我学到了很多,知道无商不奸,知道可以把一个本应该留住的长期客户,很好地踹在一边,从来不排生产计划,想到什么作什么,每个客货都只做一笔定单,还能够美其名曰:缘分!知道什么是诚信不。
虽然期间还是你联系,但是少了,只是你不停地问我技术,我没有办法,因为我真的不知道。我只能硬着头皮GOOGLE,找一个适合的给你。真的很累,某一天你问地时候我说我不知道,你还是非常高兴地告诉我这是什么什么的时候,麻烦你也顾忌下我得感受。
因为一次和老板地争论,辞职了。休息了一个月,决定暂时不做外贸了,太心寒了。转向IT技术,遇到一个好经理,把能交的都在交,环境也不错,和同事相处的挺愉快的。大家周末打打球,吃吃饭,一起玩玩。感觉都不错。
而从你知道你又恋爱了,又分手了,又one night stand了,我只是笑笑。一天我问你,你为什么不自己争取幸福时,你告诉我你不是个主动的人,你做地那些不是主动的是什么。完全搞不懂呢怎么想得,曾经想再呢的生日问你那个两年前的一个承诺,我想算了吧。不可能捋。就那样过去吧

2007年12月3日星期一

私はバカです

彼方は手伝うと言いました。我还真TMD用心帮你想,我真是傻