oracle(創建數據庫對象)


   1 --創建數據庫
   2 --1.SYSDBA系統權限
   3 startup:--啟動數據庫。
   4 shutdown--關閉數據庫。
   5 alter database[mount]|[open]|[backup]|[character set]--修改數據庫到加載狀態、打開狀態,備份數據庫,修改數據庫字符集。
   6 create database--創建數據庫。
   7 drop database--刪除數據庫。
   8 create spfile:--創建服務器初始化參數文件。
   9 alter database archivelog:--修改數據庫的歸檔模式。
  10 alter database recover:--恢復數據庫(完全恢復或者不完全恢復)。
  11 --具有restricted session權限,可以在受限狀態下連接數據庫。
  12 --2.SYSOPER系統權限
  13 startup:--啟動數據庫。
  14 shutdown--關閉數據庫。
  15 create spfile:--創建服務器初始化參數文件。
  16 alter database[mount]|[open]|[backup]--修改數據庫到加載狀態、打開狀態,備份數據庫。
  17 alter database archivelog:--修改數據庫的歸檔模式。
  18 alter database recover:--恢復數據庫(只能進行完全恢復,不能進行不完全恢復)。
  19 --具有restricted session權限,可以在受限狀態下連接數據庫。
  20 --dba是一個角色
  21 --%ORACLE_HOME%NETWORK\ADMIN\sqlnet.ora,
  22 sqlnet.authentication_services=(nts)--不用密碼認證
  23 sqlnet.authentication_services=none--用密碼認證
  24 orapwd file=
  25     filename--在Windows系統中口令文件默認名稱為PWD<SID>.ora,默認存放位置為%ORACLE_HOME%\database
  26     [password=password]--設置SYS用戶口令。如果沒有設定,執行時系統提示設置SYS用戶口令。
  27     [entries=numusers]--設定口令文件中可以保存的具有SYSDBA或SYSOPER權限的用戶最大數量。
  28     [force=y|n]--明如果指定的口令文件已經存在,是否覆蓋。值為Y,則覆蓋
  29     [ignorecase=y|n]--指定存儲在口令文件中的SYS用戶口令是否對大小寫敏感。
  30 GRANT SYSDBA TO oe;--
  31 select * from v$pwfile_users;
  32 revoke sysdba from oe;--刪除用戶
  33 --手動創建數據庫
  34 create database database_name
  35     [user sys identified by password]--設置sys用戶口令
  36     [user system idnetified by password]--設置system用戶口令
  37     [controlfile reuse]--按初始化參數文件中的control_files的值創建控制文件
  38     [maxinstances integer]--指定允許同時裝載和打開的數據庫實例個數
  39     [maxdatafiles integer]--設置控制文件中允許創建最多數據文件數量
  40     [maxloghistory integer]--可以自動歸檔的最大日志文件的數量,僅適用於RAC環境
  41     [maxlogfiles integer]--數據庫中最大日志文件的數量
  42     [maxlogmembers integer]--設置每個日志文件組中最大成員日志文件數量 
  43     [archivelog|noarchivelog]--設置新建數據庫處於歸檔模式
  44     [force logging]--數據庫中所有的變化信息(除了臨時表空間)都寫入日志文件
  45     [character set charset]--設置數據庫字符集
  46     [national character set charset]--設置國家字符集
  47     [set time_zone=time_zone_region]--設置數據庫時區
  48     [set default smallfile|--設置默認創建的表空間為小文件表空間
  49         bigfile tablespace]--設置默認創建的表空間為大文件表空間
  50     --設置重做日志文件
  51     [logfile[[group integer]('filename1'[,…])[size integer[k|m|g|t][reuse]]],…]
  52     --設置 system 表空間
  53     [extent management local]--設置system表空間采用本地管理方式
  54     [datafile 'filename'
  55         [size integer[k|m][reuse]]
  56         [autoextend off
  57             [
  58                 on
  59                 [
  60                     next integer[k|m]
  61                     maxsize unlimited|[integer[k|m|g|t]]
  62                 ]
  63             ]
  64         ],…]
  65     --設置 sysaux 表空間
  66     [sysaux datafile 'filename'[size integer[k|m|g|t][reuse]][autoextend off
  67     [on[next integer[k|m]maxsize[unlimited|integer[k|m|g|t]]]]],…]--為sysaux表空間創建數據文件
  68     --設置數據庫默認表空間
  69     [default tablespace default_tablespace_name]--為數據庫創建並指定默認表空間
  70     [datafile 'filename' [size integer[k|m][reuse]][autoextend off--為system表空間創建數據文件
  71     [on[next integer[k|m]maxsize unlimited|[integer[k|m|g|t]]]]],…]
  72     [extent management dictionary|[local[autoallocate|[uniform size
  73     integer[k|m|g|t]]]]]
  74     --設置數據庫默認臨時表空間
  75     [default temporary tablespace default_temp_tablespace_name]--為數據庫創建並指定默認臨時表空間
  76     [tempfile 'filename' [size integer[k|m|g|t][reuse]][autoextend off
  77     [on[next integer[k|m|g|t]maxsize unlimited|[integer[k|m|g|t]]]]],…]
  78     [extent management[dictionary|[local uniform size integer[k|m|g|t]]]]
  79     --設置數據庫撤銷表空間
  80     [undo tablespace undo_tablespace_name]--為數據庫創建並指定默認撤銷表空間
  81     [datafile 'filename' [size integer[k|m|g|t][resuse]][autoextend off
  82     [on[next integer[k|m|g|t]maxsize unlimited|[integer[k|m|g|t]]]]],…]
  83 ---------------------------------------------------------------------------------------------------------
  84 --手動創建數據庫實例
  85 --1.確定數據庫名稱與數據庫實例名稱
  86 --數據庫名稱(db_name),數據庫實例名稱(instance_name)。
  87 --2.保證必需的環境變量的設置
  88 --將ORACLE_HOME\bin路徑信息寫入PATH環境變量等。
  89 --SET ORACLE_SID=MYNEWDB
  90 --3.確定數據庫管理員的認證方式
  91 --操作系統認證方式,口令文件認證方式
  92 orapwd--創建口令文件
  93 file=d:\app\administrator\product\11.2.0\dbhome_1\database\pwdmynewdb.ora
  94 password=mynewdb entries=10
  95 --4.創建文本初始化參數文件
  96 %ORACLE_HOME%\database\init<SID>.ora
  97 --其內容為:
  98 #設置全局數據庫名
  99 db_domain=''
 100 db_name='MYNEWDB'
 101 #設置快速恢復區
 102 db_recovery_file_dest='d:\app\Administrator\flash_recovery_area'
 103 db_recovery_file_dest_size=2G
 104 #設置控制文件
 105 control_files=(
 106 'D:\app\Administrator\oradata\mynewdb\control01.ctl',
 107 'D:\app\Administrator\oradata\mynewdb\control02.ctl',
 108 'D:\app\Administrator\oradata\mynewdb\control03.ctl')
 109 #設置標准數據塊大小
 110 db_block_size=8192
 111 #設置內存管理
 112 memory_target=1G
 113 #設置最大進程數
 114 processes=150
 115 #設置撤銷空間管理
 116 undo_management=AUTO
 117 undo_tablespace=UNDOTBS
 118 #設置兼容性
 119 compatible='11.2.0'
 120 #設置共享服務器
 121 dispatchers='(PROTOCOL=TCP)(SERVICE=MYNEWDBXDB)'
 122 #設置安全與審計
 123 audit_file_dest='D:\app\Administrator\admin\mynewdb\adump'
 124 audit_trail='db'
 125 #口令文件管理
 126 remote_login_passwordfile=EXCLUSIVE
 127 #設置游標
 128 open_cursors=300
 129 #設置診斷與跟蹤信息
 130 diagnostic_dest='D:\app\Administrator'
 131 #設置作業隊列
 132 job_queue_processes=10
 133 --注意 初始化參數文件中所涉及的目錄需要預先手動創建。
 134 --5.創建數據庫實例
 135 oradim-new-sid sid--表示新建一個數據庫實例。SID,設置新建數據庫實例的名稱
 136     [-syspwd password]--設置SYS用戶口令。
 137     [-startmode manual|auto]--設置數據庫實例的啟動模式。如果設置為AUTO,
 138                             --創建實例后將啟動實例、加載數據庫,由於此時數據庫還不存在,
 139                             --將導致錯誤。因此,應設置此參數為MANUAL。
 140     [
 141         [-pfile pfile]--指定數據庫實例啟動時使用文本初始化參數文件。
 142             |spfile--指定數據庫啟動時使用服務器初始化參數文件。
 143     ]--
 144     [-shutmode normal|immediate|abort]--設置數據庫實例關閉方式。
 145 --
 146 c:\>oradim-new-sid mynewdb-startmode manual
 147 --6.連接到數據庫實例
 148 C:\>SQLPLUS/NOLOG
 149 SQL>CONNECT sys/mynewdb AS SYSDBA
 150 --其中,mynewdb是保存在口令文件中的SYS用戶的口令。
 151 --7.創建服務器初始化參數文件
 152 SQL>CREATE SPFILE FROM PFILE;--為MYNEWDB數據庫創建服務器初始化參數文件
 153                               --(建議用戶使用數據庫服務器初始化參數文件(spfile),
 154                               --而不是使用文本初始化參數文件(pfile))
 155 --8.啟動數據庫實例
 156 SQL>startup nomount
 157 --9.執行CREATE DATABASE語句
 158 --10.創建附加的表空間
 159 --11.運行腳本創建數據字典視圖
 160 --在手動創建數據庫時,需要手動運行腳本創建數據字典視圖與同義詞、創建PL/SQL包,
 161 --以及提供對SQL*Plus工具的支持。
 162 SQL>CONNECT sys/mynewdb AS SYSDBA
 163 SQL>@D:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\catalog.sql;
 164 SQL>@D:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\catproc.sql;
 165 SQL>CONNECT system/mynewdb
 166 SQL>@D:\app\Administrator\product\11.2.0\dbhome_1\sqlplus\admin\pupbld.sql
 167 --12.運行腳本安裝其他組件
 168 --13.備份數據庫
 169 --14.修改數據庫實例的啟動模式
 170 oradim-edit-sid sid
 171     [-startmode auto|manual]
 172     [-srvcstart system|demand]
 173     [-pfile file|-spfile]
 174     [-shutmode normal|immediate|abort]
 175     [-syspwd password]
 176 -------------------------------------------------------------------------------------------------------------
 177 --創建表空間
 178 create
 179     [bigfile|smallfile]--指定要創建大文件表空間,還是小文件表空間。如不指定,則由數據庫屬性DEFAULT_TBS_TYPE指定,默認為SMALLFILE。
 180     [temporary|undo]tablespace tbs_name--指定要創建的表空間類型,默認為永久表空間
 181     datafile|tempfile path/filename size integer[k|m][reuse]--指定表空間的數據文件的位置和名稱。
 182     [
 183         autoextend[off|on]next integer[k|m]--指定數據文件是否可以自動擴展。如果可以自動擴展,需要設置NEXT值指明每次擴展的大小,
 184         maxsize[unlimited|integer[k|m]]    --設置MAXSIZE值指明文件的最終大小。默認值為OFF,不可擴展。
 185     ]
 186     [tablespace group tablespace_group_name]--只用於臨時表空間,指定該臨時表空間加入某個臨時表空間組。
 187                                             --如果指定的臨時表空間組不存在,系統會自動創建該臨時表空間組。
 188     [extent management dictionary|local]--指定表空間的管理方式,默認為LOCAL,即本地管理。
 189     [autoallocate|uniform size integer[k|m]]--本地管理表空間區采用自動分配方式,區的最小值為64KB。自動分配是本地管理表空間中區的默認分配方式
 190     [segment space management auto|manual]--本地管理表空間中段的管理方式,默認為AUTO。
 191     [retention guarantee|noguarantee]--用於撤銷表空間,指明事務提交后,回退信息在回退段中保留時間仍然為UNDO_RETENTION,在這段時間內回退信息不會被覆蓋。
 192     [encryption[using encrypt_algorithm]--指定表空間的加密方法。
 193     [identified by password][[no]salt]]--
 194     [minimum extent integer[k|m]]--表空間中區的最小值。這是為了與早期版本的兼容而保留的子句。
 195     [
 196         default storage(
 197         [initial integer[k|m]]--為第一個區的大小
 198         [next integer[k|m]]--第二個區的大小
 199         [pctincrease integer]--第三個區和以后擴展的區的增長百分率,
 200         [minextents integer]--為段分配的區的最小數目
 201         [maxextents integer|unlimited])--為段分配的區的最大數目。這是為了與早期版本的兼容而保留的子句。
 202     ]
 203     [online|offline]--新建表空間處於脫機狀態還是聯機狀態。
 204     [logging|--數據庫對象的創建以及數據的DML操作信息都寫入重做日志文件。
 205         nologging]--數據庫對象的創建以及數據的DML操作信息都寫入重做日志文件,但是數據的加載操作不寫入重做日志文件。
 206     [force logging]--表空間中所有對象發生的變化信息(臨時段的變化信息除外)都將被寫入重做日志文件中,忽略NOLOGGING子句的作用。
 207     [blocksize integer]--表空間所基於的數據塊大小。
 208     [flashback on|off]--是否支持表空間的閃回操作
 209 --說明BLOCKSIZE:表空間所基於的數據塊大小。若為非標准塊表空間,需要配置初始化參數DB_nK_CACHE_SIZE參數,其中nKB就是BLOCKSIZE的值。
 210 --默認為標准塊表空間,BLOCKSIZE值為初始化參數DB_BLOCK_SIZE的值。
 211 --------------------------------------------------------------------------------------------------------
 212 --創建數據文件
 213 create tablespace--創建表空間同時創建數據文件
 214 create temporary tablespace --創建臨時表空間的同時創建臨時數據文件 
 215 alter tablespace...add datafile --向表空間添加數據文件 
 216 alter tablespace...add tempfile--向臨時表空間添加數據文件 
 217 create database --創建數據庫時創建數據文件 
 218 alter database...create datefile--數據氈恢復操作時,新建一個數據文件取代出現故障的數據文件 
 219 --
 220 alter tablespace users add datafile 'd:\app\administrator\oradata\orcl\users02.dbf' size 10m;
 221 --修改數據文件大小
 222 select file_name,autoextensible from dba_data_files;--查看當前數據庫所有數據文件的擴展方式。
 223 --
 224 alter database datafile 'd:\app\administrator\oradata\orcl\users04.dbf'size 10m autoextend on next 512k maxsize 100m;
 225 --改變數據文件的可用性
 226 --要進行數據文件的脫機備份時,需要先將數據文件脫機。
 227 --需要重命名數據文件或改變數據文件的位置時,需要先將數據文件脫機。
 228 --如果Oracle在寫入某個數據文件時發生錯誤,系統會自動將該數據文件設置為脫機狀態,並且記錄在報警文件中。排除故障后,需要以手動方式重新將該數據文件恢復為聯機狀態。
 229 --數據文件丟失或損壞,需要在啟動數據庫之前將數據文件脫機。
 230 --歸檔模式下:
 231 alter database datafile…online|offline--設置永久性數據文件的脫機與聯機。
 232 alter database tempfile…online|offline--設置臨時數據文件的脫機與聯機。
 233 --將ORCL數據庫設置為歸檔模式。
 234 shutdown immediate--數據庫己經關閉,己經卸載數據庫,例程己關閉
 235 startup mount--例程己啟動
 236 --
 237 alter database datafile
 238 'd:\app\administrator\oradata\orcl\users01.dbf'offline;--脫機
 239 recover datafile
 240 'd:\app\administrator\oradata\orcl\users01.dbf';--完成介質恢復。
 241 alter database datafile
 242 'd:\app\administrator\oradata\orcl\users01.dbf'online;--聯機
 243 --非歸檔模式下數據文件的脫機
 244 --由於數據庫處於非歸檔模式,數據文件脫機后,會導致信息的丟失,從而使該數據文件無法再聯機,
 245 --即無法使用了。因此,在非歸檔模式下,通常不能將
 246 shutdown immediate
 247 startup mount
 248 alter database noarchivelog;
 249 alter database open;
 250 alter database datafile 'd:\app\administrator\product\11.2.0\dbhome_1\database\users3.dbf' offline for drop;
 251 select file_name,from dba_data_files where tablespace_name = 'users';
 252 --注意 使用該語句只是將數據文件脫機,數據文件不可用,並沒有從數據字典以及控制文件中刪除該數據文件信息,也沒有從磁盤上刪除該數據文件。
 253 --該文件隨后可以隨其所屬表空間的刪除而刪除。
 254 alter tablespace users datafile offline;
 255 select name,status from v$datafile where ts# = (select ts# from  v$tablespace where name='users');
 256 --查看users表空間各個數據文件的狀態
 257 recover tablespce users;
 258 --改變數據文件的名稱與位置
 259 alter tablespacle…rename datafile…to--改變同一個表空間中的數據文件的名稱與位置。
 260 alter database rename fileto--改變多個表空間中的數據文件的名稱與位置
 261 --
 262 select file_name,bytes from dba_data_files where tablespace_name = 'users';
 263 alter tablespace users datafile offline;
 264 host copy d:\app\administrator\oradata\orcl\users02.dbf d:\disk1\users02.dbf
 265 host copy d:\app\administrator\oradata\orcl\users04.dbf d:\disk1\users04.dbf
 266 alter tablespace users rename datafile 
 267 'd:\app\administrator\oradata\orcl\users02.dbf',
 268 'd:\app\administrator\oradata\orcl\users04.dbf' to
 269 'd:\disk1\users02.dbf',
 270 'd:\disk1\users02.dbf'
 271 alter tablespace users online;
 272 --修改多個表空間中數據文件的名稱與位置
 273 select file_name, bytes from dba_data_files where tablespace_name in('users','example');
 274 shutdown immediate
 275 startup mount
 276 host copy d:\app\administrator\oradata\orcl\users01.dbf d:\disk2\users01.dbf
 277 host copy d:\app\administrator\oradata\orcl\example01.dbf d:\disk2\example01.dbf
 278 alter database rename file_name
 279 alter database open;
 280 --刪除數據文件
 281 alter tablespace…drop datafile--刪除永久表空間中指定的空的數據文件。
 282 alter tablespace…drop tempfile--刪除臨時表空間中指定的空的臨時數據文件。
 283 --
 284 alter tablespace users drop datafile
 285 'd:\app\administrator\product\11.2.0\dbhome_1\database\users03.dbf';
 286 alter tablespace temp drop tempfile
 287 'd:\app\administrator\oradata\orcl\temp02.dbf';
 288 alter database tempfile
 289 'd:\app\administrator\oradata\orcl\temp02.dbf'drop;
 290 
 291 ------------------------------------------------------------------------------------------------------------
 292 --創建模式
 293 --可以使用create schema語句在一個事務中同時為當前模式創建多個表、視圖,並執行多個授權操作。
 294 --在執行時,當所有的語句都成功完成時,系統提交該事務,當其中任何一個操作失敗時,系統回滾整個事務。
 295 create schema authorization schema--指定模式名稱,必須為當前模式的名稱。
 296 [create_table_statement]--創建表的語句,結尾不能加分號等結束符號。 
 297 [create_view_statement]--創建視圖的語句,結尾不能加分號等結束符號。
 298 [grant_statement];--為用戶授予對象權限或系統權限,結尾不能加分號等結束符號。
 299 --例:在system模式下創建一個表new_product、一個視圖new_product_view,並將視圖new_product_view的select權限授予用戶scott
 300 connect system/sfd12345@orcl 
 301 create schema authorization system 
 302 create table new_product(   color varchar2(10)primary key,   quantity number  ) 
 303 create view new_product_view  
 304    as   
 305   select color,quantity from new_product 
 306      where color='red' grant select 
 307   on new_product_view to scott;
 308 ------------------------------------------------------------------------------------------------
 309 --創建表
 310 --標准表、臨時表、索引表、分區表、聚簇表,外部表 
 311 create[global temporary]table[schema.]table
 312 (
 313     column1 datatype[default|:=expr]--列的數據類型,設置列的默認值。
 314     [encrypt encryption_spec]--對列數據進行加密,設定采用的加密算法。
 315     [column_level_constraint]--列級約束
 316     [,column2[datatype]
 317        [generated always]as(column_expression)--創建虛擬列。
 318        [virtual]
 319        [column_level_constraint]--表級約束
 320     ]
 321  322     [,table_level_constraint]
 323 )
 324 [on commit delete|preserve rows]--指定臨時表的類型
 325 [organization
 326     [heap[segment_attributes_clause]table_compression]--創建標准表,以堆結構組織數據
 327     [index[segment_attributes_clause]index_org_table_clause]--創建索引表,以平衡樹(b-tree)結構組織數據。
 328     [external external_table_clause]--創建外部表,數據只讀
 329 ]
 330 [partition by partition_clause]--創建分區表
 331 [cluster cluster(column)]--創建聚簇表
 332 [tablespace tablespace]--設置表的存儲位置
 333 [logging|nologging]--指明表的創建過程是否寫入重做日志文件。默認為logging。
 334 [cache|nocache]--指明表中數據是否緩存。默認為cache
 335 [compress|nocompress]--指明表中數據是否壓縮。默認為nocompress。
 336 [
 337     [noparallel]|[parallel integer]--指明是否允許並行創建表以及隨后對表中數據進行並行操作。默認為noparallel。
 338 ]
 339 [pctfree integer]--指定塊中必須保留的最小空閑空間比例,用於更新數據塊內存在的數據行,而其余80%是用於插入新的數據行
 340 [pctused integer]--指定可以向塊中插入數據時塊已使用的最大空間比例。低於這個值才會插入數據,默認是10%
 341 [initrans integer]--可以同時對數據塊進行dml操作的事務的初始個數,用於保證數據塊的最低並行操作水平。
 342 [maxtrans integer];--可以同時對此數據塊進行dml操作的事務的最多個數,用於保證數據塊的最大並行操作水平
 343 [storage--設置表的存儲分配方式。若不指定,則繼承表空間的存儲參數設置。(如果表空間采用字典管理方式,則可以在STORAGE子句設置任何存儲參)
 344 (
 345     initial 65536 --指定為表段分配的第一個區的大小,以KB或MB為單位。默認值為5個數據塊大小,最小值為2個數據塊的大小。
 346     next 1048576 --指定為表段分配的第二個區的大小,以KB或MB為單位。默認值為5個數據塊大小,最小值為1個數據塊的大小。
 347     minextents 1 --指定允許為表段初始分配的區的最小數量。默認值為1,最小值為1。
 348     maxextents 2147483645--指定允許為表段分配的區的最大數量。默認為UNLIMITED(不受限制),最小值為1
 349     pctincrease 0 --指定從為表段分配的第三個區開始,區大小的增長百分比。當前區的大小為前一個區大小×(1+PCTINCREASE)。默認值為50,最小值為0。
 350     freelists 1 --
 351     freelist groups 1 --
 352     buffer_pool default --指定存放表數據的緩存池。表中數據存放在數據高速緩沖區中,數據高速緩沖區分為KEEP、RECYCLE和DEFAULT三個緩存池。如果沒有指定BUFFER_POOL參數,BUFFER_POOL參數的默認值為DEFAULT,即數據存放在DEFAULT緩存池中。如果某個表的訪問頻率很高,可以將表的BUFFER_POOL參數設置為KEEP,這時該表的數據塊將始終駐留在SGA中,以獲得更快的訪問速度。
 353     flash_cache default --
 354     cell_flash_cache default--
 355 )]
 356 ----------------------------------------------------------------------------------------------------
 357 --利用子查詢創建表
 358 create[global temporary]table table
 359 (
 360     column1[column_level_constraint]
 361     [,column2[column_level_constraint]…]
 362     [,table_level_constraint]
 363 )
 364 [on commit delete|preserver rows]
 365 [organization
 366     [heap[segment_attributes_clause]table_compression]
 367     [index[segment_attributes_clause]index_org_table_clause]
 368     [external external_table_clause]
 369 ]
 370 [partition by partition_clause]
 371 [other_parameter_list]
 372 as
 373 subquery;
 374 ---------------------------------------------------------------------------
 375 --維護表
 376 --修改表
 377 alter table[schema.]table
 378     [alter_table_properties]--修改表屬性參數
 379     [column_clauses]--修改表列
 380     [constraint_clauses]--修改表約束。
 381     [alter_table_partitioning]--修改分區表。
 382     [alter_external_table]--修改外部表。
 383     [move_table_clause]--修改表移動屬性
 384 --添加列
 385 alter table table
 386 add
 387 (
 388     column1 datatype[default value][not null]
 389     [,column2 datatype generated always as(expression)[virtual]…]
 390 );
 391 --為表添加列時,如果表中已經有數據,那么新列不能用NOT NULL約束,
 392 --除非為新列設置默認值。在默認情況下,新插入列的值為NULL。
 393 --
 394 alter table aux_emp
 395 add
 396 (
 397     phone_number varchar2(20),
 398     hiredate date default sysdate not null 399     commission number(7,2)generated always as(sal*comm)
 400 );
 401 --刪除列
 402 alter table table
 403 drop[column column]|[(column1,column2,…)]
 404     [cascade constraints];
 405 --注意:如果被刪除的列被其他表的外鍵引用,則必須使用CASCADE CONSTRAINTS選項,
 406 --同時刪除引用表的外鍵。否則,列的刪除操作無法成功完成。
 407 --將列標記為UNUSED狀態,然后刪除UNUSED狀態列。
 408 alter table table_name
 409     set unused[column column]|[(column1,column2,…)]
 410     [cascade constraints];
 411 --修改列定義
 412 alter table table
 413     modify column[datatype][default expression]
 414     [encrypt encryption_specification]|[decrypt];
 415 --.修改列名
 416 alter table table rename column oldname to newname;
 417 --注意:依賴於該列的函數索引和檢查約束繼續保持有效狀態。
 418 --依賴於該列的視圖、觸發器、函數、存儲過程和包變為失效狀態。當這些對象下次被調用時,
 419 --系統自動進行重新編譯,使之變為有效狀態;如果自動編譯不成功,需要進行手動修改這些對象。
 420 --
 421 alter table aux_emp rename column hiredate to hire_date;
 422 
 423 --表結構重組
 424 alter table aux_emp move
 425     storage
 426     (
 427         initial 20k
 428         next 40k 
 429         minextents 2
 430         maxextents 20
 431         pctincrease 0
 432     )
 433     tablespace tbs1;
 434     --1.手動分配表的存儲空間
 435 alter table tablename allocate extent[([size size][datafile 'filename'])];
 436 --
 437 alter table aux_emp allocate extent (size 100k datafile'd:\disk1\tbs1_1.dbf');
 438 --2.手動回收表的存儲空間
 439 dbms_space.unused_space('ehr','aux_emp','table',
 440 total_blocks,total_bytes,unused_blocks,
 441 unused_bytes,lastextf,last_extb,lastusedblock);
 442 alter table 表名 deallocate  unused[keep size];--keep是還要保留的空間
 443 --3.改變表的讀寫模式
 444 alter table 表名 read only
 445 --4.重命名表
 446 alter table table_old_name rename to table_new_name;
 447 --
 448 rename table_old_name to table_new_name;
 449 
 450 --給表或列加注解
 451 comment on table table is ;
 452 comment on column table.column is ;
 453 --刪減表
 454 delete --使用delete語句刪除表中大量記錄會占用較多的系統資源,包括cpu時間、重做日志存儲空間、回退段存儲空間等,
 455 --同時還會觸發表中定義的觸發器。使用delete語句刪除記錄后,這部分記錄占據的空間變成空閑空間,oracle並不會回收這部分存儲空間,
 456 --hwm的位置不會改變,也無法使用手動操作回收該空閑空間。
 457 --因此,如果要刪除表中所有記錄,通常使用truncate或drop語句,而不使用delete語句
 458 drop --用drop語句刪除整個表,包括表結構,回收表的存儲空間,然后使用create語句重新創建該表。
 459 truncate --使用truncate語句可以快速、高效地刪除表中所有的記錄。truncate語句屬於ddl語句,執行后立即提交,不會產生任何重做日志信息、
 460 --回退信息,因此truncate操作不能被回滾。在執行truncate語句時不會影響與被刪減表相關的數據庫對象以及該表的授權,也不會觸發表中定義的觸發器。
 461 --與delete操作不同,使用truncat語句刪除表中數據的同時,hwm位置發生變化,分配給表的存儲空間部分或全部被回收。
 462 truncate table[schema.]table
 463 [
 464     [drop[all]]|reuse storage--drop storage:默認選項,被刪減表中只會保留由存儲參數minextents指定的區的最小個數,其余的區都被回收
 465 ];
 466 --drop table
 467 drop table[schema.]table[cascade constraints][purge];
 468 drop table aux_emp purge;--清空回收站
 469 --分析表
 470 dbms_stats.gather_table_stats--統計表的存儲過程
 471 (
 472     ownname varchar2,
 473     tabname varchar2,
 474     partname varchar2 default null,
 475     estimate_percent number default
 476     to_estimate_percent_type(get_param('estimate_percent')),
 477     block_sample boolean default false,
 478     method_opt varchar2 default get_param('method_opt'),
 479     degree number default to_degree_type(get_param('degree')),
 480     granularity varchar2 default get_param('granularity'),
 481     cascade boolean default to_cascade_type(get_param('cascade')),
 482     stattab varchar2 default null,
 483     statid varchar2 default null,
 484     statown varchar2 default null,
 485     no_invalidate boolean default to_no_invalidate_type(
 486     get_param('no_invalidate')),
 487     stattype varchar2 default 'data',
 488     force boolean default false
 489 );
 490 --可以查詢user_tables、all_tables、dba_tables數據字典視圖獲取分析后的統計信息。
 491 --可以使用analyze語句清除數據字典中表的統計信息,語法為:
 492 analyze table[schema.]table delete[system]statistics;
 493 analyze table employees delete statistics;--在刪除表的統計信息的同時,該表上所有索引的統計信息也同時被刪除了。
 494 --驗證表存儲結構
 495 analyze table[schema.]table validate structure--
 496 [
 497     cascade--對表進行完整性驗證的同時,也對定義在該表上的索引進行完整性驗證。
 498     [
 499         complete--對表及其索引進行完全的存儲結構完整性驗證,默認值。
 500         [into[schema.]table]--將驗證返回的、包含損壞數據塊的記錄的ROWID保存到用戶自定義的表中。
 501         [offline--在對表進行存儲結構完整性驗證時不允許對表進行DML操作。默認值。
 502           |online]--如果對表進行存儲結構完整性驗證時,若有用戶對該表進行DML操作,則必須使用ONLINE參數,
 503                   --以聯機方式對表進行存儲結構完整性驗證。這樣雖然會稍微影響DML執行性能,但為表的存儲結構完整性驗證提供了更大的靈活性。
 504     ]|fast--對表和索引進行完全的結構完整性驗證需要占用大量的資源,可以使用FAST參數,采用優化驗證算法的驗證方法。
 505           --該驗證方法可以快速實現對表的完整性驗證,但不返回損壞數據塊的詳細信息。
 506 ];
 507 
 508 @d:\app\administrator\product\11.2.0\dbhome_1\rdbms\admin\utlvalid.sql;--創建一個默認表INVALID_ROWS 
 509 analyze table employees validate structure;--分析表
 510 @D:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\UTLCHN1.SQL;--CHAINED_ROWS表
 511 analyze table[schema.]table list chained rows[into[schema.table]];--分析行鏈接、行遷移情況
 512 -------------------------------------------------------------------------------------------------------
 513 --約束的定義方式
 514 --1.列級約束
 515 column_definition[constraint constraint_name]constraint_type…
 516 --2.表級約束
 517 [constraint constraint_name] constraint_type(column1[,column1,…])…
 518 --約束的狀態
 519 enable--激活
 520 disable--禁用
 521 validate--對表中已有記錄進行約束檢查
 522 novalidate--不對表中已有記錄進行約束檢查。
 523 --創建與維護約束
 524 --1.采用列級約束方式定義約束
 525 constraint constraint--約束名稱,如果用戶沒有為約束命名,Oracle將自動為約束命名,樣式為SYS_Cn,其中n是數據庫對象的唯一編號。
 526     [[not]null]|[unique]|[primary key]|[check(condition)]
 527     [
 528         references[schema.]object[(column)]
 529         [on delete cascade|[set null]]--定義級聯刪除的外鍵約束。
 530     ]
 531     [
 532         [not deferrable]|--約束不可延遲,默認值。
 533             [deferrable--約束可以延遲
 534                 [initially immediate|--可延遲約束的立即檢查。
 535                     deferred]--可延遲約束的延遲檢查
 536             ]
 537     ]
 538     [enable|disable]
 539     [validate|novalidate]
 540     [using index index_clause]--設置在定義主鍵約束或唯一性約束時自動創建的唯一性索引的參數。
 541     [exceptions into[schema.]table]--將違反完整性約束的記錄保存到指定的表中。
 542 --2.采用表級約束方式定義約束
 543 constraint constraint
 544     [unique(column1[,column2…])]
 545     [primary key(column1[,column2…])]
 546     [check(condition)]
 547     [foreign key(column1[,column2…])
 548         references[schema.]object[(column[,column2…])]
 549         [on delete cascade|[set null]]
 550     ]
 551     [
 552         [not deferrable]|--約束不可延遲,默認值。
 553             [deferrable--約束可以延遲
 554                 [initially immediate]|--可延遲約束的立即檢查。
 555                     deferred]--可延遲約束的延遲檢查S
 556     ]
 557     [enable|disable][validate|novalidate]
 558     [using index index_clause]
 559     [exceptions into[schema.]table]
 560 --添加、修改與刪除約束
 561 --1.添加約束alter table table
 562 add[constraint constraint]constraint_type(column1[,column2,…])
 563 [constraint_parameters];
 564 alter table books modify title not null;--添加非空約束
 565 --2.修改約束
 566 ALTER TABLE table
 567 MODIFY[CONSTRAINT constraint]
 568 [PRIMARY KEY]|[UNIQUE(column1[,column2,…])]
 569 [constraint_parameters];
 570 --3.重命名約束
 571 alter table table rename constraint old_name to new_name;
 572 --4.刪除約束
 573 ALTER TABLE table
 574     DROP[CONSTRAINT constraint]
 575     [PRIMARY KEY]|[UNIQUE(column1[,column2,…])]
 576     [CASCADE][KEEP|DROP INDEX]
 577 set constraints all deferred;--對所有可以延遲的約束進行延遲檢查
 578 set constraints all immediate;--恢復所有延遲檢查的約束為立即檢查
 579 -----------------------------------------------------------------------------------
 580 --創建其它表
 581 --創建索引表
 582 create table[schema.]table
 583 (
 584     column1 datatype[default|:=expr][column_level_constraint]
 585  586     [,table_level_constraint]
 587 )
 588     organization index--創建索引表
 589     [pctthreshold percent]--指定保留在索引段的索引條目中的記錄的百分比,超出該百分比的部分將保存到溢出數據段中,即一條記錄分成兩部分,
 590                           --一部分包含主鍵的列保存在原來的索引段中,而另一部分不包括主鍵的列保存到溢出數據段中。
 591     [including column]--該子句指定的列之前的所有列與主鍵列一起保存在索引段的索引條目中(數據百分比不能超過PCTTHRESHOLD設定的值),
 592                       --而之后的列都被存儲在溢出數據段中。
 593     [overflow tablespace tablespace]--指定溢出數據段的存儲表空間。
 594     --注意 創建索引表時,必須定義一個主鍵約束,否則將返回錯誤。
 595 --創建分區表
 596 create table table(…)
 597     partition by range(column1[,column2,…])--采用范圍分區,分區列,可以是單列分區,也可以是多列分區。
 598     (
 599         partition partition1 values less than(literal|maxvalue)--分區設置(partition1就是個名字)。設置分區列值的上界。
 600         [tablespace tablespace]--設置分區所在的表空間
 601         [,partition partition2 values less than(literal|maxvalue)
 602         [tablespace tablespace],…]
 603     )
 604 alter tablespace tbs1 offline;--將分區表的一分區設置為脫機狀態,驗證分區的可用性
 605 --創建列表分區表
 606 create table table(…)
 607     partition by list(column)--采用列表分區
 608     (
 609         partition partition1 values([literal|null]|[default])
 610             [tablespace tablespace]
 611             [,
 612                 partition partition2 values([literal|null]|[default])
 613                 [tablespace tablespace],…
 614             ]
 615     )
 616 --創建散列分區表
 617 create table table(…)
 618     partition by hash(column1[,column2,…])
 619     [(partition partition[tablespace tablespace][,…])]
 620     [partitions hash_partition_quantity store in(tablespace1[,…])]
 621  622 --------------------------------------------------------------------------------------
 623 --PL/SQL
 624 --一個完整的PL/SQL語句塊由3個部分組成。
 625 declare
 626 --聲明部分,定義變量、數據類型、異常、局部子程序等
 627 begin
 628 --執行部分,實現塊的功能
 629 exception
 630 --異常處理部分,處理程序執行過程中產生的異常
 631 end;
 632 ----------------------------------------------------------------------------------------
 633 --控制結構
 634 --1.IF語句
 635 --利用IF語句實現選擇控制的語法為:
 636 if condition1 then statements1;
 637     [elsif condition2 then statements2;]
 638  639     [else else_statements];
 640 end if;
 641 --2.CASE(等值比較)
 642 case test_value
 643     when value1 then statements1;
 644     when value2 then statements2;
 645     ……
 646     when valuen then statementsn;
 647     [else else_statements;]
 648 end case;
 649 --2.CASE(多條件比較或搜索比較)
 650 case
 651     when condition1 then statements1;
 652     when condition2 then statements2;
 653     ……
 654     when conditionn then statementsn;
 655     [else else_statements;]
 656 end case;
 657 --3.LOOP
 658 loop
 659     sequence_of_statement;
 660     exit[when condition];
 661 end loop;
 662 --4.WHILE
 663 while condition loop
 664     sequence_of_statement;
 665 end loop;
 666 --5.FOR
 667 for loop_counter in[reverse]low_bound..high_bound loop
 668     sequence_of_statement;
 669 end loop;
 670 --例:
 671 begin
 672     for v_counter in 1..50 loop
 673     insert into temp_table values(v_counter,'loop index');
 674     end loop;
 675 end;
 676 --6.GOTO
 677 declare
 678     v_counter binary_integer:=1;
 679 begin
 680     <<label>>
 681     insert into temp_table values(v_counter,'loop index');
 682     v_counter:=v_counter+1;
 683     if v_counter <= 50 then
 684         goto label;
 685     end if;
 686 end;
 687 --游標
 688 --1.顯示游標
 689 cursor cursor_name is select_statement;--(1)定義游標
 690 open cursor_name;--(2)打開游標
 691 fetch cursor_name into variable_list|record_variable;--(3)檢索游標
 692 close cursor_name;--(4)關閉游標
 693 --例:
 694 declare
 695     v_deptno hr.employees.department_id%type;
 696     cursor c_emp is select*from hr.employees
 697         where department_id=v_deptno;
 698     v_emp c_emp%rowtype;
 699 begin
 700     v_deptno:=&x;
 701     open c_emp;
 702     loop
 703         fetch c_emp into v_emp;
 704         exit when c_emp%notfound;
 705         dbms_output.put_line(v_emp.employee_id||''||v_deptno||''
 706         v_emp.first_name||''||v_emp.last_name||''||v_emp.salary);
 707     end loop;
 708     close c_emp;
 709 end;
 710 --顯式游標的屬性
 711 --無論顯式游標還是隱式游標,都具有%isopen、%found、%notfound、
 712 --%rowcount、返回到目前為止從游標緩沖區檢索的記錄的個數。
 713 --%bulk_rowcount數值型,用於取得FORALL語句執行批綁定操作時第i個元素所影響的行數。五個屬性,
 714 --利用游標屬性可以判斷當前游標狀態。
 715 --.參數化顯式游標
 716 cursor cursor_name(parameter1 datatype[,parameter2 datatype…])
 717     is select_statement;
 718 --例如,查詢並輸出某個部門的員工信息。
 719 declare
 720     cursor c_emp(p_deptno employees.department_id%type)is
 721     select*from hr.employees where department_id=p_deptno;
 722     v_emp c_emp%rowtype;
 723 begin
 724     open c_emp(10);
 725     loop
 726         fetch c_emp into v_emp;
 727         exit when c_emp%notfound;
 728         dbms_output.put_line(v_emp.employee_id||v_emp.last_name);
 729     end loop;
 730     close c_emp;
 731     open c_emp(20);
 732     loop
 733         fetch c_emp into v_emp;
 734         exit when c_emp%notfound;
 735         dbms_output.put_line(v_emp.employee_id||v_emp.last_name);
 736     end loop;
 737     close c_emp;
 738 end;
 739 --1.利用簡單循環檢索游標的基本方式如下:
 740 declare
 741     cursor cursor_name is select...;
 742 begin
 743     open cursor_name;
 744     loop
 745         fetch...into...;
 746         exit when cursor_name%notfound;
 747         ...
 748     end loop;
 749     close cursor_name;
 750 end;
 751 --2.利用WHILE循環檢索游標的基本方法如下:
 752 declare
 753     cursor cursor_name is select...;
 754 begin
 755     open cursor_name;
 756     fetch...into...;
 757     while cursor_name%found loop
 758         fetch...into...;
 759  760     end loop;
 761     close cursor;
 762 end;
 763 --3.利用FOR循環檢索游標
 764 --利用FOR循環檢索游標時,系統會自動打開、檢索和關閉游標。
 765 --用戶只需要考慮如何處理從游標緩沖區中檢索出來的數據。其方法如下:
 766 declare
 767     cursor cursor_name is select...;
 768 begin
 769     for loop_variable in cursor_name loop
 770  771     end loop;
 772 end;
 773 --1.利用游標更新或刪除數據的定義方法
 774 cursor cursor_name is
 775     select select_list_item from table for update[of column_reference]
 776     [nowait];--若數據對象已經被其他會話加鎖,則當前會話掛起等待(默認狀態)若指定則返回ORACLE錯誤。
 777 --2.利用游標更新或刪除數據的方法
 778 where current of cursor_name;
 779 --
 780 declare
 781     cursor c_emp is select*from hr.employees for update;
 782     v_increment number;
 783 begin
 784     for v_emp in c_emp loop
 785         case v_emp.department_id
 786             when 10 then v_increment:=100;
 787             when 20 then v_increment:=140;
 788             when 30 then v_increment:=200;
 789             else v_increment:=250;
 790         end case;
 791         update hr.employees set salary=salary+v_increment
 792             where current of c_emp;
 793     end loop;
 794     commit;
 795 end;
 796 --隱式游標
 797 --顯式游標用於處理返回多行數據的SELECT查詢,但所有的SQL語句都有一個執行的緩沖區,
 798 --隱式游標就是指向該緩沖區的指針,由系統隱含地打開、處理和關閉。隱式游標又稱為SQL游標。
 799 --sql%isopen--對用戶而言,該屬性值始終為false,因為操作時系統自動打開,操作完后立即自動關閉
 800 --sql%found--判斷當前的操作是否會對數據庫產生影響。如果有數據的插入、刪除、修改或查詢到數據,則返回true,否則返回false。
 801 --sql%notfound--判斷當前的操作是否對數據庫產生影響。如果沒有數據的插入、刪除、修改或沒有查詢到數據,則返回true,否則返回false。
 802 --sql%rowcount--數值型,返回當前操作所涉及的數據庫中的行數。
 803 --
 804 begin
 805     update hr.employees set salary = salary + 100
 806         where employee_id=1000;
 807     if sql%notfound then
 808         insert into hr.employees(employee_id,first_name,last_name,
 809                                     email,hire_date,job_id,department_id)
 810         values(employees_seq.nextval,'san','zhang',
 811                             'zs@neusoft.edu.cn',sysdate,'ac_account',200);
 812     end if;
 813 end;
 814 --
 815 begin
 816     update hr.employees set salary = salary + 100
 817         where employee_id = 1000;
 818     if sql%rowcount = 0 then
 819         insert into hr.employees(employee_id,first_name,last_name,
 820                                     email,hire_date,job_id,department_id)
 821         values(employees_seq.nextval,'san','zhang',
 822                                     'zs@neusoft.edu.cn',sysdate,'ac_account',200);
 823     end if;
 824 end;
 825 --注意 當SELECT…INTO語句沒有查詢到任何數據時,會激發NO_DATA_FOUND異常。
 826 --游標變量
 827 --前面介紹的顯式游標在定義時與特定的查詢綁定,其結構是不變的,因此又稱為靜態游標。
 828 --游標變量是一個指向多行查詢結果集的指針,不與特定的查詢綁定,
 829 --因此具有非常大的靈活性,可以在打開游標變量時定義查詢,可以返回不同結構的結果集。
 830 type ref_cursor_type_name is ref cursor[return return_type]--(1)定義游標引用類型
 831 --在Oracle 11g中,系統預定義了一個游標引用類型,稱為SYS_REFCURSOR,可以直接使用它定義游標變量。
 832 ref_cursor_type_name variable_name;--(2)聲明游標變量
 833 --
 834 type emp_cursor_type is ref cursor return employees%rowtype;
 835 type general_cursor_type is ref cursor;
 836 v_emp emp_cursor_type;
 837 v_general general_cursor_type;
 838 my_cursor sys_refcursor;
 839 OPEN cursor_variable FOR select_statement;--打開游標變量
 840 loop--檢索游標變量
 841     fetch cursor_variable into variable1,variable2,...;
 842     exit when cursor_variable%notfound;
 843  844 end loop;
 845 CLOSE cursor_variable;--.關閉游標變量
 846 --
 847 DECLARE
 848 TYPE emp_cursor_type IS REF CURSOR RETURN hr.employees%ROWTYPE;
 849 TYPE general_cursor_type IS REF CURSOR;
 850 v_emp emp_cursor_type;
 851 v_general general_cursor_type;
 852 my_cursor SYS_REFCURSOR;
 853 v_empinfo hr.employees%ROWTYPE;
 854 v_deptinfo hr.departments%ROWTYPE;
 855 begin
 856     open v_emp for select*from hr.employees;
 857     loop
 858         fetch v_emp into v_empinfo;
 859         exit when v_emp%notfound;
 860         dbms_output.put_line(v_empinfo.employee_id||''
 861             v_empinfo.first_name||''||v_empinfo.last_name||''
 862                 v_empinfo.salary);
 863     end loop;
 864     close v_emp;
 865     open my_cursor for select*from hr.departments;
 866     loop
 867         fetch my_cursor into v_deptinfo;
 868         exit when my_cursor%notfound;
 869         dbms_output.put_line(v_deptinfo.department_id||''
 870             v_deptinfo.department_name);
 871     end loop;
 872     close my_cursor;
 873     --open v_general for select employee_id,first_name,last_name,
 874     --salary,department_id from hr.employees;
 875 end;
 876 -----------------------------------------------------------------------------------------------------
 877 --預定義異常(略)
 878 --非預定義異常
 879 declare
 880     e_deptno_fk exception;
 881     pragma exception_init(e_deptno_fk,-2292);
 882 begin
 883  884 exception
 885  886 end;
 887 --用戶自定義異常
 888 e_exception exception;--定義異常
 889 raise user_define_exception;--拋出異常
 890 exception--異常的捕獲及處理
 891     when exception1[or excetpion2...]then sequence_of_statements1;
 892     when exception3[or exception4...]then sequence_of_statements2;
 893  894     when others then sequence_of_statementsn;
 895 end;
 896 ------------------------------------------------------------------------------------------------------------
 897 --創建存儲過程
 898 create[or replace]procedure procedure_name
 899     (parameter1_name[mode]datatype[default|:=value]
 900             [,parameter2_name[mode]datatype[default|:=value],...])
 901     as|is
 902     /*declarative section is here*/
 903 begin
 904     /*executable section is here*/
 905 exception
 906     /*exception section is here*/
 907 end[procedure_name];
 908 --其中mode有IN、OUT、IN OUT
 909 --刪除存儲過程
 910 drop procedure proc_show_emp;
 911 ---------------------------------------------------------------------------------------------------------
 912 --創建函數
 913 create[or replace]function function_name
 914         (parameter1_name[mode]datatype[default|:=value]
 915                 [,parameter2_name[mode]datatype[default|:=value],...])
 916     return return_datatype
 917 as|is
 918 /*declarative section is here*/
 919 begin
 920 /*executable section is here*/
 921 exception
 922 /*exception section is here*/
 923 end[function_name];
 924 --
 925 create or replace function func_dept_maxsal(
 926             p_deptno hr.employees.department_id%type)
 927     return hr.employees.salary%type
 928 as
 929     v_maxsal hr.employees.salary%type;
 930 begin
 931         select max(salary)into v_maxsal from hr.employees
 932             where department_id=p_deptno;
 933     return v_maxsal;
 934 exception
 935     when no_data_found then
 936     dbms_output.put_line('the deptno is invalid!');
 937 end func_dept_maxsal;
 938 --------------------------------------------------------------------------------------------------
 939 --創建包聲明
 940 create or replace package package_name
 941     is|as
 942     [pragma serially_resuable]
 943     type_definition|
 944     variable_declaration|
 945     exception_declaration
 946     cursor_declaration|
 947     procedure_declaration|
 948     function_declaration
 949 end[package_name];
 950 --.創建包體
 951 create or replace package body package_name
 952 is|as
 953     [pragma serially_resuable]
 954     type_definition|
 955     variable_declaration|
 956     exception_declaration
 957     cursor_declaration|
 958     procedure_definition|
 959     function_definition
 960 end[package_name];
 961 -------------------------------------------------------------------------
 962 --創建用戶
 963 create user user identified--用於指明用戶身份認證方式。
 964     [by password]--指定用戶采用數據庫身份認證
 965     [externally--指定用戶采用外部身份認證,如操作系統認證或第三方認證。
 966         [as 'certificate_dn|--指定用戶只采用SSL外部身份認證
 967         kerberos_principal_name']--指定用戶只采用kerberos外部身份認證。
 968     ]
 969     [globally[as 'directory_dn']]--指定用戶采用全局身份認證。
 970     [default tablespace tablespace]--用於設置用戶的默認表空間。
 971     [temporary tablespace tablesapce|tablespace_group_name]--用於設置用戶的臨時表空間
 972     [quota n k|m|unlimited on tablespace]--用於指定用戶在特定表空間上的配額
 973     [profile profile]--用於為用戶指定概要文件。默認值為DEFAULT,采用系統默認的概要文件。
 974     [password expire]--用於設置用戶口令的初始狀態為過期,用戶在首次登錄數據庫時必須修改口令。
 975     [account lock|unlock];--用於設置用戶初始狀態為鎖定,默認為不鎖定。
 976 --注意 創建一個用戶后,如果不為該用戶授權,則該用戶不能做任何操作,即便是連接數據庫。
 977 --只有給用戶授予了CREATE SESSION系統權限后,用戶才可以連接數據庫。
 978 --如果用戶要通過OEM訪問數據庫,還需要具有SELECT ANY DICTIONARY系統權限。
 979 orapwd file=filename[password=password][entries=numusers][force=y|n]
 980 [ignorecase=y|n]
 981 --
 982 orapwd file=E:\PWDorcl.ora password=www123 entries=5 force=n ignorecase=y;
 983 show parameter remote_login_passwordfile;
 984 alter system set remote_login_passwordfile = execlusive scope = spfile;
 985 --查詢某個用戶具有的角色:
 986 select grantee,granted_role from dba_role_privs where grantee='SYS';
 987 --查詢某個用戶具有的系統權限:
 988 select grantee,privilege from dba_sys_privs where grantee='SYS';
 989 --查詢某個角色中具有什么系統權限:
 990 select privilege from role_sys_privs where role='RESOURCE';
 991 --查詢某個角色中包含有什么角色
 992 select granted_role from role_role_privs where role='SYSDBA';
 993 --管理用戶、角色和權限的DBA視圖:
 994 
 995 ----------------------------------------------------------------------------------
 996 --創建重做日志文件
 997 alter database add logfile
 998 ('d:\disk4\redo04a.log','d:\disk5\redo04b.log')size 10m;
 999 alter database add logfile group 5
1000 ('d:\disk4\redo05a.log','d:\disk5\redo05b.log')size 10m;
1001 --注意:重做日志文件最小為4MB
1002 select * from v$logfile order by group#;
1003 alter database add logfile member
1004 'd:\disk5\redo01b.log'to group 1,
1005 'd:\disk5\redo02b.log'to group 2,
1006 'd:\disk5\redo03b.log'to group 3;
1007 alter database rename fileto--修改重做日志文件的名稱與位置
1008 ALTER DATABASE DROP LOGFILE MEMBER--刪除重做日志文件組及其成員
1009 --歸檔重做日志管理
1010 archive log list--查看當前數據庫的歸檔設置情況
1011 alter database archivelog--設置歸檔
1012 alter database noarchivelog--設置非歸檔
1013 --將數據庫從非歸檔模式轉換為歸檔模式的步驟為:
1014 --1.關閉數據庫
1015 shutdown
1016 --2.備份數據庫。
1017 --3.設置歸檔目的地
1018 select name,value,from v$parameter where name = 'db_recovery_file_dest';
1019 --4.將數據庫啟動到加載狀態。
1020 startup mount
1021 --5.改變數據庫歸檔模式。
1022 alter database archivelog;
1023 --6.打開數據庫。
1024 alter database open;
1025 --7.關閉數據庫。
1026 shutdown
1027 --8.備份數據庫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM