ORACLE手工建庫

手動建庫:
找到官方文檔,打開主索引
找到管理--create database
停止現有的數據庫,釋放內存

1.設置環境變量--ORACLE_SID
2.建立密碼文件
3.建立文本的參數文件
4.建立二進制參數文件
5.建立參數文件中描述的路徑
6.啓動數據庫到nomount
7.create database...
8.運行腳本: @$ORACLE_HOME/rdbms/admin/catalog 建立數據字典
@$ORACLE_HOME/rdbms/admin/catproc 建立應用的包
9.建立示例方案
conn system/abr/>@$ORACLE_HOME/sqlplus/admin/pupbld
conn / as sysdba
@$ORACLE_HOME/rdbms/admin/utlsampl.sql

打開官方文檔
Supporting Documentation
Administratior's Guide
2 creating and configuring an Oracle Database
第三項:Creating a Database with the CREATE DATABASE Statement
Step 9: Issue the CREATE DATABASE Statement

1.關閉其他所有的數據庫。
2.建立新數據庫(yy)的密碼文件
ORACLE用戶執行
cd $ORACLE_HOME/dbs
rapwd file=orapwyy password=a

3.建立文本的參數文件
strings spfileqq.ora (找一個已經存在的參數文件,將內容粘貼修改即可)
修改對應的數據庫名和文件路徑。
具體見本文檔下第3步詳情。

4.設置環境變量:ORACLE_SID=yy
export ORACLE_SID=yy

5.建立二進制參數文件
conn / as sysdba
create spfile from pfile;

6.建立參數文件中描述的路徑
cd /u01/app/oracle/admin
cp -r qq yy 進入到該目錄下將qq目錄複製重命名爲yy
建立數據文件存放目錄
cd /u01/app/oracle/oradata
mkdir yy
7.修改官方文檔的手動建庫腳本,改數據庫名,路徑,密碼等。
具體見本文下面第7步詳情

8.啓動數據庫到nomount,啓動數據庫到nomount階段會寫日誌到$ORACLE_BASE/admin/實例名/adump目錄
startup
報205錯誤
運行第7步修改後的 create database腳本創建數據庫。
腳本執行完畢後數據庫創建完成,建成一個裸庫,沒有數據字典

9.運行腳本: @$ORACLE_HOME/rdbms/admin/catalog 建立數據字典
@$ORACLE_HOME/rdbms/admin/catproc 建立應用的包

10.創建示例方案
SYS用戶執行
alter user system identified by a;
conn system/abr/>@$ORACLE_HOME/sqlplus/admin/pupbld
conn / as sysdba
@$ORACLE_HOME/rdbms/admin/utlsampl.sql

第3步詳情:
.audit_file_dest='/u01/app/oracle/admin/yy/adump'
.audit_trail='db'
.compatible='11.2.0.0.0'
.control_files='/u01/app/oracle/oradata/yy/control01.ctl','/u01/app/oracle/oradata/yy/control02.ctl'
.db_block_size=8192
.db_domain=''
.db_name='yy'
.diagnostic_dest='/u01/app/oracle'
.open_cursors=300
.pga_aggregate_target=308281344
.processes=150
.remote_login_passwordfile='EXCLUSIVE'
.sga_target=924844032
.undo_tablespace='UNDOTBS1'

第7步詳情:
CREATE DATABASE yy
USER SYS IDENTIFIED BY a
USER SYSTEM IDENTIFIED BY a
LOGFILE GROUP 1 ('/u01/app/oracle/oradata/yy/redo01.log') SIZE 20M,
GROUP 2 ('/u01/app/oracle/oradata/yy/redo02.log') SIZE 20M,
GROUP 3 ('/u01/app/oracle/oradata/yy/redo03.log') SIZE 20M
CHARACTER SET US7ASCII
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/oradata/yy/system01.dbf' SIZE 325M REUSE
SYSAUX DATAFILE '/u01/app/oracle/oradata/yy/sysaux01.dbf' SIZE 325M REUSE
DEFAULT TABLESPACE users
DATAFILE '/u01/app/oracle/oradata/yy/users01.dbf'
SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/app/oracle/oradata/yy/temp01.dbf'
SIZE 20M REUSE
UNDO TABLESPACE undotbs1
DATAFILE '/u01/app/oracle/oradata/yy/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

實驗2:掌握數據庫啓動3階段
刪除yy數據庫的參數文件,將yy數據庫的控制文件、數據文件、日誌文件移動到其他位置。
原來的目錄 $ORACLE_BASE/oradata/yy 新的目錄:$ORACLE_BASE/oradata/tt
1.查看數據庫位置
select name from v$datafile
union all
select name from v$controlfile
union all
select name from v$tempfile
union all
select member from v$logfile;

路徑:/u01/app/oracle/oradata/tt/

2.關閉數據庫
shutdown immediate;

3.刪除數據庫的參數文件,將數據庫的數據文件、日誌文件、控制文件移動到其他目錄。
cd $ORACLE_HOME/dbs
rm -rf inityy.ora
rm -rf spfileyy.ora
cd $ORACLE_BASE/oradata
mv yy tt

4.指定實例名,啓動數據庫
startup
報錯:ORA-01078找不到參數文件
根據 /u01/app/oracle/diag/rdbms/yy/yy/trace下的log文件創建新的參數文件。
cd $ORACLE_HOME/dbs
vi inityy.ora 將剛纔所看log文件的以下部分粘貼到該文本中,保存退出。

processes = 150
sga_target = 884M
control_files = "/u01/app/oracle/oradata/yy/control01.ctl"
control_files = "/u01/app/oracle/oradata/yy/control02.ctl"
db_block_size = 8192
compatible = "11.2.0.0.0"
undo_tablespace = "UNDOTBS1"
remote_login_passwordfile= "EXCLUSIVE"
db_domain = ""
audit_file_dest = "/u01/app/oracle/admin/yy/adump"
audit_trail = "DB"
db_name = "yy"
open_cursors = 300
pga_aggregate_target = 294M
diagnostic_dest = "/u01/app/oracle"
注:該步驟說明在數據庫啓動到numount階段就需要參數文件。

5.在第四步創建好文本參數文件後,以SYS身份連接到數據庫,創建二進制參數文件,啓動數據庫。
export ORACLE_SID=yy
sqlplus / as sysdba
create spfile from pfile;
startup
報錯:ORA-00205 控制文件錯誤
查看數據庫的狀態:數據庫處於STARTED狀態。
該步驟說明:在啓動到nomount階段時,只要參數文件無誤即可。
在mount數據庫時,需要用到控制文件。

6.修改參數文件中控制文件的位置:
alter system set control_files='/u01/app/oracle/oradata/tt/control01.ctl',
'/u01/app/oracle/oradata/tt/control02.ctl' scope=spfile;

7.上一步修改完成後關閉數據庫,再次啓動。
shutdown abort;
startup nomount; 成功
alter database mount; 成功
alter database opne; 報錯
報錯:ORA-01157不能找到數據文件,原因是數據文件已經被移動到其他路徑。

8.修改數據庫,重新指定數據庫的數據文件的位置:(所有的數據文件和日誌文件均要執行,可以寫腳本來完成)
alter database rename file '/u01/app/oracle/oradata/tt/undotbs01.dbf'
to'/u01/app/oracle/oradata/yy/undotbs01.dbf';

9.重新指定路徑成功後打開數據庫
alter database open;

dump目錄/u01/app/oracle/diag/rdbms/yy/yy/trace

修改參數control_files=新路徑

啓動數據庫 mount成功 open報錯

修改數據文件,臨時文件,數據文件

/u01/app/oracle/oradata/rr/control01.ctl
/u01/app/oracle/oradata/rr/control01.ctl

