# spfile v.s. pfile

1. pfile 純文字檔案， client端參數檔案；不能動態修改，可以用普通的編輯器修改，修改之後需要重啟。pfile可能會導致伺服器啟動不一致，因為可以在客戶端啟動。
2. spfile 二進制檔案，伺服器端參數檔案，有了spfile，oracle可以實現動態參數在線修改，部分參數修改之後無需重啟。但是，因為是二進制檔案，所以不能用普通的編輯器修改，要用alter命令從sql裡面來修改。spfile保證伺服器每次的啟動都是一致的。

spfile 與 pfile 設定檔可以互相轉換，只有 spfile 而沒有 pfile 文件時

`create pfile='位置＋名字' from spfile;`

例如:

```SQL
create pfile='E:\ORACLE\PRODUCT\10.2.0\DB_1\DBS\spfileorcl_bak.ora' from spfile;
```

同理，只有pfile而沒有spfile時，可以透過：

`create spfile='位置＋名字' from pfile;`

##### 檢查系統是以pfile還是spfile啟動

> 如果 isspecified 裡有 true，表明用 spfile 啟動，如果全為 false，則表明用pfile啟動

```SQL
select isspecified,count(*) from v$spparameter group by isspecified;
```

##### 檢查 spfile 的檔案路徑

```
show parameters spfile
```

##### 從 spfile 取得 pfile

```
Create pfile='d:pfileSID.ora' from spfile='spfile_location';
```

##### 從 pfile 取得 spfile

```
Create spfile='spfile_location' from pfile='Your_pfile_location';
```

##### Backup current spfile

exp: spfile = spfilewin.ora

```SQL
CREATE pfile='/opt/oracle/product/10.2.0/db_1/dbs/pfile.tmp' FROM spfile='/opt/oracle/product/10.2.0/db_1/dbs/spfilewin.ora'
CREATE spfile='/opt/oracle/product/10.2.0/db_1/dbs/spfilewin.ora.20140313' FROM pfile='/opt/oracle/product/10.2.0/db_1/dbs/pfile.tmp'
```

##### 使用其他 spfile/pfile 啟動資料庫

```
startup nomount

startup pfile='my_pfile'

startup spfile='my_spfile' 
```