Substitute James Henry’s second-half diving header from Ryan Ledson’s cross following a counter-attack was enough to separate the sides in a tight affair and move Karl Robinson’s side six points clear of the bottom four.
“It was a game we shouldn’t have lost,” said Ferguson. “We had the clearer chances in the game, but we didn’t take them.
“There weren’t many in the game, but the ones there were fell to us. It was important that we took one before they did. We had to deal with that goal better.”
Rovers were denied two penalty claims for fouls on Jordan Houghton and Alfie May, who almost scored a brilliant individual effort as he flicked the ball over Rob Dickie only to be denied by the legs of Simon Eastwood.
The Oxford goalkeeper also kept out a drive by John Marquis and Todd Kane headed over his own bar with May lurking.
Matty Blair fired straight at Eastwood from a glorious chance following Rodney Kongolo’s cross as Doncaster continued to push after the break.
Marquis turned in the ball from Ben Whiteman’s cross, but was offside, and Oxford went in front on 63 minutes before maintaing their lead thanks to a fine save from former Huddersfield goalkeeper Eastwood, who tipped over Marquis’s sweeping shot following a fine counter-attack.
The result sees Rovers slip down to 14th with four games to play, starting with Blackburn Rovers at home tomorrow.
Doncaster Rovers: Marosi, Alcock (Kiwomya 86), Baudry, Butler, Mason, McCullough, Kongolo (Houghton 70), Blair, Whiteman, Marquis, May (Williams 74). Unused substitutes: Lawlor, Anderson, Boyle, Amos.
Oxford United: Eastwood, Kane, Dickie, Mousinho, Ruffels, Ledson, Brannagan, Rothwell (Nelson 76), Mowatt (Henry 56), Obika (Hall 90), Thomas. Unused substitutes: Martin, Shearer, Ricardinho, Van Kessel.
Referee: M Coy (Co Durham).