select 'alter database rename file '''||name||''''||chr(10)||' to''' ||
replace(name,'tt','yy')||''';' from v$datafile
union all
select 'alter database rename file '''||name||''''||chr(10)||' to''' ||
replace(name,'tt','yy')||''';' from v$tempfile
union all
select 'alter database rename file '''||member||''''||chr(10)||' to''' ||
replace(member,'tt','yy')||''';' from v$logfile ;

select 'alter database rename file '''||name||''''||chr(10)||' to '''||
'/newdb'||substr(name,instr(name,'/',-1))||';' from v$datafile;

段 segment

範圍 extend
一次分配的,連續的,ORACLE塊
一個段最少有一個範圍,可以有很多個範圍
範圍有3種模式
1.建立對象時,分配的叫做初始範圍
2.數據增長時,分配額外的範圍
3.手工分配範圍

conn / as sysdba
grant select any dictionary to scott
conn scott/tiger
select from dba_free_space where tablespace_name='USERS';
2.create table t1 as select
from emp;
create table t2 as select from emp;
3.select extent_id,file_id,block_id,blocks from dba_extents
where segment_name='T1';
4.insert into t1 select
from t1;
insert into t2 select * from t2;
select extent_id,file_id,block_id,blocks from dba_extents
where segment_name='T1';

select extent_id,file_id,block_id,blocks from dba_extents
where segment_name='T2';

手動分配空間:
alter table t1 allocate extent; 不指定大小,系統根據表已有大小分配。
alter table t1 allocate extent(size 2G); 指定大小
塊 block

SET LONG 1000
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','T2') FROM DUAL;

CREATE TABLE T1 SEGMENT CREATION IMMEDIATE AS SELECT * FROM EMP where 0=9;

SHOW PARAMETER SEGMENT

ALTER SYSTEM SET deferred_segment_creation=FALSE;

範圍回收3模式
1.手工回收未使用的範圍(嶄新的)
alter table t1 allocate extent(size 10m);
alter table t1 deallocate unused;

tabs=user_tables

select table_name,initial_extent from tabs where table_name='T2';
create table t2 storage(initial 1m) as select * from emp;

2.truncate table t1;(保留初始範圍)
3.drop table t1 purge;(徹底刪除空間)

alter table t2 allocate extent(size 10m);

select extent_id,file_id,block_id,blocks from dba_extents
where segment_name='T2';

DELETE
1.DML
2.產生大量的回退
3.產生大量日誌
4.可以rollback
5.手工commit;
6.不回收空間
7.不回收高水位
8.可以有條件刪除

TRUNCATE
1.DDL
2.產生少的回退
3.產生少量日誌
4.不可以rollback
5.自動commit;
6.回收空間
7.回收高水位
8.不可以有條件刪除

show parameter rec
alter system set recyclebin=off scope=spfile;

塊:
數據庫存儲的基本空間,默認是8K,建庫時指定

rowid行標識
是根據數據存在的位置計算出來的
18位64進制字符串

AAASdN AAE AAAACr AAA
對象 文件 塊 行

select rowid,ename,dbms_rowid.rowid_block_number(rowid) block# from emp;

ROWID_BLOCK_NUMBER
ROWID_OBJECT
ROWID_RELATIVE_FNO
ROWID_ROW_NUMBER

select rowid,ename,dbms_rowid.rowid_block_number(rowid) a,
dbms_rowid.ROWID_OBJECT(rowid) o,
dbms_rowid.ROWID_RELATIVE_FNO(rowid) f,
dbms_rowid.ROWID_ROW_NUMBER(rowid) r from emp;

select dbms_rowid.rowid_create(0,75335,4,151,0),
dbms_rowid.rowid_create(1,75335,4,151,0) from dual;

conn scott/123456;
drop table t1 purge;
create table t1 as select from emp;
insert into t1 select
from emp where deptno=10;
commit;
select ename,sal from t1 order by 1;
delete from t1 wai where rowid<(select max(rowid) from t1 nei where wai.ename=nei.ename);

ERROR:
ORA-09925: Unable to create audit trail file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 9925
ORA-01075: you are currently logged on

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章