Adam McGurk’s stunning strike saw Pompey fight from behind to preserve their unbeaten league record at Oxford.
The forward fired home from long-range after the interval to cancel out Liam Sercombe’s first half opener.
But the Blues had to play out the closing stages with only 10 men after captain Michael Doyle was sent off for a second bookable offence.
Paul Cook made two changes from the side that beat Barnet at Fratton Park the previous week.
With Gary Roberts and Brian Murphy both absent through injury, in came Gareth Evans wide on the right and Paul Jones between the sticks.
It was Pompey who made the brighter start, sending a few deliveries into the box for the hosts to deal with.
They were enjoying plenty of possession, but the final ball was lacking and Sam Slocombe remained untroubled in the Oxford goal.
And United started to grow into the game as the half progressed, finally having the first decent chance on 26 minutes.
Doyle was booked for a foul on Sercombe and Jones was quickly off his line to punch clear the resulting free-kick.
Pompey’s keeper was in action again moments later, this time preventing Danny Hylton from scoring with an angled close-range drive.
The visitors were soon forced into making a substitution, with Conor Chaplin limping off to be replaced by Matt Tubbs.
Hylton then saw his shot deflected behind and it was from the resulting corner that Oxford broke the deadlock.
Rose swung a dangerous cross into the box and Pompey were unable to properly deal with the delivery, leaving Sercombe in space to lash home the loose ball.
The Blues were still not creating much at the other end and a Ben Davies free-kick that curled wide was the closest they came to troubling Slocombe.
United were having more joy, however, and Roofe probably should have guided Callum O’Dowda’s cut-back on target.
Johnny Mullins then met a Rose free-kick on 43 minutes, but Jones palmed away his header and Pompey were able to hack clear.
And Jones came to the rescue again just before the interval, doing well to make himself large and deny Roofe.
Oxford United 1
Cook made a change at the break, with Adam Barton coming on for his first league appearance in place of the below-par Nigel Atangana.
Pompey soon had a chance to draw level when they broke quickly up the pitch and Slocombe did well to stop the onrushing Evans from meeting McGurk’s low cross.
Evans then hooked the ball into the box and McGurk sent a header looping narrowly over the crossbar.
But the Blues’ afternoon was perhaps best summed up on 58 minutes when Kyle Bennett did well to win a corner.
Evans placed the ball down to take what was clearly a well-rehearsed effort, only to roll it straight out of play.
But suddenly – and without looking particularly threatening – Pompey found themselves level.
There did not appear to be much on when McGURK received the ball 30 yards out, but he let fly with a fierce effort that beat Slocombe’s desperate dive and slammed into the net.
The goal seemed to give the visitors a massive lift, although Oxford arguably should have restored their advantage on 69 minutes.
Mullins met George Baldock’s cross with a firm header, but he could only direct the ball straight at Jones.
It was Pompey now looking the more assured side in possession, however, and they forged another good opening on 77 minutes.
A patient passing move ended with McGurk cutting the ball back for Bennett, who was unable to force his shot through a sea of bodies.
But, with the Blues firmly in control, they were reduced to 10 men after Doyle ended a brisk Oxford break by bringing down Sercombe.
Referee Iain Williamson immediately called Pompey’s skipper over and showed him his second yellow card of the afternoon, followed by a red.
However, the Blues saw out the final few minutes with relative ease to take a point back home to the south coast.
Oxford (4-4-2): Slocombe; Baldock, Mullins, Wright (c), Skarz; Rose (Ruffels 71), Sercombe, Lundstram, O’Dowda (MacDonald 40); Roofe (Hoban 82), Hylton
Goals: Sercombe 33
Booked: Hylton, Wright, Ruffels
Subs not used: Buchel, Dunkley, Roberts, Taylor
Pompey (4-2-3-1): Jones; Davies, Burgess, Clarke, Stevens; Atangana (Barton 46), Doyle (c); Bennett (Hollands 82), Chaplin (Tubbs 30), Evans; McGurk
Goals: McGurk 61
Sent off: Doyle (two yellow cards)
Subs not used: Bass, Webster, Naismith, Stockley
Referee: Iain Williamson
Attendance: 9,093 (2,459 Pompey fans)