The creation of a new partition will have minimal impact. It is done as a recursive transaction - by the first session that does an insert into that new partition. If there are other sessions trying to insert into that same partition at just about the same instant - they will wait for the very first session to complete and then they will continue on. So, as most, you would expect a very very short 'pause' for just the users that happen to be inserting into the new partition at the instant it is being created. The other partitions will not be affected.
The same will be true for your drop as well - since you have no global indexes to deal with. The drop would only affect things if people are actively using that partition - but given that you are dropping it, I think it is safe of my to assume "no one would be accessing it"
And yes, every interval partitioned table has at least one "old fashioned range" partition - I loosely call this the "low high water mark" partition. So, this one will exist - but as you suggest - it can exist and be empty forever.
ops$tkyte%ORA11GR2> create table audit_trail
2 ( ts date,
3 data varchar2(30)
4 )
5 partition by range(ts)
6 interval (numtodsinterval(1,'day'))
7 store in (users, example )
8 (partition p0 values less than
9 (to_date('23-feb-2007','dd-mon-yyyy'))
10 )
11 /
Table created.
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> select partition_name, tablespace_name, high_value
2 from user_tab_partitions
3 where table_name = 'AUDIT_TRAIL'
4 order by partition_position;
PARTITION_ TABLESPACE HIGH_VALUE
---------- ---------- ------------------------------------------------------------------------------------------
P0 USERS TO_DATE(' 2007-02-23 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> insert into audit_trail (ts,data) values
2 ( to_date('02-jun-2007','dd-mon-yyyy'), 'xx' );
1 row created.
ops$tkyte%ORA11GR2> column partition_name new_val PN
ops$tkyte%ORA11GR2> select partition_name, tablespace_name, high_value
2 from user_tab_partitions
3 where table_name = 'AUDIT_TRAIL'
4 order by partition_position;
PARTITION_ TABLESPACE HIGH_VALUE
---------- ---------- ------------------------------------------------------------------------------------------
P0 USERS TO_DATE(' 2007-02-23 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
SYS_P827 USERS TO_DATE(' 2007-06-03 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> select '&PN' from dual;
old 1: select '&PN' from dual
new 1: select 'SYS_P827' from dual
'SYS_P82
--------
SYS_P827
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> insert into audit_trail (ts,data) values
2 ( to_date('16-sep-2007','dd-mon-yyyy'), 'xx' );
1 row created.
ops$tkyte%ORA11GR2> select partition_name pname, tablespace_name, high_value
2 from user_tab_partitions
3 where table_name = 'AUDIT_TRAIL'
4 order by partition_position;
PNAME TABLESPACE HIGH_VALUE
------------------------------ ---------- ------------------------------------------------------------------------------------------
P0 USERS TO_DATE(' 2007-02-23 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
SYS_P827 USERS TO_DATE(' 2007-06-03 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
SYS_P828 USERS TO_DATE(' 2007-09-17 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> commit;
Commit complete.
ops$tkyte%ORA11GR2> alter table audit_trail drop partition &PN;
old 1: alter table audit_trail drop partition &PN
new 1: alter table audit_trail drop partition SYS_P827
Table altered.
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> select partition_name pname, tablespace_name, high_value
2 from user_tab_partitions
3 where table_name = 'AUDIT_TRAIL'
4 order by partition_position;
PNAME TABLESPACE HIGH_VALUE
------------------------------ ---------- ------------------------------------------------------------------------------------------
P0 USERS TO_DATE(' 2007-02-23 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
SYS_P828 USERS TO_DATE(' 2007-09-17 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')